From abd2e6b9795d26214d36dcfc3e4c60fd95f8b063 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Thu, 30 Jul 2020 15:42:26 +0000 Subject: [PATCH 001/317] Add some knobs for tuning and lz4 compaction --- cmake/CompileRocksDB.cmake | 4 ++-- fdbserver/CMakeLists.txt | 2 +- fdbserver/KeyValueStoreRocksDB.actor.cpp | 8 +++++++- fdbserver/Knobs.cpp | 12 ++++++++---- fdbserver/Knobs.h | 6 +++++- 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/cmake/CompileRocksDB.cmake b/cmake/CompileRocksDB.cmake index 3de2696beb..aeceaba998 100644 --- a/cmake/CompileRocksDB.cmake +++ b/cmake/CompileRocksDB.cmake @@ -18,7 +18,7 @@ if (RocksDB_FOUND) -DWITH_CORE_TOOLS=OFF -DWITH_BENCHMARK_TOOLS=OFF -DWITH_BZ2=OFF - -DWITH_LZ4=OFF + -DWITH_LZ4=ON -DWITH_SNAPPY=OFF -DWITH_ZLIB=OFF -DWITH_ZSTD=OFF @@ -45,7 +45,7 @@ else() -DWITH_CORE_TOOLS=OFF -DWITH_BENCHMARK_TOOLS=OFF -DWITH_BZ2=OFF - -DWITH_LZ4=OFF + -DWITH_LZ4=ON -DWITH_SNAPPY=OFF -DWITH_ZLIB=OFF -DWITH_ZSTD=OFF diff --git a/fdbserver/CMakeLists.txt b/fdbserver/CMakeLists.txt index f6a4017ff8..4de1044dc3 100644 --- a/fdbserver/CMakeLists.txt +++ b/fdbserver/CMakeLists.txt @@ -242,7 +242,7 @@ target_include_directories(fdbserver PRIVATE if (WITH_ROCKSDB_EXPERIMENTAL) add_dependencies(fdbserver rocksdb) target_include_directories(fdbserver PRIVATE ${ROCKSDB_INCLUDE_DIR}) - target_link_libraries(fdbserver PRIVATE fdbclient fdb_sqlite ${ROCKSDB_LIBRARIES}) + target_link_libraries(fdbserver PRIVATE fdbclient fdb_sqlite ${ROCKSDB_LIBRARIES} lz4) else() target_link_libraries(fdbserver PRIVATE fdbclient fdb_sqlite) endif() diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index a96686e98f..7a3a6afe5e 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -24,12 +24,18 @@ StringRef toStringRef(rocksdb::Slice s) { rocksdb::Options getOptions() { rocksdb::Options options; + options.avoid_unnecessary_blocking_io = true; options.create_if_missing = true; + if (SERVER_KNOBS->ROCKSDB_BACKGROUND_PARALLELISM > 0) { + options.IncreaseParallelism(SERVER_KNOBS->ROCKSDB_BACKGROUND_PARALLELISM); + } + options.level_compaction_dynamic_level_bytes = true; + options.OptimizeLevelStyleCompaction(SERVER_KNOBS->ROCKSDB_MEMTABLE_BYTES); return options; } rocksdb::ColumnFamilyOptions getCFOptions() { - return {}; + return { getOptions() }; } struct RocksDBKeyValueStore : IKeyValueStore { diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 4cf9d6e631..120c960102 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -93,7 +93,7 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi init( PEEK_RESET_INTERVAL, 300.0 ); if ( randomize && BUGGIFY ) PEEK_RESET_INTERVAL = 20.0; init( PEEK_MAX_LATENCY, 0.5 ); if ( randomize && BUGGIFY ) PEEK_MAX_LATENCY = 0.0; init( PEEK_COUNT_SMALL_MESSAGES, false ); if ( randomize && BUGGIFY ) PEEK_COUNT_SMALL_MESSAGES = true; - init( PEEK_STATS_INTERVAL, 10.0 ); + init( PEEK_STATS_INTERVAL, 10.0 ); init( PEEK_STATS_SLOW_AMOUNT, 0 ); init( PEEK_STATS_SLOW_RATIO, 0.5 ); @@ -236,7 +236,7 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi init( DD_VALIDATE_LOCALITY, true ); if( randomize && BUGGIFY ) DD_VALIDATE_LOCALITY = false; init( DD_CHECK_INVALID_LOCALITY_DELAY, 60 ); if( randomize && BUGGIFY ) DD_CHECK_INVALID_LOCALITY_DELAY = 1 + deterministicRandom()->random01() * 600; init( DD_ENABLE_VERBOSE_TRACING, false ); if( randomize && BUGGIFY ) DD_ENABLE_VERBOSE_TRACING = true; - init( DD_SS_FAILURE_VERSIONLAG, 250000000 ); + init( DD_SS_FAILURE_VERSIONLAG, 250000000 ); init( DD_SS_ALLOWED_VERSIONLAG, 200000000 ); if( randomize && BUGGIFY ) { DD_SS_FAILURE_VERSIONLAG = deterministicRandom()->randomInt(15000000, 500000000); DD_SS_ALLOWED_VERSIONLAG = 0.75 * DD_SS_FAILURE_VERSIONLAG; } init( DD_SS_STUCK_TIME_LIMIT, 300.0 ); if( randomize && BUGGIFY ) { DD_SS_STUCK_TIME_LIMIT = 200.0 + deterministicRandom()->random01() * 100.0; } @@ -308,6 +308,10 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi // KeyValueStoreMemory init( REPLACE_CONTENTS_BYTES, 1e5 ); + // KeyValueStoreRocksDB + init( ROCKSDB_BACKGROUND_PARALLELISM, 0 ); + init( ROCKSDB_MEMTABLE_BYTES, 512 * 1024 * 1024 ); + // Leader election bool longLeaderElection = randomize && BUGGIFY; init( MAX_NOTIFICATIONS, 100000 ); @@ -573,7 +577,7 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi init( TRACE_LOG_FLUSH_FAILURE_CHECK_INTERVAL_SECONDS, 10 ); init( TRACE_LOG_PING_TIMEOUT_SECONDS, 5.0 ); init( MIN_DELAY_CC_WORST_FIT_CANDIDACY_SECONDS, 10.0 ); - init( MAX_DELAY_CC_WORST_FIT_CANDIDACY_SECONDS, 30.0 ); + init( MAX_DELAY_CC_WORST_FIT_CANDIDACY_SECONDS, 30.0 ); init( DBINFO_FAILED_DELAY, 1.0 ); // Test harness @@ -646,7 +650,7 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi init( REDWOOD_REMAP_CLEANUP_WINDOW, 50 ); init( REDWOOD_REMAP_CLEANUP_LAG, 0.1 ); init( REDWOOD_LOGGING_INTERVAL, 5.0 ); - + // Server request latency measurement init( LATENCY_SAMPLE_SIZE, 100000 ); init( LATENCY_METRICS_LOGGING_INTERVAL, 60.0 ); diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 50f269ede8..61d0969333 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -243,6 +243,10 @@ public: // KeyValueStoreMemory int64_t REPLACE_CONTENTS_BYTES; + // KeyValueStoreRocksDB + int ROCKSDB_BACKGROUND_PARALLELISM; + int64_t ROCKSDB_MEMTABLE_BYTES; + // Leader election int MAX_NOTIFICATIONS; int MIN_NOTIFICATIONS; @@ -578,7 +582,7 @@ public: int64_t REDWOOD_REMAP_CLEANUP_WINDOW; // Remap remover lag interval in which to coalesce page writes double REDWOOD_REMAP_CLEANUP_LAG; // Maximum allowed remap remover lag behind the cleanup window as a multiple of the window size double REDWOOD_LOGGING_INTERVAL; - + // Server request latency measurement int LATENCY_SAMPLE_SIZE; double LATENCY_METRICS_LOGGING_INTERVAL; From a94c4cce850b46a4cb8825e9b1e11d5d0e32629a Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Thu, 30 Jul 2020 22:31:18 +0000 Subject: [PATCH 002/317] Add an unsafe option to disable manual fsyncing rocksdb --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 2 +- fdbserver/Knobs.cpp | 1 + fdbserver/Knobs.h | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index 7a3a6afe5e..3ae8d6c84d 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -92,7 +92,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { }; void action(CommitAction& a) { rocksdb::WriteOptions options; - options.sync = true; + options.sync = !SERVER_KNOBS->ROCKSDB_UNSAFE_AUTO_FSYNC; auto s = db->Write(options, a.batchToCommit.get()); if (!s.ok()) { TraceEvent(SevError, "RocksDBError").detail("Error", s.ToString()).detail("Method", "Commit"); diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 120c960102..b5a15d6ca0 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -311,6 +311,7 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi // KeyValueStoreRocksDB init( ROCKSDB_BACKGROUND_PARALLELISM, 0 ); init( ROCKSDB_MEMTABLE_BYTES, 512 * 1024 * 1024 ); + init( ROCKSDB_UNSAFE_AUTO_FSYNC, false ); // Leader election bool longLeaderElection = randomize && BUGGIFY; diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 61d0969333..2ea5660154 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -246,6 +246,7 @@ public: // KeyValueStoreRocksDB int ROCKSDB_BACKGROUND_PARALLELISM; int64_t ROCKSDB_MEMTABLE_BYTES; + bool ROCKSDB_UNSAFE_AUTO_FSYNC; // Leader election int MAX_NOTIFICATIONS; From 8ac89fc37fe903bc539cceb2014a40b8b87fe8de Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Fri, 31 Jul 2020 16:33:42 +0000 Subject: [PATCH 003/317] Log trace events for slow range reads --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index 3ae8d6c84d..204ef8bdbc 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -4,6 +4,7 @@ #include #include "flow/flow.h" #include "flow/IThreadPool.h" +#include "flow/Platform.h" #endif // SSD_ROCKSDB_EXPERIMENTAL @@ -201,6 +202,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { virtual double getTimeEstimate() { return SERVER_KNOBS->READ_RANGE_TIME_ESTIMATE; } }; void action(ReadRangeAction& a) { + auto now = timer_monotonic(); auto cursor = std::unique_ptr(db->NewIterator(readOptions)); Standalone result; int accumulatedBytes = 0; @@ -237,6 +239,12 @@ struct RocksDBKeyValueStore : IKeyValueStore { result.readThrough = result[result.size()-1].key; } a.result.send(result); + auto elapsed = timer_monotonic() - now; + if (elapsed > 0.1) { + TraceEvent(SevError, "RocksDBSlowRead") + .detail("Time", std::to_string(elapsed)) + .detail("Method", "ReadRange"); + } } }; From 50b1649f8dd54785faad09f79a64bc824d2b50df Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Mon, 3 Aug 2020 19:02:29 +0000 Subject: [PATCH 004/317] Add more data to the slow query log --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 6 +++++- versions.target | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index 204ef8bdbc..a83b44dedd 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -243,7 +243,11 @@ struct RocksDBKeyValueStore : IKeyValueStore { if (elapsed > 0.1) { TraceEvent(SevError, "RocksDBSlowRead") .detail("Time", std::to_string(elapsed)) - .detail("Method", "ReadRange"); + .detail("Method", "ReadRange") + .detail("Start", a.keys.begin.printable()) + .detail("End", a.keys.end.printable()) + .detail("RowLimit", a.rowLimit) + .detail("ByteLimit", a.byteLimit); } } }; diff --git a/versions.target b/versions.target index 4c151da97a..f33c57c4fd 100644 --- a/versions.target +++ b/versions.target @@ -1,7 +1,7 @@ - 6.2.25 - 6.2 + 6.3.5 + 6.3 From 3485f1addd5fea75c4833b88f9825923f09ec78d Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Wed, 5 Aug 2020 21:45:48 +0000 Subject: [PATCH 005/317] Add some thread yields --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index a83b44dedd..cef6130aa8 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -338,6 +338,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { a->batchToCommit = std::move(writeBatch); auto res = a->done.getFuture(); writeThread->post(a); + threadYield(); return res; } @@ -345,6 +346,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { auto a = new Reader::ReadValueAction(key, debugID); auto res = a->result.getFuture(); readThreads->post(a); + threadYield(); return res; } @@ -352,6 +354,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { auto a = new Reader::ReadValuePrefixAction(key, maxLength, debugID); auto res = a->result.getFuture(); readThreads->post(a); + threadYield(); return res; } @@ -359,6 +362,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { auto a = new Reader::ReadRangeAction(keys, rowLimit, byteLimit); auto res = a->result.getFuture(); readThreads->post(a); + threadYield(); return res; } From 7c2e45d5a62763c83cdf27713297e4436a159e29 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Fri, 7 Aug 2020 18:48:19 +0000 Subject: [PATCH 006/317] Add some RocksDB stats --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index cef6130aa8..cb3787956b 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -1,5 +1,7 @@ #ifdef SSD_ROCKSDB_EXPERIMENTAL +#include +#include #include #include #include "flow/flow.h" @@ -130,7 +132,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { explicit Reader(DB& db) : db(db) {} - void init() override {} + void init() override { rocksdb::SetPerfLevel(rocksdb::PerfLevel::kEnableTimeExceptForMutex); } struct ReadValueAction : TypedAction { Key key; @@ -203,6 +205,8 @@ struct RocksDBKeyValueStore : IKeyValueStore { }; void action(ReadRangeAction& a) { auto now = timer_monotonic(); + rocksdb::get_perf_context()->Reset(); + rocksdb::get_iostats_context()->Reset(); auto cursor = std::unique_ptr(db->NewIterator(readOptions)); Standalone result; int accumulatedBytes = 0; @@ -240,14 +244,18 @@ struct RocksDBKeyValueStore : IKeyValueStore { } a.result.send(result); auto elapsed = timer_monotonic() - now; - if (elapsed > 0.1) { + if (elapsed > 0.5) { + auto time = std::to_string(elapsed); TraceEvent(SevError, "RocksDBSlowRead") - .detail("Time", std::to_string(elapsed)) + .detail("Time", time) .detail("Method", "ReadRange") .detail("Start", a.keys.begin.printable()) .detail("End", a.keys.end.printable()) .detail("RowLimit", a.rowLimit) .detail("ByteLimit", a.byteLimit); + std::cout << "Time: " << time << "\n"; + std::cout << "Perf: " << rocksdb::get_perf_context()->ToString() << "\n"; + std::cout << "IO: " << rocksdb::get_iostats_context()->ToString() << "\n"; } } }; From 1245143ec10a3ce1a11528d1b78f981b23ecd044 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Mon, 10 Aug 2020 19:47:26 +0000 Subject: [PATCH 007/317] Enable per-level stats and enforce iterator upper/lower bounds --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index cb3787956b..ae955296f3 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -128,11 +128,13 @@ struct RocksDBKeyValueStore : IKeyValueStore { struct Reader : IThreadPoolReceiver { DB& db; - rocksdb::ReadOptions readOptions; explicit Reader(DB& db) : db(db) {} - void init() override { rocksdb::SetPerfLevel(rocksdb::PerfLevel::kEnableTimeExceptForMutex); } + void init() override { + rocksdb::SetPerfLevel(rocksdb::PerfLevel::kEnableTimeExceptForMutex); + rocksdb::get_perf_context()->EnablePerLevelPerfContext(); + } struct ReadValueAction : TypedAction { Key key; @@ -150,7 +152,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { traceBatch.get().addEvent("GetValueDebug", a.debugID.get().first(), "Reader.Before"); } rocksdb::PinnableSlice value; - auto s = db->Get(readOptions, db->DefaultColumnFamily(), toSlice(a.key), &value); + auto s = db->Get({}, db->DefaultColumnFamily(), toSlice(a.key), &value); if (a.debugID.present()) { traceBatch.get().addEvent("GetValueDebug", a.debugID.get().first(), "Reader.After"); traceBatch.get().dump(); @@ -181,7 +183,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { traceBatch.get().addEvent("GetValuePrefixDebug", a.debugID.get().first(), "Reader.Before"); //.detail("TaskID", g_network->getCurrentTask()); } - auto s = db->Get(readOptions, db->DefaultColumnFamily(), toSlice(a.key), &value); + auto s = db->Get({}, db->DefaultColumnFamily(), toSlice(a.key), &value); if (a.debugID.present()) { traceBatch.get().addEvent("GetValuePrefixDebug", a.debugID.get().first(), "Reader.After"); //.detail("TaskID", g_network->getCurrentTask()); @@ -207,10 +209,14 @@ struct RocksDBKeyValueStore : IKeyValueStore { auto now = timer_monotonic(); rocksdb::get_perf_context()->Reset(); rocksdb::get_iostats_context()->Reset(); - auto cursor = std::unique_ptr(db->NewIterator(readOptions)); Standalone result; int accumulatedBytes = 0; + rocksdb::Status s; if (a.rowLimit >= 0) { + rocksdb::ReadOptions options; + auto endSlice = toSlice(a.keys.end); + options.iterate_upper_bound = &endSlice; + auto cursor = std::unique_ptr(db->NewIterator(options)); cursor->Seek(toSlice(a.keys.begin)); while (cursor->Valid() && toStringRef(cursor->key()) < a.keys.end && result.size() < a.rowLimit && accumulatedBytes < a.byteLimit) { @@ -219,7 +225,12 @@ struct RocksDBKeyValueStore : IKeyValueStore { result.push_back_deep(result.arena(), kv); cursor->Next(); } + s = cursor->status(); } else { + rocksdb::ReadOptions options; + auto beginSlice = toSlice(a.keys.begin); + options.iterate_lower_bound = &beginSlice; + auto cursor = std::unique_ptr(db->NewIterator(options)); cursor->SeekForPrev(toSlice(a.keys.end)); if (cursor->Valid() && toStringRef(cursor->key()) == a.keys.end) { cursor->Prev(); @@ -232,8 +243,8 @@ struct RocksDBKeyValueStore : IKeyValueStore { result.push_back_deep(result.arena(), kv); cursor->Prev(); } + s = cursor->status(); } - auto s = cursor->status(); if (!s.ok()) { TraceEvent(SevError, "RocksDBError").detail("Error", s.ToString()).detail("Method", "ReadRange"); } From 9065fb3127670a31dda154e0d0a92238f8b4921c Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Tue, 11 Aug 2020 18:00:01 +0000 Subject: [PATCH 008/317] Add knob for periodic compactions --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 3 +++ fdbserver/Knobs.cpp | 1 + fdbserver/Knobs.h | 1 + 3 files changed, 5 insertions(+) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index ae955296f3..7ce2da48d8 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -34,6 +34,9 @@ rocksdb::Options getOptions() { } options.level_compaction_dynamic_level_bytes = true; options.OptimizeLevelStyleCompaction(SERVER_KNOBS->ROCKSDB_MEMTABLE_BYTES); + if (SERVER_KNOBS->ROCKSDB_PERIODIC_COMPACTION_SECONDS > 0) { + options.periodic_compaction_seconds = SERVER_KNOBS->ROCKSDB_PERIODIC_COMPACTION_SECONDS; + } return options; } diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index b5a15d6ca0..d9f40dae51 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -312,6 +312,7 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi init( ROCKSDB_BACKGROUND_PARALLELISM, 0 ); init( ROCKSDB_MEMTABLE_BYTES, 512 * 1024 * 1024 ); init( ROCKSDB_UNSAFE_AUTO_FSYNC, false ); + init( ROCKSDB_PERIODIC_COMPACTION_SECONDS, 0 ); // Leader election bool longLeaderElection = randomize && BUGGIFY; diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 2ea5660154..e2f7ed101a 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -247,6 +247,7 @@ public: int ROCKSDB_BACKGROUND_PARALLELISM; int64_t ROCKSDB_MEMTABLE_BYTES; bool ROCKSDB_UNSAFE_AUTO_FSYNC; + int64_t ROCKSDB_PERIODIC_COMPACTION_SECONDS; // Leader election int MAX_NOTIFICATIONS; From 8c201246128388e67449e45189dd4d90cf5b3e95 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Tue, 11 Aug 2020 18:49:40 +0000 Subject: [PATCH 009/317] Short circuit reads --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index 7ce2da48d8..d22259a671 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -209,10 +209,13 @@ struct RocksDBKeyValueStore : IKeyValueStore { virtual double getTimeEstimate() { return SERVER_KNOBS->READ_RANGE_TIME_ESTIMATE; } }; void action(ReadRangeAction& a) { + Standalone result; + if (a.rowLimit == 0 || a.byteLimit == 0) { + a.result.send(result); + } auto now = timer_monotonic(); rocksdb::get_perf_context()->Reset(); rocksdb::get_iostats_context()->Reset(); - Standalone result; int accumulatedBytes = 0; rocksdb::Status s; if (a.rowLimit >= 0) { @@ -221,11 +224,14 @@ struct RocksDBKeyValueStore : IKeyValueStore { options.iterate_upper_bound = &endSlice; auto cursor = std::unique_ptr(db->NewIterator(options)); cursor->Seek(toSlice(a.keys.begin)); - while (cursor->Valid() && toStringRef(cursor->key()) < a.keys.end && result.size() < a.rowLimit && - accumulatedBytes < a.byteLimit) { + while (cursor->Valid() && toStringRef(cursor->key()) < a.keys.end) { KeyValueRef kv(toStringRef(cursor->key()), toStringRef(cursor->value())); accumulatedBytes += sizeof(KeyValueRef) + kv.expectedSize(); result.push_back_deep(result.arena(), kv); + // Calling `cursor->Next()` is potentially expensive, so short-circut here just in case. + if (result.size() >= a.rowLimit || accumulatedBytes >= a.byteLimit) { + break; + } cursor->Next(); } s = cursor->status(); @@ -239,11 +245,14 @@ struct RocksDBKeyValueStore : IKeyValueStore { cursor->Prev(); } - while (cursor->Valid() && toStringRef(cursor->key()) >= a.keys.begin && result.size() < -a.rowLimit && - accumulatedBytes < a.byteLimit) { + while (cursor->Valid() && toStringRef(cursor->key()) >= a.keys.begin) { KeyValueRef kv(toStringRef(cursor->key()), toStringRef(cursor->value())); accumulatedBytes += sizeof(KeyValueRef) + kv.expectedSize(); result.push_back_deep(result.arena(), kv); + // Calling `cursor->Prev()` is potentially expensive, so short-circut here just in case. + if (result.size() >= -a.rowLimit || accumulatedBytes >= a.byteLimit) { + break; + } cursor->Prev(); } s = cursor->status(); From 97165dd278907d9d7afc2f385d4dad951e75cf58 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Tue, 11 Aug 2020 18:49:51 +0000 Subject: [PATCH 010/317] Revert "Add some thread yields" This reverts commit 3485f1addd5fea75c4833b88f9825923f09ec78d. --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index d22259a671..545299d3a1 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -369,7 +369,6 @@ struct RocksDBKeyValueStore : IKeyValueStore { a->batchToCommit = std::move(writeBatch); auto res = a->done.getFuture(); writeThread->post(a); - threadYield(); return res; } @@ -377,7 +376,6 @@ struct RocksDBKeyValueStore : IKeyValueStore { auto a = new Reader::ReadValueAction(key, debugID); auto res = a->result.getFuture(); readThreads->post(a); - threadYield(); return res; } @@ -385,7 +383,6 @@ struct RocksDBKeyValueStore : IKeyValueStore { auto a = new Reader::ReadValuePrefixAction(key, maxLength, debugID); auto res = a->result.getFuture(); readThreads->post(a); - threadYield(); return res; } @@ -393,7 +390,6 @@ struct RocksDBKeyValueStore : IKeyValueStore { auto a = new Reader::ReadRangeAction(keys, rowLimit, byteLimit); auto res = a->result.getFuture(); readThreads->post(a); - threadYield(); return res; } From 16582f9d7bf83dd3b2c79b52d9aecc8c91dc64d5 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Wed, 12 Aug 2020 20:50:32 +0000 Subject: [PATCH 011/317] Refactor to avoid relying on object slicing --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index 545299d3a1..34108f04bc 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -1,9 +1,9 @@ #ifdef SSD_ROCKSDB_EXPERIMENTAL -#include -#include #include +#include #include +#include #include "flow/flow.h" #include "flow/IThreadPool.h" #include "flow/Platform.h" @@ -25,13 +25,8 @@ StringRef toStringRef(rocksdb::Slice s) { return StringRef(reinterpret_cast(s.data()), s.size()); } -rocksdb::Options getOptions() { - rocksdb::Options options; - options.avoid_unnecessary_blocking_io = true; - options.create_if_missing = true; - if (SERVER_KNOBS->ROCKSDB_BACKGROUND_PARALLELISM > 0) { - options.IncreaseParallelism(SERVER_KNOBS->ROCKSDB_BACKGROUND_PARALLELISM); - } +rocksdb::ColumnFamilyOptions getCFOptions() { + rocksdb::ColumnFamilyOptions options; options.level_compaction_dynamic_level_bytes = true; options.OptimizeLevelStyleCompaction(SERVER_KNOBS->ROCKSDB_MEMTABLE_BYTES); if (SERVER_KNOBS->ROCKSDB_PERIODIC_COMPACTION_SECONDS > 0) { @@ -40,8 +35,14 @@ rocksdb::Options getOptions() { return options; } -rocksdb::ColumnFamilyOptions getCFOptions() { - return { getOptions() }; +rocksdb::Options getOptions() { + rocksdb::Options options({}, getCFOptions()); + options.avoid_unnecessary_blocking_io = true; + options.create_if_missing = true; + if (SERVER_KNOBS->ROCKSDB_BACKGROUND_PARALLELISM > 0) { + options.IncreaseParallelism(SERVER_KNOBS->ROCKSDB_BACKGROUND_PARALLELISM); + } + return options; } struct RocksDBKeyValueStore : IKeyValueStore { From d3ad73906f921846162875c2815f90af85b9037b Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Wed, 12 Aug 2020 20:58:12 +0000 Subject: [PATCH 012/317] Add a compact on deletion collector to tables --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index 34108f04bc..bff6aa8551 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "flow/flow.h" #include "flow/IThreadPool.h" #include "flow/Platform.h" @@ -32,6 +33,8 @@ rocksdb::ColumnFamilyOptions getCFOptions() { if (SERVER_KNOBS->ROCKSDB_PERIODIC_COMPACTION_SECONDS > 0) { options.periodic_compaction_seconds = SERVER_KNOBS->ROCKSDB_PERIODIC_COMPACTION_SECONDS; } + // Compact sstables when there's too much deleted stuff. + options.table_properties_collector_factories = { rocksdb::NewCompactOnDeletionCollectorFactory(128, 1) }; return options; } From c2e49b2dfa52b8df8236c40412b744c72be5a26f Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Thu, 13 Aug 2020 15:12:54 +0000 Subject: [PATCH 013/317] Revert "Revert "Add some thread yields"" This reverts commit 97165dd278907d9d7afc2f385d4dad951e75cf58. --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index bff6aa8551..ece3206540 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -373,6 +373,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { a->batchToCommit = std::move(writeBatch); auto res = a->done.getFuture(); writeThread->post(a); + threadYield(); return res; } @@ -380,6 +381,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { auto a = new Reader::ReadValueAction(key, debugID); auto res = a->result.getFuture(); readThreads->post(a); + threadYield(); return res; } @@ -387,6 +389,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { auto a = new Reader::ReadValuePrefixAction(key, maxLength, debugID); auto res = a->result.getFuture(); readThreads->post(a); + threadYield(); return res; } @@ -394,6 +397,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { auto a = new Reader::ReadRangeAction(keys, rowLimit, byteLimit); auto res = a->result.getFuture(); readThreads->post(a); + threadYield(); return res; } From 366bb1bd3375ad8f0af2c29a2b18629b2ec7416d Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Fri, 21 Aug 2020 17:37:47 +0000 Subject: [PATCH 014/317] Remove slow range read logging --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 25 +----------------------- 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index ece3206540..dd92c447d8 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -1,13 +1,10 @@ #ifdef SSD_ROCKSDB_EXPERIMENTAL #include -#include #include -#include #include #include "flow/flow.h" #include "flow/IThreadPool.h" -#include "flow/Platform.h" #endif // SSD_ROCKSDB_EXPERIMENTAL @@ -138,10 +135,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { explicit Reader(DB& db) : db(db) {} - void init() override { - rocksdb::SetPerfLevel(rocksdb::PerfLevel::kEnableTimeExceptForMutex); - rocksdb::get_perf_context()->EnablePerLevelPerfContext(); - } + void init() override {} struct ReadValueAction : TypedAction { Key key; @@ -217,9 +211,6 @@ struct RocksDBKeyValueStore : IKeyValueStore { if (a.rowLimit == 0 || a.byteLimit == 0) { a.result.send(result); } - auto now = timer_monotonic(); - rocksdb::get_perf_context()->Reset(); - rocksdb::get_iostats_context()->Reset(); int accumulatedBytes = 0; rocksdb::Status s; if (a.rowLimit >= 0) { @@ -270,20 +261,6 @@ struct RocksDBKeyValueStore : IKeyValueStore { result.readThrough = result[result.size()-1].key; } a.result.send(result); - auto elapsed = timer_monotonic() - now; - if (elapsed > 0.5) { - auto time = std::to_string(elapsed); - TraceEvent(SevError, "RocksDBSlowRead") - .detail("Time", time) - .detail("Method", "ReadRange") - .detail("Start", a.keys.begin.printable()) - .detail("End", a.keys.end.printable()) - .detail("RowLimit", a.rowLimit) - .detail("ByteLimit", a.byteLimit); - std::cout << "Time: " << time << "\n"; - std::cout << "Perf: " << rocksdb::get_perf_context()->ToString() << "\n"; - std::cout << "IO: " << rocksdb::get_iostats_context()->ToString() << "\n"; - } } }; From 62fb44e3b9d9196e4998de49b753db9ba0b117f8 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Wed, 9 Sep 2020 19:30:13 +0000 Subject: [PATCH 015/317] Use the live data estimate instead of total data --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index 39b71a98fe..62138d25fa 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -372,16 +372,14 @@ struct RocksDBKeyValueStore : IKeyValueStore { } StorageBytes getStorageBytes() override { + uint64_t live = 0; + ASSERT(db->GetIntProperty(rocksdb::DB::Properties::kEstimateLiveDataSize, &live)); + int64_t free; int64_t total; - - uint64_t sstBytes = 0; - ASSERT(db->GetIntProperty(rocksdb::DB::Properties::kTotalSstFilesSize, &sstBytes)); - uint64_t memtableBytes = 0; - ASSERT(db->GetIntProperty(rocksdb::DB::Properties::kSizeAllMemTables, &memtableBytes)); g_network->getDiskBytes(path, free, total); - return StorageBytes(free, total, sstBytes + memtableBytes, free); + return StorageBytes(free, total, live, free); } }; From a99b68a7e3b5a06abe4c13fbc9dd519663e74edc Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Wed, 14 Oct 2020 22:07:46 +0000 Subject: [PATCH 016/317] Add knob for tuning number of RocksDB read threads --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 3 +-- fdbserver/Knobs.cpp | 1 + fdbserver/Knobs.h | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index 0b05453c9c..1134499c2d 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -269,7 +269,6 @@ struct RocksDBKeyValueStore : IKeyValueStore { UID id; Reference writeThread; Reference readThreads; - unsigned nReaders = 16; Promise errorPromise; Promise closePromise; std::unique_ptr writeBatch; @@ -281,7 +280,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { writeThread = createGenericThreadPool(); readThreads = createGenericThreadPool(); writeThread->addThread(new Writer(db, id)); - for (unsigned i = 0; i < nReaders; ++i) { + for (unsigned i = 0; i < SERVER_KNOBS->ROCKSDB_READ_PARALLELISM; ++i) { readThreads->addThread(new Reader(db)); } } diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 7d7847383e..24ae9899a1 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -315,6 +315,7 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi // KeyValueStoreRocksDB init( ROCKSDB_BACKGROUND_PARALLELISM, 0 ); + init( ROCKSDB_READ_PARALLELISM, 4 ); init( ROCKSDB_MEMTABLE_BYTES, 512 * 1024 * 1024 ); init( ROCKSDB_UNSAFE_AUTO_FSYNC, false ); init( ROCKSDB_PERIODIC_COMPACTION_SECONDS, 0 ); diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 83d8fbe8a5..2538f6a397 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -250,6 +250,7 @@ public: // KeyValueStoreRocksDB int ROCKSDB_BACKGROUND_PARALLELISM; + int ROCKSDB_READ_PARALLELISM; int64_t ROCKSDB_MEMTABLE_BYTES; bool ROCKSDB_UNSAFE_AUTO_FSYNC; int64_t ROCKSDB_PERIODIC_COMPACTION_SECONDS; From 06b0bb70d153b281742a3151aafa8a89c1227d50 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Thu, 22 Oct 2020 16:58:11 +0000 Subject: [PATCH 017/317] Don't close a null DB and report errors from destroying the DB --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index 1134499c2d..e1e9c56f78 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -117,6 +117,10 @@ struct RocksDBKeyValueStore : IKeyValueStore { double getTimeEstimate() override { return SERVER_KNOBS->COMMIT_TIME_ESTIMATE; } }; void action(CloseAction& a) { + if (db == nullptr) { + a.done.send(Void()); + return; + } auto s = db->Close(); if (!s.ok()) { TraceEvent(SevError, "RocksDBError").detail("Error", s.ToString()).detail("Method", "Close"); @@ -124,7 +128,10 @@ struct RocksDBKeyValueStore : IKeyValueStore { if (a.deleteOnClose) { std::vector defaultCF = { rocksdb::ColumnFamilyDescriptor{ "default", getCFOptions() } }; - rocksdb::DestroyDB(a.path, getOptions(), defaultCF); + s = rocksdb::DestroyDB(a.path, getOptions(), defaultCF); + if (!s.ok()) { + TraceEvent(SevError, "RocksDBError").detail("Error", s.ToString()).detail("Method", "Destroy"); + } } a.done.send(Void()); } From c859d75bd5d4233c351ee172b2b4f0ec0632b5cd Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Thu, 22 Oct 2020 20:58:55 +0000 Subject: [PATCH 018/317] Add some trace events for opening / closing database --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index e1e9c56f78..2682858c94 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -55,7 +55,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { explicit Writer(DB& db, UID id) : db(db), id(id) {} - ~Writer() { + ~Writer() override { if (db) { delete db; } @@ -88,6 +88,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { TraceEvent(SevError, "RocksDBError").detail("Error", status.ToString()).detail("Method", "Open"); a.done.sendError(statusToError(status)); } else { + TraceEvent(SevInfo, "RocksDB").detail("Path", a.path).detail("Method", "Open"); a.done.send(Void()); } } @@ -131,8 +132,11 @@ struct RocksDBKeyValueStore : IKeyValueStore { s = rocksdb::DestroyDB(a.path, getOptions(), defaultCF); if (!s.ok()) { TraceEvent(SevError, "RocksDBError").detail("Error", s.ToString()).detail("Method", "Destroy"); + } else { + TraceEvent(SevInfo, "RocksDB").detail("Path", a.path).detail("Method", "Destroy"); } } + TraceEvent(SevInfo, "RocksDB").detail("Path", a.path).detail("Method", "Close"); a.done.send(Void()); } }; From 2bccb050de79da5cf2c38975eaa8e545fb0a740e Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Fri, 23 Oct 2020 17:32:27 -0700 Subject: [PATCH 019/317] Expose local transaction rate and limit info on commit proxies. --- fdbserver/MasterProxyServer.actor.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 52f0b9fe6f..f35ffa6d29 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -120,7 +120,12 @@ ACTOR Future getRate(UID myID, Reference> db, int64 reply = Never(); *outTransactionRate = rep.transactionRate; *outBatchTransactionRate = rep.batchTransactionRate; - //TraceEvent("MasterProxyRate", myID).detail("Rate", rep.transactionRate).detail("BatchRate", rep.batchTransactionRate).detail("Lease", rep.leaseDuration).detail("ReleasedTransactions", *inTransactionCount - lastTC); + TraceEvent("MasterProxyTxRate", myID) + .detail("RKID", db->get().ratekeeper.get().id()) + .detail("RateAllowed", rep.transactionRate) + .detail("BatchRateAllowed", rep.batchTransactionRate) + .detail("Lease", rep.leaseDuration) + .detail("ReleasedTransactions", *inTransactionCount - lastTC); lastTC = *inTransactionCount; leaseTimeout = delay(rep.leaseDuration); nextRequestTimer = delayJittered(rep.leaseDuration / 2); @@ -1307,6 +1312,11 @@ ACTOR static Future transactionStarter( normalRateInfo.reset(elapsed); batchRateInfo.reset(elapsed); + TraceEvent("MasterProxyTxLimit", proxy.id()) + .detail("RKID", db->get().ratekeeper.get().id()) + .detail("Limit", normalRateInfo.limit) + .detail("BatchLimit", batchRateInfo.limit); + int transactionsStarted[2] = {0,0}; int systemTransactionsStarted[2] = {0,0}; int defaultPriTransactionsStarted[2] = { 0, 0 }; From 70440b858d7ad086b7903e4783e2f00daf76cceb Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Thu, 22 Oct 2020 14:21:23 -0600 Subject: [PATCH 020/317] add toml11 to docker image --- build/Dockerfile | 7 +++++++ build/Dockerfile.devel | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/build/Dockerfile b/build/Dockerfile index 6e1e2353c9..505ebeaa4e 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -53,6 +53,13 @@ RUN cd /tmp && curl -L https://www.openssl.org/source/openssl-1.1.1h.tar.gz -o o ln -sv /usr/local/lib64/lib*.so.1.1 /usr/lib64/ &&\ cd /tmp/ && rm -rf /tmp/openssl-1.1.1h /tmp/openssl.tar.gz +# Install toml11 + RUN cd /tmp && curl -L https://github.com/ToruNiina/toml11/archive/v3.4.0.tar.gz > toml.tar.gz &&\ + echo "bc6d733efd9216af8c119d8ac64a805578c79cc82b813e4d1d880ca128bd154d toml.tar.gz" > toml-sha256.txt &&\ + sha256sum -c toml-sha256.txt &&\ + tar xf toml.tar.gz && rm -rf build && mkdir build && cd build && cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -Dtoml11_BUILD_TEST=OFF ../toml11-3.4.0 &&\ + cmake --build . --target install && cd / && rm -rf tmp/build && rm -rf tmp/toml11-3.4.0 + RUN cd /opt/ && curl -L https://github.com/facebook/rocksdb/archive/v6.10.1.tar.gz -o rocksdb.tar.gz &&\ echo "d573d2f15cdda883714f7e0bc87b814a8d4a53a82edde558f08f940e905541ee rocksdb.tar.gz" > rocksdb-sha.txt &&\ sha256sum -c rocksdb-sha.txt && tar xf rocksdb.tar.gz && rm -rf rocksdb.tar.gz rocksdb-sha.txt diff --git a/build/Dockerfile.devel b/build/Dockerfile.devel index 70ca319ed4..67db4c15b6 100644 --- a/build/Dockerfile.devel +++ b/build/Dockerfile.devel @@ -50,8 +50,8 @@ RUN cp -iv /usr/local/bin/clang++ /usr/local/bin/clang++.deref &&\ ldconfig &&\ rm -rf /mnt/artifacts -LABEL version=0.11.9 -ENV DOCKER_IMAGEVER=0.11.9 +LABEL version=0.11.10 +ENV DOCKER_IMAGEVER=0.11.10 ENV CLANGCC=/usr/local/bin/clang.de8a65ef ENV CLANGCXX=/usr/local/bin/clang++.de8a65ef From 531c106b32b87807488e7c82cf777731c1f82ec9 Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Mon, 26 Oct 2020 11:41:13 -0600 Subject: [PATCH 021/317] add toml11 to docker image --- build/Dockerfile | 4 ++-- build/docker-compose.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/Dockerfile b/build/Dockerfile index 505ebeaa4e..b7c9576d67 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -68,8 +68,8 @@ RUN cd /opt/ && curl -L https://github.com/facebook/rocksdb/archive/v6.10.1.tar. ARG TIMEZONEINFO=America/Los_Angeles RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/${TIMEZONEINFO} /etc/localtime -LABEL version=0.1.18 -ENV DOCKER_IMAGEVER=0.1.18 +LABEL version=0.1.19 +ENV DOCKER_IMAGEVER=0.1.19 ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0 ENV CC=/opt/rh/devtoolset-8/root/usr/bin/gcc ENV CXX=/opt/rh/devtoolset-8/root/usr/bin/g++ diff --git a/build/docker-compose.yaml b/build/docker-compose.yaml index 3ebecfbe64..98f0ac691e 100644 --- a/build/docker-compose.yaml +++ b/build/docker-compose.yaml @@ -2,7 +2,7 @@ version: "3" services: common: &common - image: foundationdb/foundationdb-build:0.1.18 + image: foundationdb/foundationdb-build:0.1.19 build-setup: &build-setup <<: *common From d7d9c315365388bdea0b5de99db089663fc7a4dc Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Mon, 26 Oct 2020 19:29:36 +0000 Subject: [PATCH 022/317] Revert "Add some thread yields" This reverts commit 3485f1addd5fea75c4833b88f9825923f09ec78d. --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index 2682858c94..89bcf5fde9 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -360,7 +360,6 @@ struct RocksDBKeyValueStore : IKeyValueStore { a->batchToCommit = std::move(writeBatch); auto res = a->done.getFuture(); writeThread->post(a); - threadYield(); return res; } @@ -368,7 +367,6 @@ struct RocksDBKeyValueStore : IKeyValueStore { auto a = new Reader::ReadValueAction(key, debugID); auto res = a->result.getFuture(); readThreads->post(a); - threadYield(); return res; } @@ -376,7 +374,6 @@ struct RocksDBKeyValueStore : IKeyValueStore { auto a = new Reader::ReadValuePrefixAction(key, maxLength, debugID); auto res = a->result.getFuture(); readThreads->post(a); - threadYield(); return res; } @@ -384,7 +381,6 @@ struct RocksDBKeyValueStore : IKeyValueStore { auto a = new Reader::ReadRangeAction(keys, rowLimit, byteLimit); auto res = a->result.getFuture(); readThreads->post(a); - threadYield(); return res; } From 36558d1450122bf44dd831270c903e3b346963f9 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Mon, 26 Oct 2020 16:25:56 -0700 Subject: [PATCH 023/317] Move to be part of proxy metrics --- fdbserver/MasterProxyServer.actor.cpp | 50 ++++++++++++++++----------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index f35ffa6d29..3f87a9b42e 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -63,6 +63,8 @@ struct ProxyStats { Counter conflictRanges; Counter keyServerLocationIn, keyServerLocationOut, keyServerLocationErrors; Version lastCommitVersionAssigned; + double transactionRateAllowed, batchTransactionRateAllowed; + double transactionLimit, batchTransactionLimit; LatencySample commitLatencySample; LatencySample grvLatencySample; @@ -84,12 +86,19 @@ struct ProxyStats { specialCounter(cc, "Version", [pVersion](){return *pVersion; }); specialCounter(cc, "CommittedVersion", [pCommittedVersion](){ return pCommittedVersion->get(); }); specialCounter(cc, "CommitBatchesMemBytesCount", [commitBatchesMemBytesCountPtr]() { return *commitBatchesMemBytesCountPtr; }); + // The rate at which the limit(budget) is allowed to grow. + specialCounter(cc, "NormalTransactionRateAllowed", [this]() { return this->transactionRateAllowed; }); + specialCounter(cc, "BatchTransactionRateAllowed", [this]() { return this->batchTransactionRateAllowed; }); + specialCounter(cc, "NormalTransactionLimit", [this]() { return this->transactionLimit; }); + specialCounter(cc, "BatchTransactionLimit", [this]() { return this->batchTransactionLimit; }); logger = traceCounters("ProxyMetrics", id, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "ProxyMetrics"); } }; -ACTOR Future getRate(UID myID, Reference> db, int64_t* inTransactionCount, int64_t* inBatchTransactionCount, double* outTransactionRate, - double* outBatchTransactionRate, GetHealthMetricsReply* healthMetricsReply, GetHealthMetricsReply* detailedHealthMetricsReply) { +ACTOR Future getRate(UID myID, Reference> db, int64_t* inTransactionCount, + int64_t* inBatchTransactionCount, double* outTransactionRate, + double* outBatchTransactionRate, GetHealthMetricsReply* healthMetricsReply, + GetHealthMetricsReply* detailedHealthMetricsReply, ProxyStats* stats) { state Future nextRequestTimer = Never(); state Future leaseTimeout = Never(); state Future reply = Never(); @@ -120,12 +129,14 @@ ACTOR Future getRate(UID myID, Reference> db, int64 reply = Never(); *outTransactionRate = rep.transactionRate; *outBatchTransactionRate = rep.batchTransactionRate; - TraceEvent("MasterProxyTxRate", myID) - .detail("RKID", db->get().ratekeeper.get().id()) - .detail("RateAllowed", rep.transactionRate) - .detail("BatchRateAllowed", rep.batchTransactionRate) - .detail("Lease", rep.leaseDuration) - .detail("ReleasedTransactions", *inTransactionCount - lastTC); + stats->transactionRateAllowed = rep.transactionRate; + stats->batchTransactionRateAllowed = rep.batchTransactionRate; + // TraceEvent("MasterProxyTxRate", myID) + // .detail("RKID", db->get().ratekeeper.get().id()) + // .detail("RateAllowed", rep.transactionRate) + // .detail("BatchRateAllowed", rep.batchTransactionRate) + // .detail("Lease", rep.leaseDuration) + // .detail("ReleasedTransactions", *inTransactionCount - lastTC); lastTC = *inTransactionCount; leaseTimeout = delay(rep.leaseDuration); nextRequestTimer = delayJittered(rep.leaseDuration / 2); @@ -1263,13 +1274,10 @@ ACTOR Future sendGrvReplies(Future replyFuture, std:: return Void(); } -ACTOR static Future transactionStarter( - MasterProxyInterface proxy, - Reference> db, - PromiseStream> addActor, - ProxyCommitData* commitData, GetHealthMetricsReply* healthMetricsReply, - GetHealthMetricsReply* detailedHealthMetricsReply) -{ +ACTOR static Future transactionStarter(MasterProxyInterface proxy, Reference> db, + PromiseStream> addActor, ProxyCommitData* commitData, + GetHealthMetricsReply* healthMetricsReply, + GetHealthMetricsReply* detailedHealthMetricsReply, ProxyStats* stats) { state double lastGRVTime = 0; state PromiseStream GRVTimer; state double GRVBatchTime = SERVER_KNOBS->START_TRANSACTION_BATCH_INTERVAL_MIN; @@ -1285,7 +1293,8 @@ ACTOR static Future transactionStarter( state vector otherProxies; state PromiseStream replyTimes; - addActor.send(getRate(proxy.id(), db, &transactionCount, &batchTransactionCount, &normalRateInfo.rate, &batchRateInfo.rate, healthMetricsReply, detailedHealthMetricsReply)); + addActor.send(getRate(proxy.id(), db, &transactionCount, &batchTransactionCount, &normalRateInfo.rate, + &batchRateInfo.rate, healthMetricsReply, detailedHealthMetricsReply, stats)); addActor.send(queueTransactionStartRequests(&systemQueue, &defaultQueue, &batchQueue, proxy.getConsistentReadVersion.getFuture(), GRVTimer, &lastGRVTime, &GRVBatchTime, replyTimes.getFuture(), &commitData->stats)); // Get a list of the other proxies that go together with us @@ -1312,10 +1321,8 @@ ACTOR static Future transactionStarter( normalRateInfo.reset(elapsed); batchRateInfo.reset(elapsed); - TraceEvent("MasterProxyTxLimit", proxy.id()) - .detail("RKID", db->get().ratekeeper.get().id()) - .detail("Limit", normalRateInfo.limit) - .detail("BatchLimit", batchRateInfo.limit); + stats->transactionLimit = normalRateInfo.limit; + stats->batchTransactionLimit = batchRateInfo.limit; int transactionsStarted[2] = {0,0}; int systemTransactionsStarted[2] = {0,0}; @@ -1757,7 +1764,8 @@ ACTOR Future masterProxyServerCore( TraceEvent(SevInfo, "CommitBatchesMemoryLimit").detail("BytesLimit", commitBatchesMemoryLimit); addActor.send(monitorRemoteCommitted(&commitData)); - addActor.send(transactionStarter(proxy, commitData.db, addActor, &commitData, &healthMetricsReply, &detailedHealthMetricsReply)); + addActor.send(transactionStarter(proxy, commitData.db, addActor, &commitData, &healthMetricsReply, + &detailedHealthMetricsReply, &commitData.stats)); addActor.send(readRequestServer(proxy, addActor, &commitData)); addActor.send(rejoinServer(proxy, &commitData)); addActor.send(healthMetricsRequestServer(proxy, &healthMetricsReply, &detailedHealthMetricsReply)); From c037bfd001e58536e8f76518c54643a96b776d61 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Tue, 20 Oct 2020 16:40:56 -0700 Subject: [PATCH 024/317] Added detailed logging when there is no servers left in a server team, because that may indicate a data loss incident. --- fdbserver/DataDistribution.actor.cpp | 89 ++++++++++++++++++++-------- fdbserver/Knobs.cpp | 1 + fdbserver/Knobs.h | 1 + 3 files changed, 65 insertions(+), 26 deletions(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index 2b653534c3..95f3d6797b 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -631,6 +631,7 @@ struct DDTeamCollection : ReferenceCounted { int highestUtilizationTeam; AsyncTrigger printDetailedTeamsInfo; + PromiseStream getShardMetrics; void resetLocalitySet() { storageServerSet = Reference(new LocalityMap()); @@ -662,7 +663,7 @@ struct DDTeamCollection : ReferenceCounted { DatabaseConfiguration configuration, std::vector> includedDCs, Optional>> otherTrackedDCs, Future readyToStart, Reference> zeroHealthyTeams, bool primary, - Reference> processingUnhealthy) + Reference> processingUnhealthy, PromiseStream getShardMetrics) : cx(cx), distributorId(distributorId), lock(lock), output(output), shardsAffectedByTeamFailure(shardsAffectedByTeamFailure), doBuildTeams(true), lastBuildTeamsFailed(false), teamBuilder(Void()), badTeamRemover(Void()), redundantMachineTeamRemover(Void()), @@ -675,8 +676,10 @@ struct DDTeamCollection : ReferenceCounted { initializationDoneActor(logOnCompletion(readyToStart && initialFailureReactionDelay, this)), optimalTeamCount(0), recruitingStream(0), restartRecruiting(SERVER_KNOBS->DEBOUNCE_RECRUITING_DELAY), unhealthyServers(0), includedDCs(includedDCs), otherTrackedDCs(otherTrackedDCs), - zeroHealthyTeams(zeroHealthyTeams), zeroOptimalTeams(true), primary(primary), medianAvailableSpace(SERVER_KNOBS->MIN_AVAILABLE_SPACE_RATIO), - lastMedianAvailableSpaceUpdate(0), processingUnhealthy(processingUnhealthy), lowestUtilizationTeam(0), highestUtilizationTeam(0) { + zeroHealthyTeams(zeroHealthyTeams), zeroOptimalTeams(true), primary(primary), + medianAvailableSpace(SERVER_KNOBS->MIN_AVAILABLE_SPACE_RATIO), lastMedianAvailableSpaceUpdate(0), + processingUnhealthy(processingUnhealthy), lowestUtilizationTeam(0), highestUtilizationTeam(0), + getShardMetrics(getShardMetrics) { if(!primary || configuration.usableRegions == 1) { TraceEvent("DDTrackerStarting", distributorId) .detail( "State", "Inactive" ) @@ -2965,6 +2968,30 @@ ACTOR Future serverTeamRemover(DDTeamCollection* self) { } } +ACTOR Future zeroServerLeftLogger_impl(DDTeamCollection* self, Reference team) { + wait(delay(SERVER_KNOBS->DD_TEAM_ZERO_SERVER_LEFT_LOG_DELAY)); + state vector shards = self->shardsAffectedByTeamFailure->getShardsFor( + ShardsAffectedByTeamFailure::Team(team->getServerIDs(), self->primary)); + state std::vector> sizes; + sizes.reserve(shards.size()); + + for (auto const& shard : shards) { + sizes.emplace_back(brokenPromiseToNever(self->getShardMetrics.getReply(GetMetricsRequest(shard)))); + TraceEvent(SevError, "DDShardLost").detail("ShardBegin", shard.begin).detail("ShardEnd", shard.end); + } + + wait(waitForAll(sizes)); + + int64_t bytesLost = 0; + for (auto const& size : sizes) { + bytesLost += size.get().bytes; + } + + TraceEvent(SevError, "DDZeroServerLeftInTeam").detail("Team", team->getDesc()).detail("TotalBytesLost", bytesLost); + + return Void(); +} + // Track a team and issue RelocateShards when the level of degradation changes // A badTeam can be unhealthy or just a redundantTeam removed by machineTeamRemover() or serverTeamRemover() ACTOR Future teamTracker(DDTeamCollection* self, Reference team, bool badTeam, bool redundantTeam) { @@ -2979,6 +3006,8 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea state bool lastZeroHealthy = self->zeroHealthyTeams->get(); state bool firstCheck = true; + state Future zeroServerLeftLogger; + if(logTeamEvents) { TraceEvent("TeamTrackerStarting", self->distributorId).detail("Reason", "Initial wait complete (sc)").detail("Team", team->getDesc()); } @@ -3126,12 +3155,24 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea if(lastPriority != team->getPriority()) { self->priority_teams[lastPriority]--; self->priority_teams[team->getPriority()]++; + if (lastPriority == SERVER_KNOBS->PRIORITY_TEAM_0_LEFT && + team->getPriority() < SERVER_KNOBS->PRIORITY_TEAM_0_LEFT) { + zeroServerLeftLogger = Void(); + } + if (logTeamEvents) { + auto dataLoss = team->getPriority() == SERVER_KNOBS->PRIORITY_TEAM_0_LEFT; + auto severity = dataLoss ? SevError : SevInfo; + TraceEvent(severity, "TeamPriorityChange", self->distributorId) + .detail("Priority", team->getPriority()) + .detail("Info", team->getDesc()) + .detail("ZeroHealthyTeams", self->zeroHealthyTeams->get()); + if (team->getPriority() == SERVER_KNOBS->PRIORITY_TEAM_0_LEFT) { + // 0 servers left in this team, data might be lost. + zeroServerLeftLogger = zeroServerLeftLogger_impl(self, team); + } + } } - if(logTeamEvents) { - TraceEvent("TeamPriorityChange", self->distributorId).detail("Priority", team->getPriority()) - .detail("Info", team->getDesc()).detail("ZeroHealthyTeams", self->zeroHealthyTeams->get()); - } lastZeroHealthy = self->zeroHealthyTeams->get(); //set this again in case it changed from this teams health changing if( self->initialFailureReactionDelay.isReady() && !self->zeroHealthyTeams->get() ) { @@ -4521,10 +4562,16 @@ ACTOR Future dataDistribution(Reference self) actors.push_back( reportErrorsExcept( dataDistributionQueue( cx, output, input.getFuture(), getShardMetrics, processingUnhealthy, tcis, shardsAffectedByTeamFailure, lock, getAverageShardBytes, self->ddId, storageTeamSize, configuration.storageTeamSize, &lastLimited ), "DDQueue", self->ddId, &normalDDQueueErrors() ) ); vector teamCollectionsPtrs; - Reference primaryTeamCollection( new DDTeamCollection(cx, self->ddId, lock, output, shardsAffectedByTeamFailure, configuration, primaryDcId, configuration.usableRegions > 1 ? remoteDcIds : std::vector>(), readyToStart.getFuture(), zeroHealthyTeams[0], true, processingUnhealthy) ); + Reference primaryTeamCollection(new DDTeamCollection( + cx, self->ddId, lock, output, shardsAffectedByTeamFailure, configuration, primaryDcId, + configuration.usableRegions > 1 ? remoteDcIds : std::vector>(), readyToStart.getFuture(), + zeroHealthyTeams[0], true, processingUnhealthy, getShardMetrics)); teamCollectionsPtrs.push_back(primaryTeamCollection.getPtr()); if (configuration.usableRegions > 1) { - Reference remoteTeamCollection( new DDTeamCollection(cx, self->ddId, lock, output, shardsAffectedByTeamFailure, configuration, remoteDcIds, Optional>>(), readyToStart.getFuture() && remoteRecovered(self->dbInfo), zeroHealthyTeams[1], false, processingUnhealthy) ); + Reference remoteTeamCollection(new DDTeamCollection( + cx, self->ddId, lock, output, shardsAffectedByTeamFailure, configuration, remoteDcIds, + Optional>>(), readyToStart.getFuture() && remoteRecovered(self->dbInfo), + zeroHealthyTeams[1], false, processingUnhealthy, getShardMetrics)); teamCollectionsPtrs.push_back(remoteTeamCollection.getPtr()); remoteTeamCollection->teamCollections = teamCollectionsPtrs; actors.push_back( reportErrorsExcept( dataDistributionTeamCollection( remoteTeamCollection, initData, tcis[1], self->dbInfo ), "DDTeamCollectionSecondary", self->ddId, &normalDDQueueErrors() ) ); @@ -4764,20 +4811,11 @@ DDTeamCollection* testTeamCollection(int teamSize, Reference conf.storageTeamSize = teamSize; conf.storagePolicy = policy; - DDTeamCollection* collection = new DDTeamCollection( - database, - UID(0, 0), - MoveKeysLock(), - PromiseStream(), - Reference(new ShardsAffectedByTeamFailure()), - conf, - {}, - {}, - Future(Void()), - Reference>( new AsyncVar(true) ), - true, - Reference>( new AsyncVar(false) ) - ); + DDTeamCollection* collection = + new DDTeamCollection(database, UID(0, 0), MoveKeysLock(), PromiseStream(), + Reference(new ShardsAffectedByTeamFailure()), conf, {}, {}, + Future(Void()), Reference>(new AsyncVar(true)), true, + Reference>(new AsyncVar(false)), PromiseStream()); for (int id = 1; id <= processCount; ++id) { UID uid(id, 0); @@ -4805,9 +4843,8 @@ DDTeamCollection* testMachineTeamCollection(int teamSize, Reference(), Reference(new ShardsAffectedByTeamFailure()), conf, {}, {}, - Future(Void()), - Reference>(new AsyncVar(true)), true, - Reference>(new AsyncVar(false))); + Future(Void()), Reference>(new AsyncVar(true)), true, + Reference>(new AsyncVar(false)), PromiseStream()); for (int id = 1; id <= processCount; id++) { UID uid(id, 0); diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index d263656932..25fbc3cd85 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -221,6 +221,7 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( DD_ENABLE_VERBOSE_TRACING, false ); if( randomize && BUGGIFY ) DD_ENABLE_VERBOSE_TRACING = true; init( DD_TEAMS_INFO_PRINT_INTERVAL, 60 ); if( randomize && BUGGIFY ) DD_TEAMS_INFO_PRINT_INTERVAL = 10; init( DD_TEAMS_INFO_PRINT_YIELD_COUNT, 100 ); if( randomize && BUGGIFY ) DD_TEAMS_INFO_PRINT_YIELD_COUNT = deterministicRandom()->random01() * 1000 + 1; + init( DD_TEAM_ZERO_SERVER_LEFT_LOG_DELAY, 120 ); // TeamRemover init( TR_FLAG_DISABLE_MACHINE_TEAM_REMOVER, false ); if( randomize && BUGGIFY ) TR_FLAG_DISABLE_MACHINE_TEAM_REMOVER = deterministicRandom()->random01() < 0.1 ? true : false; // false by default. disable the consistency check when it's true diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 1c83022fed..674fbde746 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -184,6 +184,7 @@ public: bool DD_ENABLE_VERBOSE_TRACING; int DD_TEAMS_INFO_PRINT_INTERVAL; int DD_TEAMS_INFO_PRINT_YIELD_COUNT; + int DD_TEAM_ZERO_SERVER_LEFT_LOG_DELAY; // TeamRemover to remove redundant teams bool TR_FLAG_DISABLE_MACHINE_TEAM_REMOVER; // disable the machineTeamRemover actor From 7ebb2e5c09564a35196b0a56cdcddbc705b232fc Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Wed, 21 Oct 2020 11:10:14 -0700 Subject: [PATCH 025/317] Piggy back this PR to polish more TraceEvent by: - Making it clear that it's tracking machine team info or server team info - Added ID to both machine team and server team for better trackability - Attach distributor id to some trace events. --- fdbserver/DataDistribution.actor.cpp | 143 +++++++++++++--------- fdbserver/DataDistribution.actor.h | 4 +- fdbserver/DataDistributionQueue.actor.cpp | 7 +- 3 files changed, 93 insertions(+), 61 deletions(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index 95f3d6797b..c43414d69d 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -146,8 +146,10 @@ public: vector> machines; vector> machineIDs; vector> serverTeams; + UID id; - explicit TCMachineTeamInfo(vector> const& machines) : machines(machines) { + explicit TCMachineTeamInfo(vector> const& machines) + : machines(machines), id(deterministicRandom()->randomUniqueID()) { machineIDs.reserve(machines.size()); for (int i = 0; i < machines.size(); i++) { machineIDs.push_back(machines[i]->machineID); @@ -180,6 +182,7 @@ class TCTeamInfo : public ReferenceCounted, public IDataDistribution private: vector< Reference > servers; vector serverIDs; + UID id; public: Reference machineTeam; @@ -189,7 +192,8 @@ public: int priority; explicit TCTeamInfo(vector> const& servers) - : servers(servers), healthy(true), priority(SERVER_KNOBS->PRIORITY_TEAM_HEALTHY), wrongConfiguration(false) { + : servers(servers), healthy(true), priority(SERVER_KNOBS->PRIORITY_TEAM_HEALTHY), wrongConfiguration(false), + id(deterministicRandom()->randomUniqueID()) { if (servers.empty()) { TraceEvent(SevInfo, "ConstructTCTeamFromEmptyServers"); } @@ -199,6 +203,8 @@ public: } } + UID getTeamID() override { return id; } + virtual vector getLastKnownServerInterfaces() { vector v; v.reserve(servers.size()); @@ -1355,7 +1361,8 @@ struct DDTeamCollection : ReferenceCounted { .detail("TeamIndex", i++) .detail("Healthy", team->isHealthy()) .detail("TeamSize", team->size()) - .detail("MemberIDs", team->getServerIDsStr()); + .detail("MemberIDs", team->getServerIDsStr()) + .detail("TeamID", team->getTeamID().shortString()); } } @@ -2097,7 +2104,7 @@ struct DDTeamCollection : ReferenceCounted { .detail("Primary", primary) .detail("AddedTeams", 0) .detail("TeamsToBuild", 0) - .detail("CurrentTeams", teams.size()) + .detail("CurrentServerTeams", teams.size()) .detail("DesiredTeams", desiredServerTeams) .detail("MaxTeams", maxServerTeams) .detail("StorageTeamSize", configuration.storageTeamSize) @@ -2146,11 +2153,11 @@ struct DDTeamCollection : ReferenceCounted { } } uniqueMachines = machines.size(); - TraceEvent("BuildTeams") - .detail("ServerCount", self->server_info.size()) - .detail("UniqueMachines", uniqueMachines) - .detail("Primary", self->primary) - .detail("StorageTeamSize", self->configuration.storageTeamSize); + TraceEvent("BuildTeams", self->distributorId) + .detail("ServerCount", self->server_info.size()) + .detail("UniqueMachines", uniqueMachines) + .detail("Primary", self->primary) + .detail("StorageTeamSize", self->configuration.storageTeamSize); // If there are too few machines to even build teams or there are too few represented datacenters, build no new teams if( uniqueMachines >= self->configuration.storageTeamSize ) { @@ -2177,11 +2184,11 @@ struct DDTeamCollection : ReferenceCounted { .detail("TeamsToBuild", teamsToBuild) .detail("DesiredTeams", desiredTeams) .detail("MaxTeams", maxTeams) - .detail("BadTeams", self->badTeams.size()) + .detail("BadServerTeams", self->badTeams.size()) .detail("UniqueMachines", uniqueMachines) .detail("TeamSize", self->configuration.storageTeamSize) .detail("Servers", serverCount) - .detail("CurrentTrackedTeams", self->teams.size()) + .detail("CurrentTrackedServerTeams", self->teams.size()) .detail("HealthyTeamCount", teamCount) .detail("TotalTeamCount", totalTeamCount) .detail("MachineTeamCount", self->machineTeams.size()) @@ -2198,9 +2205,9 @@ struct DDTeamCollection : ReferenceCounted { int addedTeams = self->addTeamsBestOf(teamsToBuild, desiredTeams, maxTeams); if (addedTeams <= 0 && self->teams.size() == 0) { - TraceEvent(SevWarn, "NoTeamAfterBuildTeam") - .detail("TeamNum", self->teams.size()) - .detail("Debug", "Check information below"); + TraceEvent(SevWarn, "NoTeamAfterBuildTeam", self->distributorId) + .detail("ServdfTeamNum", self->teams.size()) + .detail("Debug", "Check information below"); // Debug: set true for traceAllInfo() to print out more information self->traceAllInfo(); } @@ -2218,7 +2225,7 @@ struct DDTeamCollection : ReferenceCounted { .detail("Primary", self->primary) .detail("AddedTeams", 0) .detail("TeamsToBuild", teamsToBuild) - .detail("CurrentTeams", self->teams.size()) + .detail("CurrentServerTeams", self->teams.size()) .detail("DesiredTeams", desiredTeams) .detail("MaxTeams", maxTeams) .detail("StorageTeamSize", self->configuration.storageTeamSize) @@ -2257,9 +2264,9 @@ struct DDTeamCollection : ReferenceCounted { } TraceEvent(SevWarn, "NoHealthyTeams", distributorId) - .detail("CurrentTeamCount", teams.size()) - .detail("ServerCount", server_info.size()) - .detail("NonFailedServerCount", desiredServerSet.size()); + .detail("CurrentServerTeamCount", teams.size()) + .detail("ServerCount", server_info.size()) + .detail("NonFailedServerCount", desiredServerSet.size()); } bool shouldHandleServer(const StorageServerInterface &newServer) { @@ -2287,7 +2294,7 @@ struct DDTeamCollection : ReferenceCounted { } bool removeTeam( Reference team ) { - TraceEvent("RemovedTeam", distributorId).detail("Team", team->getDesc()); + TraceEvent("RemovedServerTeam", distributorId).detail("Team", team->getDesc()); bool found = false; for(int t=0; t { int removedCount = 0; for (int t = 0; t < teams.size(); t++) { if ( std::count( teams[t]->getServerIDs().begin(), teams[t]->getServerIDs().end(), removedServer ) ) { - TraceEvent("TeamRemoved") + TraceEvent("ServerTeamRemoved") .detail("Primary", primary) - .detail("TeamServerIDs", teams[t]->getServerIDsStr()); + .detail("TeamServerIDs", teams[t]->getServerIDsStr()) + .detail("TeamID", teams[t]->getTeamID().shortString()); // removeTeam also needs to remove the team from the machine team info. removeTeam(teams[t]); t--; @@ -2550,8 +2558,8 @@ struct DDTeamCollection : ReferenceCounted { restartTeamBuilder.trigger(); TraceEvent("DataDistributionTeamCollectionUpdate", distributorId) - .detail("Teams", teams.size()) - .detail("BadTeams", badTeams.size()) + .detail("ServerTeams", teams.size()) + .detail("BadServerTeams", badTeams.size()) .detail("Servers", allServers.size()) .detail("Machines", machine_info.size()) .detail("MachineTeams", machineTeams.size()) @@ -2775,7 +2783,7 @@ ACTOR Future removeBadTeams(DDTeamCollection* self) { wait(self->initialFailureReactionDelay); wait(waitUntilHealthy(self)); wait(self->addSubsetComplete.getFuture()); - TraceEvent("DDRemovingBadTeams", self->distributorId).detail("Primary", self->primary); + TraceEvent("DDRemovingBadServerTeams", self->distributorId).detail("Primary", self->primary); for(auto it : self->badTeams) { it->tracker.cancel(); } @@ -2845,9 +2853,9 @@ ACTOR Future machineTeamRemover(DDTeamCollection* self) { // Check if a server will have 0 team after the team is removed for (auto& s : team->getServers()) { if (s->teams.size() == 0) { - TraceEvent(SevError, "TeamRemoverTooAggressive") + TraceEvent(SevError, "MachineTeamRemoverTooAggressive", self->distributorId) .detail("Server", s->id) - .detail("Team", team->getServerIDsStr()); + .detail("ServerTeam", team->getDesc()); self->traceAllInfo(true); } } @@ -2870,6 +2878,7 @@ ACTOR Future machineTeamRemover(DDTeamCollection* self) { } TraceEvent("MachineTeamRemover", self->distributorId) + .detail("MachineTeamIDToRemove", mt->id.shortString()) .detail("MachineTeamToRemove", mt->getMachineIDsStr()) .detail("NumProcessTeamsOnTheMachineTeam", minNumProcessTeams) .detail("CurrentMachineTeams", self->machineTeams.size()) @@ -2885,7 +2894,7 @@ ACTOR Future machineTeamRemover(DDTeamCollection* self) { } else { if (numMachineTeamRemoved > 0) { // Only trace the information when we remove a machine team - TraceEvent("TeamRemoverDone") + TraceEvent("MachineTeamRemoverDone", self->distributorId) .detail("HealthyMachines", healthyMachineCount) // .detail("CurrentHealthyMachineTeams", currentHealthyMTCount) .detail("CurrentMachineTeams", self->machineTeams.size()) @@ -2949,6 +2958,7 @@ ACTOR Future serverTeamRemover(DDTeamCollection* self) { TraceEvent("ServerTeamRemover", self->distributorId) .detail("ServerTeamToRemove", st->getServerIDsStr()) + .detail("ServerTeamID", st->getTeamID().shortString()) .detail("NumProcessTeamsOnTheServerTeam", maxNumProcessTeams) .detail("CurrentServerTeams", self->teams.size()) .detail("DesiredServerTeams", desiredServerTeams); @@ -2977,7 +2987,10 @@ ACTOR Future zeroServerLeftLogger_impl(DDTeamCollection* self, ReferencegetShardMetrics.getReply(GetMetricsRequest(shard)))); - TraceEvent(SevError, "DDShardLost").detail("ShardBegin", shard.begin).detail("ShardEnd", shard.end); + TraceEvent(SevWarnAlways, "DDShardLost", self->distributorId) + .detail("ServerTeamID", team->getTeamID().shortString()) + .detail("ShardBegin", shard.begin) + .detail("ShardEnd", shard.end); } wait(waitForAll(sizes)); @@ -2987,7 +3000,9 @@ ACTOR Future zeroServerLeftLogger_impl(DDTeamCollection* self, ReferencegetDesc()).detail("TotalBytesLost", bytesLost); + TraceEvent(SevWarnAlways, "DDZeroServerLeftInTeam", self->distributorId) + .detail("Team", team->getDesc()) + .detail("TotalBytesLost", bytesLost); return Void(); } @@ -3009,17 +3024,19 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea state Future zeroServerLeftLogger; if(logTeamEvents) { - TraceEvent("TeamTrackerStarting", self->distributorId).detail("Reason", "Initial wait complete (sc)").detail("Team", team->getDesc()); + TraceEvent("ServerTeamTrackerStarting", self->distributorId) + .detail("Reason", "Initial wait complete (sc)") + .detail("ServerTeam", team->getDesc()); } self->priority_teams[team->getPriority()]++; try { loop { if(logTeamEvents) { - TraceEvent("TeamHealthChangeDetected", self->distributorId) - .detail("Team", team->getDesc()) - .detail("Primary", self->primary) - .detail("IsReady", self->initialFailureReactionDelay.isReady()); + TraceEvent("ServerTeamHealthChangeDetected", self->distributorId) + .detail("ServerTeam", team->getDesc()) + .detail("Primary", self->primary) + .detail("IsReady", self->initialFailureReactionDelay.isReady()); self->traceTeamCollectionInfo(); } // Check if the number of degraded machines has changed @@ -3082,10 +3099,13 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea if (serversLeft != lastServersLeft || anyUndesired != lastAnyUndesired || anyWrongConfiguration != lastWrongConfiguration || recheck) { // NOTE: do not check wrongSize if(logTeamEvents) { - TraceEvent("TeamHealthChanged", self->distributorId) - .detail("Team", team->getDesc()).detail("ServersLeft", serversLeft) - .detail("LastServersLeft", lastServersLeft).detail("ContainsUndesiredServer", anyUndesired) - .detail("HealthyTeamsCount", self->healthyTeamCount).detail("IsWrongConfiguration", anyWrongConfiguration); + TraceEvent("ServerTeamHealthChanged", self->distributorId) + .detail("ServerTeam", team->getDesc()) + .detail("ServersLeft", serversLeft) + .detail("LastServersLeft", lastServersLeft) + .detail("ContainsUndesiredServer", anyUndesired) + .detail("HealthyTeamsCount", self->healthyTeamCount) + .detail("IsWrongConfiguration", anyWrongConfiguration); } team->setWrongConfiguration( anyWrongConfiguration ); @@ -3107,18 +3127,18 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea self->zeroHealthyTeams->set(self->healthyTeamCount == 0); if( self->healthyTeamCount == 0 ) { - TraceEvent(SevWarn, "ZeroTeamsHealthySignalling", self->distributorId) - .detail("SignallingTeam", team->getDesc()) - .detail("Primary", self->primary); + TraceEvent(SevWarn, "ZeroServerTeamsHealthySignalling", self->distributorId) + .detail("SignallingTeam", team->getDesc()) + .detail("Primary", self->primary); } if(logTeamEvents) { - TraceEvent("TeamHealthDifference", self->distributorId) - .detail("Team", team->getDesc()) - .detail("LastOptimal", lastOptimal) - .detail("LastHealthy", lastHealthy) - .detail("Optimal", optimal) - .detail("OptimalTeamCount", self->optimalTeamCount); + TraceEvent("ServewrTeamHealthDifference", self->distributorId) + .detail("ServerTeam", team->getDesc()) + .detail("LastOptimal", lastOptimal) + .detail("LastHealthy", lastHealthy) + .detail("Optimal", optimal) + .detail("OptimalTeamCount", self->optimalTeamCount); } } @@ -3161,11 +3181,11 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea } if (logTeamEvents) { auto dataLoss = team->getPriority() == SERVER_KNOBS->PRIORITY_TEAM_0_LEFT; - auto severity = dataLoss ? SevError : SevInfo; - TraceEvent(severity, "TeamPriorityChange", self->distributorId) + auto severity = dataLoss ? SevWarnAlways : SevInfo; + TraceEvent(severity, "ServerTeamPriorityChange", self->distributorId) .detail("Priority", team->getPriority()) .detail("Info", team->getDesc()) - .detail("ZeroHealthyTeams", self->zeroHealthyTeams->get()); + .detail("ZeroHealthyServerTeams", self->zeroHealthyTeams->get()); if (team->getPriority() == SERVER_KNOBS->PRIORITY_TEAM_0_LEFT) { // 0 servers left in this team, data might be lost. zeroServerLeftLogger = zeroServerLeftLogger_impl(self, team); @@ -3226,17 +3246,19 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea self->output.send(rs); if(deterministicRandom()->random01() < 0.01) { TraceEvent("SendRelocateToDDQx100", self->distributorId) - .detail("Team", team->getDesc()) - .detail("KeyBegin", rs.keys.begin) - .detail("KeyEnd", rs.keys.end) - .detail("Priority", rs.priority) - .detail("TeamFailedMachines", team->size() - serversLeft) - .detail("TeamOKMachines", serversLeft); + .detail("ServerTeam", team->getDesc()) + .detail("KeyBegin", rs.keys.begin) + .detail("KeyEnd", rs.keys.end) + .detail("Priority", rs.priority) + .detail("ServerTeamFailedMachines", team->size() - serversLeft) + .detail("ServerTeamOKMachines", serversLeft); } } } else { if(logTeamEvents) { - TraceEvent("TeamHealthNotReady", self->distributorId).detail("HealthyTeamCount", self->healthyTeamCount); + TraceEvent("ServerTeamHealthNotReady", self->distributorId) + .detail("HealthyServerTeamCount", self->healthyTeamCount) + .detail("ServerTeamID", team->getTeamID().shortString()); } } } @@ -3247,7 +3269,9 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea } } catch(Error& e) { if(logTeamEvents) { - TraceEvent("TeamTrackerStopping", self->distributorId).detail("Team", team->getDesc()).detail("Priority", team->getPriority()); + TraceEvent("ServerTeamTrackerStopping", self->distributorId) + .detail("ServerTeam", team->getDesc()) + .detail("Priority", team->getPriority()); } self->priority_teams[team->getPriority()]--; if (team->isHealthy()) { @@ -3255,7 +3279,8 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea ASSERT( self->healthyTeamCount >= 0 ); if( self->healthyTeamCount == 0 ) { - TraceEvent(SevWarn, "ZeroTeamsHealthySignalling", self->distributorId).detail("SignallingTeam", team->getDesc()); + TraceEvent(SevWarn, "ZeroServerTeamsHealthySignalling", self->distributorId) + .detail("SignallingServerTeam", team->getDesc()); self->zeroHealthyTeams->set(true); } } diff --git a/fdbserver/DataDistribution.actor.h b/fdbserver/DataDistribution.actor.h index 7be5be3485..c4d961f5ae 100644 --- a/fdbserver/DataDistribution.actor.h +++ b/fdbserver/DataDistribution.actor.h @@ -59,10 +59,12 @@ struct IDataDistributionTeam { virtual bool isWrongConfiguration() = 0; virtual void setWrongConfiguration(bool) = 0; virtual void addServers(const vector &servers) = 0; + virtual UID getTeamID() = 0; std::string getDesc() { const auto& servers = getLastKnownServerInterfaces(); - std::string s = format("Size %d; ", servers.size()); + std::string s = format("[TeamID - %s]", getTeamID().shortString()); + s += format("Size %d; ", servers.size()); for(int i=0; i, public IDataDistributionTeam { +private: + UID id; + public: vector> teams; vector tempServerIDs; - ParallelTCInfo() { } + ParallelTCInfo() : id(deterministicRandom()->randomUniqueID()) {} void addTeam(Reference team) { teams.push_back(team); @@ -250,6 +253,8 @@ public: ASSERT(!teams.empty()); teams[0]->addServers(servers); } + + UID getTeamID() override { return id; } }; struct Busyness { From 0bc51bb78071b4109764cd30b3954e8135e23fec Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Wed, 21 Oct 2020 11:24:18 -0700 Subject: [PATCH 026/317] Resolve review comments --- fdbserver/DataDistribution.actor.cpp | 4 ++-- fdbserver/Knobs.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index c43414d69d..c5891c6bba 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -3180,8 +3180,8 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea zeroServerLeftLogger = Void(); } if (logTeamEvents) { - auto dataLoss = team->getPriority() == SERVER_KNOBS->PRIORITY_TEAM_0_LEFT; - auto severity = dataLoss ? SevWarnAlways : SevInfo; + int dataLoss = team->getPriority() == SERVER_KNOBS->PRIORITY_TEAM_0_LEFT; + Severity severity = dataLoss ? SevWarnAlways : SevInfo; TraceEvent(severity, "ServerTeamPriorityChange", self->distributorId) .detail("Priority", team->getPriority()) .detail("Info", team->getDesc()) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 25fbc3cd85..a265665f01 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -221,7 +221,7 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( DD_ENABLE_VERBOSE_TRACING, false ); if( randomize && BUGGIFY ) DD_ENABLE_VERBOSE_TRACING = true; init( DD_TEAMS_INFO_PRINT_INTERVAL, 60 ); if( randomize && BUGGIFY ) DD_TEAMS_INFO_PRINT_INTERVAL = 10; init( DD_TEAMS_INFO_PRINT_YIELD_COUNT, 100 ); if( randomize && BUGGIFY ) DD_TEAMS_INFO_PRINT_YIELD_COUNT = deterministicRandom()->random01() * 1000 + 1; - init( DD_TEAM_ZERO_SERVER_LEFT_LOG_DELAY, 120 ); + init( DD_TEAM_ZERO_SERVER_LEFT_LOG_DELAY, 120 ); if( randomize && BUGGIFY ) DD_TEAM_ZERO_SERVER_LEFT_LOG_DELAY = 5; // TeamRemover init( TR_FLAG_DISABLE_MACHINE_TEAM_REMOVER, false ); if( randomize && BUGGIFY ) TR_FLAG_DISABLE_MACHINE_TEAM_REMOVER = deterministicRandom()->random01() < 0.1 ? true : false; // false by default. disable the consistency check when it's true From 21ad448ad30a22c819332225e86c2f3f3cf8c538 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Wed, 21 Oct 2020 11:27:41 -0700 Subject: [PATCH 027/317] Fix macOS build. --- fdbserver/DataDistribution.actor.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/DataDistribution.actor.h b/fdbserver/DataDistribution.actor.h index c4d961f5ae..b8d27b8de1 100644 --- a/fdbserver/DataDistribution.actor.h +++ b/fdbserver/DataDistribution.actor.h @@ -63,7 +63,7 @@ struct IDataDistributionTeam { std::string getDesc() { const auto& servers = getLastKnownServerInterfaces(); - std::string s = format("[TeamID - %s]", getTeamID().shortString()); + std::string s = format("[TeamID - %s]", getTeamID().shortString().c_str()); s += format("Size %d; ", servers.size()); for(int i=0; i Date: Wed, 21 Oct 2020 16:52:17 -0700 Subject: [PATCH 028/317] Fix typos. --- fdbserver/DataDistribution.actor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index c5891c6bba..6e4261e168 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -2206,7 +2206,7 @@ struct DDTeamCollection : ReferenceCounted { if (addedTeams <= 0 && self->teams.size() == 0) { TraceEvent(SevWarn, "NoTeamAfterBuildTeam", self->distributorId) - .detail("ServdfTeamNum", self->teams.size()) + .detail("ServerTeamNum", self->teams.size()) .detail("Debug", "Check information below"); // Debug: set true for traceAllInfo() to print out more information self->traceAllInfo(); @@ -3133,7 +3133,7 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea } if(logTeamEvents) { - TraceEvent("ServewrTeamHealthDifference", self->distributorId) + TraceEvent("ServerTeamHealthDifference", self->distributorId) .detail("ServerTeam", team->getDesc()) .detail("LastOptimal", lastOptimal) .detail("LastHealthy", lastHealthy) From 9b5a02b5522b76f87fcd4a17d1a7c89d9a03edb4 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Thu, 22 Oct 2020 09:17:44 -0700 Subject: [PATCH 029/317] Resolve review comments --- fdbserver/DataDistribution.actor.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/DataDistribution.actor.h b/fdbserver/DataDistribution.actor.h index b8d27b8de1..993090a24b 100644 --- a/fdbserver/DataDistribution.actor.h +++ b/fdbserver/DataDistribution.actor.h @@ -63,7 +63,7 @@ struct IDataDistributionTeam { std::string getDesc() { const auto& servers = getLastKnownServerInterfaces(); - std::string s = format("[TeamID - %s]", getTeamID().shortString().c_str()); + std::string s = format("TeamID:%s", getTeamID().shortString().c_str()); s += format("Size %d; ", servers.size()); for(int i=0; i Date: Fri, 23 Oct 2020 10:06:22 -0700 Subject: [PATCH 030/317] Changed getTeamID() to return a string instead of UID as suggested by reviews. --- fdbserver/DataDistribution.actor.cpp | 12 ++++++------ fdbserver/DataDistribution.actor.h | 4 ++-- fdbserver/DataDistributionQueue.actor.cpp | 9 ++++++++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index 6e4261e168..4f0de1c22b 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -203,7 +203,7 @@ public: } } - UID getTeamID() override { return id; } + std::string getTeamID() override { return id.shortString(); } virtual vector getLastKnownServerInterfaces() { vector v; @@ -1362,7 +1362,7 @@ struct DDTeamCollection : ReferenceCounted { .detail("Healthy", team->isHealthy()) .detail("TeamSize", team->size()) .detail("MemberIDs", team->getServerIDsStr()) - .detail("TeamID", team->getTeamID().shortString()); + .detail("TeamID", team->getTeamID()); } } @@ -2491,7 +2491,7 @@ struct DDTeamCollection : ReferenceCounted { TraceEvent("ServerTeamRemoved") .detail("Primary", primary) .detail("TeamServerIDs", teams[t]->getServerIDsStr()) - .detail("TeamID", teams[t]->getTeamID().shortString()); + .detail("TeamID", teams[t]->getTeamID()); // removeTeam also needs to remove the team from the machine team info. removeTeam(teams[t]); t--; @@ -2958,7 +2958,7 @@ ACTOR Future serverTeamRemover(DDTeamCollection* self) { TraceEvent("ServerTeamRemover", self->distributorId) .detail("ServerTeamToRemove", st->getServerIDsStr()) - .detail("ServerTeamID", st->getTeamID().shortString()) + .detail("ServerTeamID", st->getTeamID()) .detail("NumProcessTeamsOnTheServerTeam", maxNumProcessTeams) .detail("CurrentServerTeams", self->teams.size()) .detail("DesiredServerTeams", desiredServerTeams); @@ -2988,7 +2988,7 @@ ACTOR Future zeroServerLeftLogger_impl(DDTeamCollection* self, ReferencegetShardMetrics.getReply(GetMetricsRequest(shard)))); TraceEvent(SevWarnAlways, "DDShardLost", self->distributorId) - .detail("ServerTeamID", team->getTeamID().shortString()) + .detail("ServerTeamID", team->getTeamID()) .detail("ShardBegin", shard.begin) .detail("ShardEnd", shard.end); } @@ -3258,7 +3258,7 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea if(logTeamEvents) { TraceEvent("ServerTeamHealthNotReady", self->distributorId) .detail("HealthyServerTeamCount", self->healthyTeamCount) - .detail("ServerTeamID", team->getTeamID().shortString()); + .detail("ServgetTeamIDerTeamID", team->getTeamID()); } } } diff --git a/fdbserver/DataDistribution.actor.h b/fdbserver/DataDistribution.actor.h index 993090a24b..fa0ebce408 100644 --- a/fdbserver/DataDistribution.actor.h +++ b/fdbserver/DataDistribution.actor.h @@ -59,11 +59,11 @@ struct IDataDistributionTeam { virtual bool isWrongConfiguration() = 0; virtual void setWrongConfiguration(bool) = 0; virtual void addServers(const vector &servers) = 0; - virtual UID getTeamID() = 0; + virtual std::string getTeamID() = 0; std::string getDesc() { const auto& servers = getLastKnownServerInterfaces(); - std::string s = format("TeamID:%s", getTeamID().shortString().c_str()); + std::string s = format("TeamID:%s", getTeamID().c_str()); s += format("Size %d; ", servers.size()); for(int i=0; iaddServers(servers); } - UID getTeamID() override { return id; } + std::string getTeamID() override { + std::string id; + for (int i = 0; i < teams.size(); i++) { + auto const& team = teams[i]; + id += (i == teams.size() - 1) ? team->getTeamID() : format("%s, ", team->getTeamID().c_str()); + } + return id; + } }; struct Busyness { From be7944773f02b48ce813c2aac7b464cb08aaa07d Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Fri, 23 Oct 2020 10:39:32 -0700 Subject: [PATCH 031/317] Fix a typo --- fdbserver/DataDistribution.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index 4f0de1c22b..66359a44d0 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -3258,7 +3258,7 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea if(logTeamEvents) { TraceEvent("ServerTeamHealthNotReady", self->distributorId) .detail("HealthyServerTeamCount", self->healthyTeamCount) - .detail("ServgetTeamIDerTeamID", team->getTeamID()); + .detail("ServerTeamID", team->getTeamID()); } } } From cedcfc7d870e74872ef1553972265db923db4d1e Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Mon, 26 Oct 2020 16:48:09 -0700 Subject: [PATCH 032/317] Removed unused uid field inside ParallelTCInfo --- fdbserver/DataDistributionQueue.actor.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/fdbserver/DataDistributionQueue.actor.cpp b/fdbserver/DataDistributionQueue.actor.cpp index 18a30a3db4..238bd5c748 100644 --- a/fdbserver/DataDistributionQueue.actor.cpp +++ b/fdbserver/DataDistributionQueue.actor.cpp @@ -82,14 +82,11 @@ struct RelocateData { }; class ParallelTCInfo : public ReferenceCounted, public IDataDistributionTeam { -private: - UID id; - public: vector> teams; vector tempServerIDs; - ParallelTCInfo() : id(deterministicRandom()->randomUniqueID()) {} + ParallelTCInfo() {} void addTeam(Reference team) { teams.push_back(team); From fd82085a9c1764253dd25974a8f0b9cf6aae68ce Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Tue, 27 Oct 2020 10:47:32 -0600 Subject: [PATCH 033/317] Update build/Dockerfile Co-authored-by: Alvin Moore <36203359+AlvinMooreSr@users.noreply.github.com> --- build/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/Dockerfile b/build/Dockerfile index b7c9576d67..7dbbdd3cab 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -68,8 +68,8 @@ RUN cd /opt/ && curl -L https://github.com/facebook/rocksdb/archive/v6.10.1.tar. ARG TIMEZONEINFO=America/Los_Angeles RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/${TIMEZONEINFO} /etc/localtime -LABEL version=0.1.19 -ENV DOCKER_IMAGEVER=0.1.19 +LABEL version=0.1.20 +ENV DOCKER_IMAGEVER=0.1.20 ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0 ENV CC=/opt/rh/devtoolset-8/root/usr/bin/gcc ENV CXX=/opt/rh/devtoolset-8/root/usr/bin/g++ From 639fe8ca38b6c7ca89015228ec4adeb1cc2efd7e Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Tue, 27 Oct 2020 10:47:40 -0600 Subject: [PATCH 034/317] Update build/Dockerfile.devel Co-authored-by: Alvin Moore <36203359+AlvinMooreSr@users.noreply.github.com> --- build/Dockerfile.devel | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/Dockerfile.devel b/build/Dockerfile.devel index 67db4c15b6..81bddbb178 100644 --- a/build/Dockerfile.devel +++ b/build/Dockerfile.devel @@ -50,8 +50,8 @@ RUN cp -iv /usr/local/bin/clang++ /usr/local/bin/clang++.deref &&\ ldconfig &&\ rm -rf /mnt/artifacts -LABEL version=0.11.10 -ENV DOCKER_IMAGEVER=0.11.10 +LABEL version=0.11.11 +ENV DOCKER_IMAGEVER=0.11.11 ENV CLANGCC=/usr/local/bin/clang.de8a65ef ENV CLANGCXX=/usr/local/bin/clang++.de8a65ef From 02d979988cb812e0be16962477d8c9f5cdc043d6 Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Tue, 27 Oct 2020 10:47:47 -0600 Subject: [PATCH 035/317] Update build/docker-compose.yaml Co-authored-by: Alvin Moore <36203359+AlvinMooreSr@users.noreply.github.com> --- build/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/docker-compose.yaml b/build/docker-compose.yaml index 98f0ac691e..048d468dab 100644 --- a/build/docker-compose.yaml +++ b/build/docker-compose.yaml @@ -2,7 +2,7 @@ version: "3" services: common: &common - image: foundationdb/foundationdb-build:0.1.19 + image: foundationdb/foundationdb-build:0.1.20 build-setup: &build-setup <<: *common From af2ac5753229ffdab00f2cfc30bd7fb295e95e4a Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Tue, 27 Oct 2020 16:42:34 -0600 Subject: [PATCH 036/317] Update build/Dockerfile Co-authored-by: Alvin Moore <36203359+AlvinMooreSr@users.noreply.github.com> --- build/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/Dockerfile b/build/Dockerfile index 7dbbdd3cab..8a4cb7f675 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -57,8 +57,8 @@ RUN cd /tmp && curl -L https://www.openssl.org/source/openssl-1.1.1h.tar.gz -o o RUN cd /tmp && curl -L https://github.com/ToruNiina/toml11/archive/v3.4.0.tar.gz > toml.tar.gz &&\ echo "bc6d733efd9216af8c119d8ac64a805578c79cc82b813e4d1d880ca128bd154d toml.tar.gz" > toml-sha256.txt &&\ sha256sum -c toml-sha256.txt &&\ - tar xf toml.tar.gz && rm -rf build && mkdir build && cd build && cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -Dtoml11_BUILD_TEST=OFF ../toml11-3.4.0 &&\ - cmake --build . --target install && cd / && rm -rf tmp/build && rm -rf tmp/toml11-3.4.0 + tar xf toml.tar.gz && rm -rf build && mkdir build && cd build && scl enable devtoolset-8 -- cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -Dtoml11_BUILD_TEST=OFF ../toml11-3.4.0 &&\ + scl enable devtoolset-8 -- cmake --build . --target install && cd / && rm -rf tmp/build && rm -rf tmp/toml11-3.4.0 RUN cd /opt/ && curl -L https://github.com/facebook/rocksdb/archive/v6.10.1.tar.gz -o rocksdb.tar.gz &&\ echo "d573d2f15cdda883714f7e0bc87b814a8d4a53a82edde558f08f940e905541ee rocksdb.tar.gz" > rocksdb-sha.txt &&\ From fbe421c6cb0b1affef189a945d23bd2fd0cbb3e3 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Thu, 29 Oct 2020 14:22:45 -0700 Subject: [PATCH 037/317] Added time-in-queue measurement for GRV requests. Added metrics to show each time when a read version is hand out, how much of the queue, percentage-wise, is served. --- fdbserver/MasterProxyServer.actor.cpp | 64 ++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 11 deletions(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 3f87a9b42e..8ff2e09dd3 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -65,6 +65,12 @@ struct ProxyStats { Version lastCommitVersionAssigned; double transactionRateAllowed, batchTransactionRateAllowed; double transactionLimit, batchTransactionLimit; + // how much of the GRV requests queue was processed in one attempt to hand out read version. + double percentageOfGRVQueueProcessed; + double percentageOfBatchGRVQueueProcessed; + + LatencySample normalTxnGRVTimeInQueue; + LatencySample batchTxnGRVTimeInQueue; LatencySample commitLatencySample; LatencySample grvLatencySample; @@ -74,14 +80,33 @@ struct ProxyStats { Future logger; - explicit ProxyStats(UID id, Version* pVersion, NotifiedVersion* pCommittedVersion, int64_t *commitBatchesMemBytesCountPtr) - : cc("ProxyStats", id.toString()), txnRequestIn("TxnRequestIn", cc), txnRequestOut("TxnRequestOut", cc), txnRequestErrors("TxnRequestErrors", cc), - txnStartIn("TxnStartIn", cc), txnStartOut("TxnStartOut", cc), txnStartBatch("TxnStartBatch", cc), txnSystemPriorityStartIn("TxnSystemPriorityStartIn", cc), txnSystemPriorityStartOut("TxnSystemPriorityStartOut", cc), txnBatchPriorityStartIn("TxnBatchPriorityStartIn", cc), txnBatchPriorityStartOut("TxnBatchPriorityStartOut", cc), - txnDefaultPriorityStartIn("TxnDefaultPriorityStartIn", cc), txnDefaultPriorityStartOut("TxnDefaultPriorityStartOut", cc), txnCommitIn("TxnCommitIn", cc), txnCommitVersionAssigned("TxnCommitVersionAssigned", cc), txnCommitResolving("TxnCommitResolving", cc), txnCommitResolved("TxnCommitResolved", cc), txnCommitOut("TxnCommitOut", cc), - txnCommitOutSuccess("TxnCommitOutSuccess", cc), txnCommitErrors("TxnCommitErrors", cc), txnConflicts("TxnConflicts", cc), commitBatchIn("CommitBatchIn", cc), commitBatchOut("CommitBatchOut", cc), mutationBytes("MutationBytes", cc), mutations("Mutations", cc), conflictRanges("ConflictRanges", cc), keyServerLocationIn("KeyServerLocationIn", cc), keyServerLocationOut("KeyServerLocationOut", cc), keyServerLocationErrors("KeyServerLocationErrors", cc), - lastCommitVersionAssigned(0), commitLatencySample("CommitLatencyMetrics", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, SERVER_KNOBS->LATENCY_SAMPLE_SIZE), grvLatencySample("GRVLatencyMetrics", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, SERVER_KNOBS->LATENCY_SAMPLE_SIZE), - commitLatencyBands("CommitLatencyBands", id, SERVER_KNOBS->STORAGE_LOGGING_DELAY), grvLatencyBands("GRVLatencyBands", id, SERVER_KNOBS->STORAGE_LOGGING_DELAY) - { + explicit ProxyStats(UID id, Version* pVersion, NotifiedVersion* pCommittedVersion, + int64_t* commitBatchesMemBytesCountPtr) + : cc("ProxyStats", id.toString()), txnRequestIn("TxnRequestIn", cc), txnRequestOut("TxnRequestOut", cc), + txnRequestErrors("TxnRequestErrors", cc), txnStartIn("TxnStartIn", cc), txnStartOut("TxnStartOut", cc), + txnStartBatch("TxnStartBatch", cc), txnSystemPriorityStartIn("TxnSystemPriorityStartIn", cc), + txnSystemPriorityStartOut("TxnSystemPriorityStartOut", cc), + txnBatchPriorityStartIn("TxnBatchPriorityStartIn", cc), + txnBatchPriorityStartOut("TxnBatchPriorityStartOut", cc), + txnDefaultPriorityStartIn("TxnDefaultPriorityStartIn", cc), + txnDefaultPriorityStartOut("TxnDefaultPriorityStartOut", cc), txnCommitIn("TxnCommitIn", cc), + txnCommitVersionAssigned("TxnCommitVersionAssigned", cc), txnCommitResolving("TxnCommitResolving", cc), + txnCommitResolved("TxnCommitResolved", cc), txnCommitOut("TxnCommitOut", cc), + txnCommitOutSuccess("TxnCommitOutSuccess", cc), txnCommitErrors("TxnCommitErrors", cc), + txnConflicts("TxnConflicts", cc), commitBatchIn("CommitBatchIn", cc), commitBatchOut("CommitBatchOut", cc), + mutationBytes("MutationBytes", cc), mutations("Mutations", cc), conflictRanges("ConflictRanges", cc), + keyServerLocationIn("KeyServerLocationIn", cc), keyServerLocationOut("KeyServerLocationOut", cc), + keyServerLocationErrors("KeyServerLocationErrors", cc), lastCommitVersionAssigned(0), + commitLatencySample("CommitLatencyMetrics", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, + SERVER_KNOBS->LATENCY_SAMPLE_SIZE), + grvLatencySample("GRVLatencyMetrics", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, + SERVER_KNOBS->LATENCY_SAMPLE_SIZE), + commitLatencyBands("CommitLatencyBands", id, SERVER_KNOBS->STORAGE_LOGGING_DELAY), + grvLatencyBands("GRVLatencyBands", id, SERVER_KNOBS->STORAGE_LOGGING_DELAY), + normalTxnGRVTimeInQueue("NormalTxnGRVTimeInQueue", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, + SERVER_KNOBS->LATENCY_SAMPLE_SIZE), + batchTxnGRVTimeInQueue("BatchTxnGRVTimeInQueue", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, + SERVER_KNOBS->LATENCY_SAMPLE_SIZE) { specialCounter(cc, "LastAssignedCommitVersion", [this](){return this->lastCommitVersionAssigned;}); specialCounter(cc, "Version", [pVersion](){return *pVersion; }); specialCounter(cc, "CommittedVersion", [pCommittedVersion](){ return pCommittedVersion->get(); }); @@ -91,6 +116,9 @@ struct ProxyStats { specialCounter(cc, "BatchTransactionRateAllowed", [this]() { return this->batchTransactionRateAllowed; }); specialCounter(cc, "NormalTransactionLimit", [this]() { return this->transactionLimit; }); specialCounter(cc, "BatchTransactionLimit", [this]() { return this->batchTransactionLimit; }); + specialCounter(cc, "PercentageOfGRVQueueProcessed", [this]() { return this->PercentageOfGRVQueueProcessed; }); + specialCounter(cc, "PercentageOfBatchGRVQueueProcessed", + [this]() { return this->PercentageOfBatchGRVQueueProcessed; }); logger = traceCounters("ProxyMetrics", id, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "ProxyMetrics"); } }; @@ -1334,6 +1362,9 @@ ACTOR static Future transactionStarter(MasterProxyInterface proxy, Referen int requestsToStart = 0; + uint32_t systemQueueSize = systemQueue.size(); + uint32_t defaultQueueSize = defaultQueue.size(); + uint32_t batchQueueSize = batchQueue.size(); while (requestsToStart < SERVER_KNOBS->START_TRANSACTION_MAX_REQUESTS_TO_START) { Deque* transactionQueue; if(!systemQueue.empty()) { @@ -1362,12 +1393,17 @@ ACTOR static Future transactionStarter(MasterProxyInterface proxy, Referen } transactionsStarted[req.flags&1] += tc; - if (req.priority() >= GetReadVersionRequest::PRIORITY_SYSTEM_IMMEDIATE) + double currentTime = g_network->timer(); + if (req.priority() >= GetReadVersionRequest::PRIORITY_SYSTEM_IMMEDIATE) { systemTransactionsStarted[req.flags & 1] += tc; - else if (req.priority() >= GetReadVersionRequest::PRIORITY_DEFAULT) + stats->normalTxnGRVTimeInQueue.addMeasurement(currentTime - req.requestTime()); + } else if (req.priority() >= GetReadVersionRequest::PRIORITY_DEFAULT) { defaultPriTransactionsStarted[req.flags & 1] += tc; - else + stats->normalTxnGRVTimeInQueue.addMeasurement(currentTime - req.requestTime()); + } else { batchPriTransactionsStarted[req.flags & 1] += tc; + stats->batchTxnGRVTimeInQueue.addMeasurement(currentTime - req.requestTime()); + } start[req.flags & 1].push_back(std::move(req)); static_assert(GetReadVersionRequest::FLAG_CAUSAL_READ_RISKY == 1, "Implementation dependent on flag value"); transactionQueue->pop_front(); @@ -1399,6 +1435,8 @@ ACTOR static Future transactionStarter(MasterProxyInterface proxy, Referen g_traceBatch.addEvent("TransactionDebug", debugID.get().first(), "MasterProxyServer.masterProxyServerCore.Broadcast"); } + int nonBatchGRVProcessed = 0; + int batchGRVProcessed = 0; for (int i = 0; i < start.size(); i++) { if (start[i].size()) { Future readVersionReply = getLiveCommittedVersion(commitData, i, &otherProxies, debugID, transactionsStarted[i], systemTransactionsStarted[i], defaultPriTransactionsStarted[i], batchPriTransactionsStarted[i]); @@ -1408,8 +1446,12 @@ ACTOR static Future transactionStarter(MasterProxyInterface proxy, Referen if (i == 0) { addActor.send(timeReply(readVersionReply, replyTimes)); } + nonBatchGRVProcessed += systemTransactionsStarted[i] + defaultPriTransactionsStarted[i]; + batchGRVProcessed += batchPriTransactionsStarted[i]; } } + stats->percentageOfGRVQueueProcessed = (double)nonBatchGRVProcessed / (systemQueueSize + defaultQueueSize); + stats->percentageOfBatchGRVQueueProcessed = (double)batchGRVProcessed / batchQueueSize; } } From 77825a478478f062382b5ab3e9b5982588de35fa Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Thu, 29 Oct 2020 14:27:31 -0700 Subject: [PATCH 038/317] Fix typo. --- fdbserver/MasterProxyServer.actor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 8ff2e09dd3..bb8df548fc 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -116,9 +116,9 @@ struct ProxyStats { specialCounter(cc, "BatchTransactionRateAllowed", [this]() { return this->batchTransactionRateAllowed; }); specialCounter(cc, "NormalTransactionLimit", [this]() { return this->transactionLimit; }); specialCounter(cc, "BatchTransactionLimit", [this]() { return this->batchTransactionLimit; }); - specialCounter(cc, "PercentageOfGRVQueueProcessed", [this]() { return this->PercentageOfGRVQueueProcessed; }); + specialCounter(cc, "PercentageOfGRVQueueProcessed", [this]() { return this->percentageOfGRVQueueProcessed; }); specialCounter(cc, "PercentageOfBatchGRVQueueProcessed", - [this]() { return this->PercentageOfBatchGRVQueueProcessed; }); + [this]() { return this->percentageOfBatchGRVQueueProcessed; }); logger = traceCounters("ProxyMetrics", id, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "ProxyMetrics"); } }; From e73d189f88d7c1abfee44cd5425f2677e3a969d5 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Fri, 30 Oct 2020 11:20:40 -0700 Subject: [PATCH 039/317] Attach datacenter id to process, network, machine and memory metrics. --- fdbserver/fdbserver.actor.cpp | 10 +- fdbserver/worker.actor.cpp | 3 +- flow/SystemMonitor.cpp | 209 +++++++++++++++++++--------------- flow/SystemMonitor.h | 8 +- 4 files changed, 133 insertions(+), 97 deletions(-) diff --git a/fdbserver/fdbserver.actor.cpp b/fdbserver/fdbserver.actor.cpp index 64006eb67b..94eb58e9dd 100644 --- a/fdbserver/fdbserver.actor.cpp +++ b/fdbserver/fdbserver.actor.cpp @@ -492,8 +492,10 @@ ACTOR Future dumpDatabase( Database cx, std::string outputFilename, KeyRan void memoryTest(); void skipListTest(); -Future startSystemMonitor(std::string dataFolder, Optional> zoneId, Optional> machineId) { - initializeSystemMonitorMachineState(SystemMonitorMachineState(dataFolder, zoneId, machineId, g_network->getLocalAddress().ip)); +Future startSystemMonitor(std::string dataFolder, Optional> dcId, + Optional> zoneId, Optional> machineId) { + initializeSystemMonitorMachineState( + SystemMonitorMachineState(dataFolder, dcId, zoneId, machineId, g_network->getLocalAddress().ip)); systemMonitor(); return recurring( &systemMonitor, 5.0, TaskPriority::FlushTrace ); @@ -1794,13 +1796,13 @@ int main(int argc, char* argv[]) { f = stopAfter( runTests( connectionFile, TEST_TYPE_FROM_FILE, testOnServers ? TEST_ON_SERVERS : TEST_ON_TESTERS, minTesterCount, testFile, StringRef(), localities ) ); g_network->run(); } else if (role == Test) { - auto m = startSystemMonitor(dataFolder, zoneId, zoneId); + auto m = startSystemMonitor(dataFolder, dcId, zoneId, zoneId); f = stopAfter( runTests( connectionFile, TEST_TYPE_FROM_FILE, TEST_HERE, 1, testFile, StringRef(), localities ) ); g_network->run(); } else if (role == ConsistencyCheck) { setupSlowTaskProfiler(); - auto m = startSystemMonitor(dataFolder, zoneId, zoneId); + auto m = startSystemMonitor(dataFolder, dcId, zoneId, zoneId); f = stopAfter( runTests( connectionFile, TEST_TYPE_CONSISTENCY_CHECK, TEST_HERE, 1, testFile, StringRef(), localities ) ); g_network->run(); } else if (role == CreateTemplateDatabase) { diff --git a/fdbserver/worker.actor.cpp b/fdbserver/worker.actor.cpp index b400bf93e7..ac750c5458 100644 --- a/fdbserver/worker.actor.cpp +++ b/fdbserver/worker.actor.cpp @@ -835,7 +835,8 @@ ACTOR Future workerServer( filesClosed.add(stopping.getFuture()); - initializeSystemMonitorMachineState(SystemMonitorMachineState(folder, locality.zoneId(), locality.machineId(), g_network->getLocalAddress().ip)); + initializeSystemMonitorMachineState(SystemMonitorMachineState( + folder, locality.dcId(), locality.zoneId(), locality.machineId(), g_network->getLocalAddress().ip)); { auto recruited = interf; //ghetto! don't we all love a good #define diff --git a/flow/SystemMonitor.cpp b/flow/SystemMonitor.cpp index c3b5cb8051..7920a7f6d0 100644 --- a/flow/SystemMonitor.cpp +++ b/flow/SystemMonitor.cpp @@ -60,87 +60,116 @@ SystemStatistics customSystemMonitor(std::string eventName, StatisticsState *sta if (!DEBUG_DETERMINISM && currentStats.initialized) { { TraceEvent(eventName.c_str()) - .detail("Elapsed", currentStats.elapsed) - .detail("CPUSeconds", currentStats.processCPUSeconds) - .detail("MainThreadCPUSeconds", currentStats.mainThreadCPUSeconds) - .detail("UptimeSeconds", now() - machineState.monitorStartTime) - .detail("Memory", currentStats.processMemory) - .detail("ResidentMemory", currentStats.processResidentMemory) - .detail("UnusedAllocatedMemory", getTotalUnusedAllocatedMemory()) - .detail("MbpsSent", ((netData.bytesSent - statState->networkState.bytesSent) * 8e-6) / currentStats.elapsed) - .detail("MbpsReceived", ((netData.bytesReceived - statState->networkState.bytesReceived) * 8e-6) / currentStats.elapsed) - .detail("DiskTotalBytes", currentStats.processDiskTotalBytes) - .detail("DiskFreeBytes", currentStats.processDiskFreeBytes) - .detail("DiskQueueDepth", currentStats.processDiskQueueDepth) - .detail("DiskIdleSeconds", currentStats.processDiskIdleSeconds) - .detail("DiskReads", currentStats.processDiskRead) - .detail("DiskWrites", currentStats.processDiskWrite) - .detail("DiskReadsCount", currentStats.processDiskReadCount) - .detail("DiskWritesCount", currentStats.processDiskWriteCount) - .detail("DiskWriteSectors", currentStats.processDiskWriteSectors) - .detail("DiskReadSectors", currentStats.processDiskReadSectors) - .detail("FileWrites", netData.countFileLogicalWrites - statState->networkState.countFileLogicalWrites) - .detail("FileReads", netData.countFileLogicalReads - statState->networkState.countFileLogicalReads) - .detail("CacheReadBytes", netData.countFileCacheReadBytes - statState->networkState.countFileCacheReadBytes) - .detail("CacheFinds", netData.countFileCacheFinds - statState->networkState.countFileCacheFinds) - .detail("CacheWritesBlocked", netData.countFileCacheWritesBlocked - statState->networkState.countFileCacheWritesBlocked) - .detail("CacheReadsBlocked", netData.countFileCacheReadsBlocked - statState->networkState.countFileCacheReadsBlocked) - .detail("CachePageReadsMerged", netData.countFileCachePageReadsMerged - statState->networkState.countFileCachePageReadsMerged) - .detail("CacheWrites", netData.countFileCacheWrites - statState->networkState.countFileCacheWrites) - .detail("CacheReads", netData.countFileCacheReads - statState->networkState.countFileCacheReads) - .detail("CacheHits", netData.countFilePageCacheHits - statState->networkState.countFilePageCacheHits) - .detail("CacheMisses", netData.countFilePageCacheMisses - statState->networkState.countFilePageCacheMisses) - .detail("CacheEvictions", netData.countFilePageCacheEvictions - statState->networkState.countFilePageCacheEvictions) - .detail("ZoneID", machineState.zoneId) - .detail("MachineID", machineState.machineId) - .detail("AIOSubmitCount", netData.countAIOSubmit - statState->networkState.countAIOSubmit) - .detail("AIOCollectCount", netData.countAIOCollect - statState->networkState.countAIOCollect) - .detail("AIOSubmitLag", (g_network->networkInfo.metrics.secSquaredSubmit - statState->networkMetricsState.secSquaredSubmit) / currentStats.elapsed) - .detail("AIODiskStall", (g_network->networkInfo.metrics.secSquaredDiskStall - statState->networkMetricsState.secSquaredDiskStall) / currentStats.elapsed) - .detail("CurrentConnections", netData.countConnEstablished - netData.countConnClosedWithError - netData.countConnClosedWithoutError) - .detail("ConnectionsEstablished", (double) (netData.countConnEstablished - statState->networkState.countConnEstablished) / currentStats.elapsed) - .detail("ConnectionsClosed", ((netData.countConnClosedWithError - statState->networkState.countConnClosedWithError) + (netData.countConnClosedWithoutError - statState->networkState.countConnClosedWithoutError)) / currentStats.elapsed) - .detail("ConnectionErrors", (netData.countConnClosedWithError - statState->networkState.countConnClosedWithError) / currentStats.elapsed) - .detail("TLSPolicyFailures", (netData.countTLSPolicyFailures - statState->networkState.countTLSPolicyFailures) / currentStats.elapsed) - .trackLatest(eventName); + .detail("Elapsed", currentStats.elapsed) + .detail("CPUSeconds", currentStats.processCPUSeconds) + .detail("MainThreadCPUSeconds", currentStats.mainThreadCPUSeconds) + .detail("UptimeSeconds", now() - machineState.monitorStartTime) + .detail("Memory", currentStats.processMemory) + .detail("ResidentMemory", currentStats.processResidentMemory) + .detail("UnusedAllocatedMemory", getTotalUnusedAllocatedMemory()) + .detail("MbpsSent", + ((netData.bytesSent - statState->networkState.bytesSent) * 8e-6) / currentStats.elapsed) + .detail("MbpsReceived", + ((netData.bytesReceived - statState->networkState.bytesReceived) * 8e-6) / currentStats.elapsed) + .detail("DiskTotalBytes", currentStats.processDiskTotalBytes) + .detail("DiskFreeBytes", currentStats.processDiskFreeBytes) + .detail("DiskQueueDepth", currentStats.processDiskQueueDepth) + .detail("DiskIdleSeconds", currentStats.processDiskIdleSeconds) + .detail("DiskReads", currentStats.processDiskRead) + .detail("DiskWrites", currentStats.processDiskWrite) + .detail("DiskReadsCount", currentStats.processDiskReadCount) + .detail("DiskWritesCount", currentStats.processDiskWriteCount) + .detail("DiskWriteSectors", currentStats.processDiskWriteSectors) + .detail("DiskReadSectors", currentStats.processDiskReadSectors) + .detail("FileWrites", netData.countFileLogicalWrites - statState->networkState.countFileLogicalWrites) + .detail("FileReads", netData.countFileLogicalReads - statState->networkState.countFileLogicalReads) + .detail("CacheReadBytes", + netData.countFileCacheReadBytes - statState->networkState.countFileCacheReadBytes) + .detail("CacheFinds", netData.countFileCacheFinds - statState->networkState.countFileCacheFinds) + .detail("CacheWritesBlocked", + netData.countFileCacheWritesBlocked - statState->networkState.countFileCacheWritesBlocked) + .detail("CacheReadsBlocked", + netData.countFileCacheReadsBlocked - statState->networkState.countFileCacheReadsBlocked) + .detail("CachePageReadsMerged", + netData.countFileCachePageReadsMerged - statState->networkState.countFileCachePageReadsMerged) + .detail("CacheWrites", netData.countFileCacheWrites - statState->networkState.countFileCacheWrites) + .detail("CacheReads", netData.countFileCacheReads - statState->networkState.countFileCacheReads) + .detail("CacheHits", netData.countFilePageCacheHits - statState->networkState.countFilePageCacheHits) + .detail("CacheMisses", + netData.countFilePageCacheMisses - statState->networkState.countFilePageCacheMisses) + .detail("CacheEvictions", + netData.countFilePageCacheEvictions - statState->networkState.countFilePageCacheEvictions) + .detail("DCID", machineState.dcId) + .detail("ZoneID", machineState.zoneId) + .detail("MachineID", machineState.machineId) + .detail("AIOSubmitCount", netData.countAIOSubmit - statState->networkState.countAIOSubmit) + .detail("AIOCollectCount", netData.countAIOCollect - statState->networkState.countAIOCollect) + .detail("AIOSubmitLag", (g_network->networkInfo.metrics.secSquaredSubmit - + statState->networkMetricsState.secSquaredSubmit) / + currentStats.elapsed) + .detail("AIODiskStall", (g_network->networkInfo.metrics.secSquaredDiskStall - + statState->networkMetricsState.secSquaredDiskStall) / + currentStats.elapsed) + .detail("CurrentConnections", netData.countConnEstablished - netData.countConnClosedWithError - + netData.countConnClosedWithoutError) + .detail("ConnectionsEstablished", + (double)(netData.countConnEstablished - statState->networkState.countConnEstablished) / + currentStats.elapsed) + .detail("ConnectionsClosed", + ((netData.countConnClosedWithError - statState->networkState.countConnClosedWithError) + + (netData.countConnClosedWithoutError - statState->networkState.countConnClosedWithoutError)) / + currentStats.elapsed) + .detail("ConnectionErrors", + (netData.countConnClosedWithError - statState->networkState.countConnClosedWithError) / + currentStats.elapsed) + .detail("TLSPolicyFailures", + (netData.countTLSPolicyFailures - statState->networkState.countTLSPolicyFailures) / + currentStats.elapsed) + .trackLatest(eventName); TraceEvent("MemoryMetrics") - .DETAILALLOCATORMEMUSAGE(16) - .DETAILALLOCATORMEMUSAGE(32) - .DETAILALLOCATORMEMUSAGE(64) - .DETAILALLOCATORMEMUSAGE(96) - .DETAILALLOCATORMEMUSAGE(128) - .DETAILALLOCATORMEMUSAGE(256) - .DETAILALLOCATORMEMUSAGE(512) - .DETAILALLOCATORMEMUSAGE(1024) - .DETAILALLOCATORMEMUSAGE(2048) - .DETAILALLOCATORMEMUSAGE(4096) - .DETAILALLOCATORMEMUSAGE(8192) - .detail("HugeArenaMemory", g_hugeArenaMemory.load()); + .DETAILALLOCATORMEMUSAGE(16) + .DETAILALLOCATORMEMUSAGE(32) + .DETAILALLOCATORMEMUSAGE(64) + .DETAILALLOCATORMEMUSAGE(96) + .DETAILALLOCATORMEMUSAGE(128) + .DETAILALLOCATORMEMUSAGE(256) + .DETAILALLOCATORMEMUSAGE(512) + .DETAILALLOCATORMEMUSAGE(1024) + .DETAILALLOCATORMEMUSAGE(2048) + .DETAILALLOCATORMEMUSAGE(4096) + .DETAILALLOCATORMEMUSAGE(8192) + .detail("HugeArenaMemory", g_hugeArenaMemory.load()) + .detail("DCID", machineState.dcId) + .detail("ZoneID", machineState.zoneId) + .detail("MachineID", machineState.machineId); TraceEvent n("NetworkMetrics"); - n - .detail("Elapsed", currentStats.elapsed) - .detail("CantSleep", netData.countCantSleep - statState->networkState.countCantSleep) - .detail("WontSleep", netData.countWontSleep - statState->networkState.countWontSleep) - .detail("Yields", netData.countYields - statState->networkState.countYields) - .detail("YieldCalls", netData.countYieldCalls - statState->networkState.countYieldCalls) - .detail("YieldCallsTrue", netData.countYieldCallsTrue - statState->networkState.countYieldCallsTrue) - .detail("SlowTaskSignals", netData.countSlowTaskSignals - statState->networkState.countSlowTaskSignals) - .detail("YieldBigStack", netData.countYieldBigStack - statState->networkState.countYieldBigStack) - .detail("RunLoopIterations", netData.countRunLoop - statState->networkState.countRunLoop) - .detail("TimersExecuted", netData.countTimers - statState->networkState.countTimers) - .detail("TasksExecuted", netData.countTasks - statState->networkState.countTasks) - .detail("ASIOEventsProcessed", netData.countASIOEvents - statState->networkState.countASIOEvents) - .detail("ReadCalls", netData.countReads - statState->networkState.countReads) - .detail("WriteCalls", netData.countWrites - statState->networkState.countWrites) - .detail("ReadProbes", netData.countReadProbes - statState->networkState.countReadProbes) - .detail("WriteProbes", netData.countWriteProbes - statState->networkState.countWriteProbes) - .detail("PacketsRead", netData.countPacketsReceived - statState->networkState.countPacketsReceived) - .detail("PacketsGenerated", netData.countPacketsGenerated - statState->networkState.countPacketsGenerated) - .detail("WouldBlock", netData.countWouldBlock - statState->networkState.countWouldBlock) - .detail("LaunchTime", netData.countLaunchTime - statState->networkState.countLaunchTime) - .detail("ReactTime", netData.countReactTime - statState->networkState.countReactTime); + n.detail("Elapsed", currentStats.elapsed) + .detail("CantSleep", netData.countCantSleep - statState->networkState.countCantSleep) + .detail("WontSleep", netData.countWontSleep - statState->networkState.countWontSleep) + .detail("Yields", netData.countYields - statState->networkState.countYields) + .detail("YieldCalls", netData.countYieldCalls - statState->networkState.countYieldCalls) + .detail("YieldCallsTrue", netData.countYieldCallsTrue - statState->networkState.countYieldCallsTrue) + .detail("SlowTaskSignals", netData.countSlowTaskSignals - statState->networkState.countSlowTaskSignals) + .detail("YieldBigStack", netData.countYieldBigStack - statState->networkState.countYieldBigStack) + .detail("RunLoopIterations", netData.countRunLoop - statState->networkState.countRunLoop) + .detail("TimersExecuted", netData.countTimers - statState->networkState.countTimers) + .detail("TasksExecuted", netData.countTasks - statState->networkState.countTasks) + .detail("ASIOEventsProcessed", netData.countASIOEvents - statState->networkState.countASIOEvents) + .detail("ReadCalls", netData.countReads - statState->networkState.countReads) + .detail("WriteCalls", netData.countWrites - statState->networkState.countWrites) + .detail("ReadProbes", netData.countReadProbes - statState->networkState.countReadProbes) + .detail("WriteProbes", netData.countWriteProbes - statState->networkState.countWriteProbes) + .detail("PacketsRead", netData.countPacketsReceived - statState->networkState.countPacketsReceived) + .detail("PacketsGenerated", + netData.countPacketsGenerated - statState->networkState.countPacketsGenerated) + .detail("WouldBlock", netData.countWouldBlock - statState->networkState.countWouldBlock) + .detail("LaunchTime", netData.countLaunchTime - statState->networkState.countLaunchTime) + .detail("ReactTime", netData.countReactTime - statState->networkState.countReactTime) + .detail("DCID", machineState.dcId) + .detail("ZoneID", machineState.zoneId) + .detail("MachineID", machineState.machineId); for (int i = 0; inetworkInfo.metrics.countSlowEvents[i] - statState->networkMetricsState.countSlowEvents[i]) { @@ -165,18 +194,20 @@ SystemStatistics customSystemMonitor(std::string eventName, StatisticsState *sta } if(machineMetrics) { - TraceEvent("MachineMetrics").detail("Elapsed", currentStats.elapsed) - .detail("MbpsSent", currentStats.machineMegabitsSent / currentStats.elapsed) - .detail("MbpsReceived", currentStats.machineMegabitsReceived / currentStats.elapsed) - .detail("OutSegs", currentStats.machineOutSegs) - .detail("RetransSegs", currentStats.machineRetransSegs) - .detail("CPUSeconds", currentStats.machineCPUSeconds) - .detail("TotalMemory", currentStats.machineTotalRAM) - .detail("CommittedMemory", currentStats.machineCommittedRAM) - .detail("AvailableMemory", currentStats.machineAvailableRAM) - .detail("ZoneID", machineState.zoneId) - .detail("MachineID", machineState.machineId) - .trackLatest("MachineMetrics"); + TraceEvent("MachineMetrics") + .detail("Elapsed", currentStats.elapsed) + .detail("MbpsSent", currentStats.machineMegabitsSent / currentStats.elapsed) + .detail("MbpsReceived", currentStats.machineMegabitsReceived / currentStats.elapsed) + .detail("OutSegs", currentStats.machineOutSegs) + .detail("RetransSegs", currentStats.machineRetransSegs) + .detail("CPUSeconds", currentStats.machineCPUSeconds) + .detail("TotalMemory", currentStats.machineTotalRAM) + .detail("CommittedMemory", currentStats.machineCommittedRAM) + .detail("AvailableMemory", currentStats.machineAvailableRAM) + .detail("DCID", machineState.dcId) + .detail("ZoneID", machineState.zoneId) + .detail("MachineID", machineState.machineId) + .trackLatest("MachineMetrics"); } } diff --git a/flow/SystemMonitor.h b/flow/SystemMonitor.h index e8c4ca2c59..21bf20ac12 100644 --- a/flow/SystemMonitor.h +++ b/flow/SystemMonitor.h @@ -27,6 +27,7 @@ struct SystemMonitorMachineState { Optional folder; + Optional> dcId; Optional> zoneId; Optional> machineId; Optional ip; @@ -35,9 +36,10 @@ struct SystemMonitorMachineState { SystemMonitorMachineState() : monitorStartTime(0) {} explicit SystemMonitorMachineState(const IPAddress& ip) : ip(ip), monitorStartTime(0) {} - SystemMonitorMachineState(std::string folder, Optional> zoneId, - Optional> machineId, const IPAddress& ip) - : folder(folder), zoneId(zoneId), machineId(machineId), ip(ip), monitorStartTime(0) {} + SystemMonitorMachineState(std::string folder, Optional> dcId, + Optional> zoneId, Optional> machineId, + const IPAddress& ip) + : folder(folder), dcId(dcId), zoneId(zoneId), machineId(machineId), ip(ip), monitorStartTime(0) {} }; void initializeSystemMonitorMachineState(SystemMonitorMachineState machineState); From eead86f0060c3ee152a291481fbe563f0de0130e Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Fri, 30 Oct 2020 11:42:09 -0700 Subject: [PATCH 040/317] Add primary peek location, aks paring TLog ID to LogRouterMetrics. --- fdbserver/LogRouter.actor.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index cdb1fe719c..914780989c 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -75,6 +75,7 @@ struct LogRouterData { UID dbgid; Reference>> logSystem; + Optional primaryPeekLocation; NotifiedVersion version; NotifiedVersion minPopped; Version startVersion; @@ -148,7 +149,8 @@ struct LogRouterData { specialCounter(cc, "WaitForVersionMaxMS", [this](){ double val = this->maxWaitForVersionTime; this->maxWaitForVersionTime = 0; return 1000*val; }); specialCounter(cc, "GetMoreMS", [this](){ double val = this->getMoreTime; this->getMoreTime = 0; return 1000*val; }); specialCounter(cc, "GetMoreMaxMS", [this](){ double val = this->maxGetMoreTime; this->maxGetMoreTime = 0; return 1000*val; }); - logger = traceCounters("LogRouterMetrics", dbgid, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "LogRouterMetrics"); + specialCounter(cc, "PrimaryPeekLocation", [this]() { return this->primaryPeekLocation; }) logger = + traceCounters("LogRouterMetrics", dbgid, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "LogRouterMetrics"); } }; @@ -264,6 +266,7 @@ ACTOR Future pullAsyncData( LogRouterData *self ) { if(r) tagPopped = std::max(tagPopped, r->popped()); if( self->logSystem->get() ) { r = self->logSystem->get()->peekLogRouter( self->dbgid, tagAt, self->routerTag ); + self->primaryPeekLocation = r->getPrimaryPeekLocation(); TraceEvent("LogRouterPeekLocation", self->dbgid).detail("LogID", r->getPrimaryPeekLocation()).trackLatest(self->eventCacheHolder->trackingKey); } else { r = Reference(); From 063700e4d60cd44c1f32413761e3fe7571fab9c0 Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Tue, 27 Oct 2020 09:11:56 -0700 Subject: [PATCH 041/317] Add comments and questions to HA and tLog code reading The comments' correctness need to be confirmed by reviewers. --- fdbclient/FDBTypes.h | 9 ++++-- fdbclient/NativeAPI.actor.cpp | 2 ++ fdbserver/DataDistribution.actor.h | 2 +- fdbserver/DataDistributionTracker.actor.cpp | 24 ++++++++++++---- fdbserver/LogRouter.actor.cpp | 32 +++++++++++++++------ fdbserver/TLogServer.actor.cpp | 14 ++++++--- fdbserver/TagPartitionedLogSystem.actor.cpp | 19 ++++++++---- fdbserver/storageserver.actor.cpp | 10 +++++-- 8 files changed, 82 insertions(+), 30 deletions(-) diff --git a/fdbclient/FDBTypes.h b/fdbclient/FDBTypes.h index 233039d855..30953d2178 100644 --- a/fdbclient/FDBTypes.h +++ b/fdbclient/FDBTypes.h @@ -37,7 +37,7 @@ typedef StringRef ValueRef; typedef int64_t Generation; enum { - tagLocalitySpecial = -1, + tagLocalitySpecial = -1, // tag with this locality means it is invalidTag (id=0), txsTag (id=1), or cacheTag (id=2) tagLocalityLogRouter = -2, tagLocalityRemoteLog = -3, tagLocalityUpgraded = -4, @@ -45,10 +45,15 @@ enum { tagLocalityLogRouterMapped = -6, tagLocalityTxs = -7, tagLocalityInvalid = -99 -}; //The TLog and LogRouter require these number to be as compact as possible +}; // The TLog and LogRouter require these number to be as compact as possible #pragma pack(push, 1) struct Tag { + // if locality > 0, + // locality decides which DC id the tLog is in; + // id decides which SS owns the tag; id <-> SS mapping is in the system keyspace: serverTagKeys. + // if locality < 0, locality decides the type of tLog set: satellite, LR, or remote tLog, etc. + // id decides which tLog in the tLog type will be used. int8_t locality; uint16_t id; diff --git a/fdbclient/NativeAPI.actor.cpp b/fdbclient/NativeAPI.actor.cpp index 2412bcf69e..b6b8068a23 100644 --- a/fdbclient/NativeAPI.actor.cpp +++ b/fdbclient/NativeAPI.actor.cpp @@ -1230,6 +1230,8 @@ ACTOR Future< vector< pair> > > getKeyRangeLoca } } +// Get the SS locations for each shard in the 'keys' key-range; +// Returned vector size is the number of shards in the input keys key-range. template Future< vector< pair> > > getKeyRangeLocations( Database const& cx, KeyRange const& keys, int limit, bool reverse, F StorageServerInterface::*member, TransactionInfo const& info ) { ASSERT (!keys.empty()); diff --git a/fdbserver/DataDistribution.actor.h b/fdbserver/DataDistribution.actor.h index 7be5be3485..16223648ad 100644 --- a/fdbserver/DataDistribution.actor.h +++ b/fdbserver/DataDistribution.actor.h @@ -186,7 +186,7 @@ struct InitialDataDistribution : ReferenceCounted { struct ShardMetrics { StorageMetrics metrics; double lastLowBandwidthStartTime; - int shardCount; + int shardCount; // number of smaller shards whose metrics are aggregated in the ShardMetrics bool operator==(ShardMetrics const& rhs) const { return metrics == rhs.metrics && lastLowBandwidthStartTime == rhs.lastLowBandwidthStartTime && diff --git a/fdbserver/DataDistributionTracker.actor.cpp b/fdbserver/DataDistributionTracker.actor.cpp index e5d695f24f..2987ff881a 100644 --- a/fdbserver/DataDistributionTracker.actor.cpp +++ b/fdbserver/DataDistributionTracker.actor.cpp @@ -189,6 +189,7 @@ ACTOR Future trackShardBytes( loop { Transaction tr(self->cx); + // metrics.second is the number of key-ranges (i.e., shards) in the 'keys' key-range std::pair, int> metrics = wait( tr.waitStorageMetrics( keys, bounds.min, bounds.max, bounds.permittedError, CLIENT_KNOBS->STORAGE_METRICS_SHARD_LIMIT, shardCount ) ); if(metrics.first.present()) { BandwidthStatus newBandwidthStatus = getBandwidthStatus( metrics.first.get() ); @@ -486,6 +487,8 @@ Future shardMerger( shardsMerged++; auto shardBounds = getShardSizeBounds( merged, maxShardSize ); + // If we just recently get the current shard's metrics (i.e., less than DD_LOW_BANDWIDTH_DELAY ago), it means + // the shard's metric may not be stable yet. So we cannot continue merging in this direction. if( endingStats.bytes >= shardBounds.min.bytes || getBandwidthStatus( endingStats ) != BandwidthStatusLow || now() - lastLowBandwidthStartTime < SERVER_KNOBS->DD_LOW_BANDWIDTH_DELAY || @@ -516,13 +519,22 @@ Future shardMerger( //restarting shard tracker will derefenced values in the shard map, so make a copy KeyRange mergeRange = merged; + // OldKeys: Shards in the key range are merged as one shard defined by NewKeys; + // NewKeys: New key range after shards are merged; + // EndingSize: The new merged shard size in bytes; + // BatchedMerges: The number of shards merged. Each shard is defined in self->shards; + // LastLowBandwidthStartTime: When does a shard's bandwidth status becomes BandwidthStatusLow. If a shard's status + // becomes BandwidthStatusLow less than DD_LOW_BANDWIDTH_DELAY ago, the merging logic will stop at the shard; + // ShardCount: The number of non-splittable shards that are merged. Each shard is defined in self->shards may have + // more than 1 shards. + // Q: Is ShardCount's definition correct? TraceEvent("RelocateShardMergeMetrics", self->distributorId) - .detail("OldKeys", keys) - .detail("NewKeys", mergeRange) - .detail("EndingSize", endingStats.bytes) - .detail("BatchedMerges", shardsMerged) - .detail("LastLowBandwidthStartTime", lastLowBandwidthStartTime) - .detail("ShardCount", shardCount); + .detail("OldKeys", keys) + .detail("NewKeys", mergeRange) + .detail("EndingSize", endingStats.bytes) + .detail("BatchedMerges", shardsMerged) + .detail("LastLowBandwidthStartTime", lastLowBandwidthStartTime) + .detail("ShardCount", shardCount); if(mergeRange.begin < systemKeys.begin) { self->systemSizeEstimate -= systemBytes; diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index cdb1fe719c..f2ffbe6225 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -75,20 +75,22 @@ struct LogRouterData { UID dbgid; Reference>> logSystem; - NotifiedVersion version; - NotifiedVersion minPopped; + NotifiedVersion version; // The largest version at which the log router has peeked mutations from satellite tLog. + NotifiedVersion minPopped; // The minimum version among all tags that has been popped by remote tLogs. Version startVersion; - Version minKnownCommittedVersion; + Version minKnownCommittedVersion; // The minimum durable version among all LRs. + // A LR's durable version is the maximum version of mutations that have been + // peeked by remote tLog. Version poppedVersion; Deque>>> messageBlocks; Tag routerTag; bool allowPops; LogSet logSet; bool foundEpochEnd; - double waitForVersionTime = 0; - double maxWaitForVersionTime = 0; - double getMoreTime = 0; - double maxGetMoreTime = 0; + double waitForVersionTime = 0; // The total amount of time LR waits for remote tLog to peek and pop its data. + double maxWaitForVersionTime = 0; // The max one-instance wait time when LR must wait for remote tLog to pop data. + double getMoreTime = 0; // The total amount of time LR waits for satellite tLog's data to become available. + double maxGetMoreTime = 0; // The max wait time LR spent in a pull-data-request to satellite tLog. struct PeekTrackerData { std::map>> sequence_version; @@ -98,7 +100,9 @@ struct LogRouterData { std::map peekTracker; CounterCollection cc; - Counter getMoreCount, getMoreBlockedCount; + Counter getMoreCount; // Increase by 1 when LR tries to pull data from satellite tLog. + Counter + getMoreBlockedCount; // Increase by 1 if data is not available when LR tries to pull data from satellite tLog. Future logger; Reference eventCacheHolder; @@ -138,7 +142,7 @@ struct LogRouterData { eventCacheHolder = Reference( new EventCacheHolder(dbgid.shortString() + ".PeekLocation") ); - specialCounter(cc, "Version", [this](){ return this->version.get(); }); + specialCounter(cc, "Version", [this]() { return this->version.get(); }); specialCounter(cc, "MinPopped", [this](){ return this->minPopped.get(); }); specialCounter(cc, "FetchedVersions", [this](){ return std::max(0, std::min(SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS, this->version.get() - this->minPopped.get())); }); specialCounter(cc, "MinKnownCommittedVersion", [this](){ return this->minKnownCommittedVersion; }); @@ -207,8 +211,15 @@ ACTOR Future waitForVersion( LogRouterData *self, Version ver ) { // Since one set of log routers is created per generation of transaction logs, the gap caused by epoch end will be within MAX_VERSIONS_IN_FLIGHT of the log routers start version. state double startTime = now(); if(self->version.get() < self->startVersion) { + // Log router needs to wait for remote tLogs to process data, whose version is less than self->startVersion, + // before the log router can pull more data (i.e., data after self->startVersion) from satellite tLog; + // This prevents LR from getting OOM due to it pulls too much data from satellite tLog at once; + // Note: each commit writes data to both primary tLog and satellite tLog. Satellite tLog can be viewed as + // a part of primary tLogs. if(ver > self->startVersion) { self->version.set(self->startVersion); + // Wait for remote tLog to peek and pop from LR, + // so that LR's minPopped version can increase to self->startVersion wait(self->minPopped.whenAtLeast(self->version.get())); } self->waitForVersionTime += now() - startTime; @@ -235,6 +246,7 @@ ACTOR Future waitForVersion( LogRouterData *self, Version ver ) { return Void(); } +// Log router pull data from satellite tLog ACTOR Future pullAsyncData( LogRouterData *self ) { state Future dbInfoChange = Void(); state Reference r; @@ -256,6 +268,7 @@ ACTOR Future pullAsyncData( LogRouterData *self ) { state double startTime = now(); choose { when(wait( getMoreF ) ) { + self->getMoreTime += now() - startTime; self->maxGetMoreTime = std::max(self->maxGetMoreTime, now() - startTime); break; @@ -564,6 +577,7 @@ ACTOR Future logRouterCore( addActor.send( logRouterPeekMessages( &logRouterData, req ) ); } when( TLogPopRequest req = waitNext( interf.popMessages.getFuture() ) ) { + // Request from remote tLog to pop data from LR addActor.send( logRouterPop( &logRouterData, req ) ); } when (wait(error)) {} diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index 19c811cb98..bb986197c5 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -325,6 +325,7 @@ struct TLogData : NonCopyable { FlowLock concurrentLogRouterReads; FlowLock persistentDataCommitLock; + // fields used by snapshot based backup and restore: start bool ignorePopRequest; // ignore pop request from storage servers double ignorePopDeadline; // time until which the ignorePopRequest will be // honored @@ -336,6 +337,8 @@ struct TLogData : NonCopyable { std::map toBePopped; // map of Tag->Version for all the pops // that came when ignorePopRequest was set Reference> degraded; + // fields used by snapshot based backup and restore: end + std::vector tempTagMessages; TLogData(UID dbgid, UID workerID, IKeyValueStore* persistentData, IDiskQueue * persistentQueue, Reference> dbInfo, Reference> degraded, std::string folder) @@ -559,7 +562,8 @@ struct LogData : NonCopyable, public ReferenceCounted { specialCounter(cc, "PersistentDataDurableVersion", [this](){ return this->persistentDataDurableVersion; }); specialCounter(cc, "KnownCommittedVersion", [this](){ return this->knownCommittedVersion; }); specialCounter(cc, "QueuePoppedVersion", [this](){ return this->queuePoppedVersion; }); - specialCounter(cc, "MinPoppedTagVersion", [this](){ return this->minPoppedTagVersion; }); + specialCounter(cc, "MinPoppedTagVersion", + [this]() { return this->minPoppedTagVersion; }); // Q: why can it be 0 in some trace logs specialCounter(cc, "MinPoppedTagLocality", [this](){ return this->minPoppedTag.locality; }); specialCounter(cc, "MinPoppedTagId", [this](){ return this->minPoppedTag.id; }); specialCounter(cc, "SharedBytesInput", [tLogData](){ return tLogData->bytesInput; }); @@ -973,9 +977,10 @@ ACTOR Future updatePersistentData( TLogData* self, Reference logD return Void(); } -// This function (and updatePersistentData, which is called by this function) run at a low priority and can soak up all CPU resources. -// For this reason, they employ aggressive use of yields to avoid causing slow tasks that could introduce latencies for more important -// work (e.g. commits). +// This function (and updatePersistentData, which is called by this function) run at a low priority and can soak up all +// CPU resources. For this reason, they employ aggressive use of yields to avoid causing slow tasks that could introduce +// latencies for more important work (e.g. commits). +// Q: Can someone explain what this actor is doing? ACTOR Future updateStorage( TLogData* self ) { while(self->spillOrder.size() && !self->id_data.count(self->spillOrder.front())) { self->spillOrder.pop_front(); @@ -2235,6 +2240,7 @@ void removeLog( TLogData* self, Reference logData ) { } } +// tLog pull data from LR ACTOR Future pullAsyncData( TLogData* self, Reference logData, std::vector tags, Version beginVersion, Optional endVersion, bool poppedIsKnownCommitted ) { state Future dbInfoChange = Void(); state Reference r; diff --git a/fdbserver/TagPartitionedLogSystem.actor.cpp b/fdbserver/TagPartitionedLogSystem.actor.cpp index 65b1a2b2cf..2afe0b4ad7 100644 --- a/fdbserver/TagPartitionedLogSystem.actor.cpp +++ b/fdbserver/TagPartitionedLogSystem.actor.cpp @@ -160,7 +160,7 @@ OldTLogCoreData::OldTLogCoreData(const OldLogData& oldData) : struct TagPartitionedLogSystem : ILogSystem, ReferenceCounted { UID dbgid; LogSystemType logSystemType; - std::vector> tLogs; + std::vector> tLogs; // LogSets in different locations: primary, satellite, logRouter, or remote int expectedLogSets; int logRouterTags; int txsTags; @@ -168,7 +168,7 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCounted pseudoLocalities; - std::map pseudoLocalityPopVersion; + std::map pseudoLocalityPopVersion; // first:locality, second:popped version at the locality // new members Future rejoins; @@ -184,7 +184,9 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCounted recoveredAt; Version knownCommittedVersion; LocalityData locality; - std::map< std::pair, std::pair > outstandingPops; // For each currently running popFromLog actor, (log server #, tag)->popped version + std::map, std::pair> outstandingPops; + // For each currently running popFromLog actor, (logID, tag)->(max popped version, durableKnownCommittedVersion) + // Q: why do we need tag and durableKnownCommittedVersion? Optional>> addActor; ActorCollection popActors; std::vector oldLogData; @@ -245,11 +247,13 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCounted 0; } + // Return the max version that can be popped for the locality; Version popPseudoLocalityTag(int8_t locality, Version upTo) override { ASSERT(isPseudoLocality(locality)); auto& localityVersion = pseudoLocalityPopVersion[locality]; localityVersion = std::max(localityVersion, upTo); Version minVersion = localityVersion; + // Q: Why do we need to use the minimum popped version among all tags? for (const auto& it : pseudoLocalityPopVersion) { minVersion = std::min(minVersion, it.second); } @@ -1045,6 +1049,7 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCountedget().id(),tag)].first; if (prev < upTo) outstandingPops[std::make_pair(log->get().id(),tag)] = std::make_pair(upTo, durableKnownCommittedVersion); - if (prev == 0) - popActors.add( popFromLog( this, log, tag, 1.0 ) ); //< FIXME: knob + + if (prev == 0) { + popActors.add(popFromLog(this, log, tag, 1.0)); //< FIXME: knob // TODO: Knobify it + } } } } } + // pop tag from log up to the version defined in self->outstandingPops[].first ACTOR static Future popFromLog( TagPartitionedLogSystem* self, Reference>> log, Tag tag, double time ) { state Version last = 0; loop { wait( delay(time, TaskPriority::TLogPop) ); + // to: first is upto version, second is durableKnownComittedVersion state std::pair to = self->outstandingPops[ std::make_pair(log->get().id(),tag) ]; if (to.first <= last) { diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 413f0905ad..7125444e24 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -1622,7 +1622,7 @@ bool changeDurableVersion( StorageServer* data, Version desiredDurableVersion ) setDataDurableVersion(data->thisServerID, data->durableVersion.get()); if (checkFatalError.isReady()) checkFatalError.get(); - //TraceEvent("ForgotVersionsBefore", data->thisServerID).detail("Version", nextDurableVersion); + // TraceEvent("ForgotVersionsBefore", data->thisServerID).detail("Version", nextDurableVersion); // Q:Uncomment it? validate(data); return nextDurableVersion == desiredDurableVersion; @@ -2096,8 +2096,9 @@ ACTOR Future fetchKeys( StorageServer *data, AddingShard* shard ) { while (!shard->updates.empty() && shard->updates[0].version <= fetchVersion) shard->updates.pop_front(); //FIXME: remove when we no longer support upgrades from 5.X - if(debug_getRangeRetries >= 100) { + if (debug_getRangeRetries >= 100) { // Q: Is this the reason why fetch may fetch from primary data->cx->enableLocalityLoadBalance = false; + // TODO: Add SevWarnAlways to say it was disabled. } debug_getRangeRetries++; @@ -3014,7 +3015,10 @@ bool StorageServerDisk::makeVersionMutationsDurable( Version& prevStorageVersion void StorageServerDisk::makeVersionDurable( Version version ) { storage->set( KeyValueRef(persistVersion, BinaryWriter::toValue(version, Unversioned())) ); - //TraceEvent("MakeDurable", data->thisServerID).detail("FromVersion", prevStorageVersion).detail("ToVersion", version); + // Q: shall we enable it? How frequent will it be printed? + // TraceEvent("MakeDurable", data->thisServerID) + // .detail("FromVersion", prevStorageVersion) + // .detail("ToVersion", version); } void StorageServerDisk::changeLogProtocol(Version version, ProtocolVersion protocol) { From f2a6a6101e3a4c2e38695d8ee1b9581159e3e1a5 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Fri, 30 Oct 2020 13:43:39 -0700 Subject: [PATCH 042/317] Fix build error. --- fdbserver/LogRouter.actor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index 914780989c..a270c4c32c 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -149,7 +149,8 @@ struct LogRouterData { specialCounter(cc, "WaitForVersionMaxMS", [this](){ double val = this->maxWaitForVersionTime; this->maxWaitForVersionTime = 0; return 1000*val; }); specialCounter(cc, "GetMoreMS", [this](){ double val = this->getMoreTime; this->getMoreTime = 0; return 1000*val; }); specialCounter(cc, "GetMoreMaxMS", [this](){ double val = this->maxGetMoreTime; this->maxGetMoreTime = 0; return 1000*val; }); - specialCounter(cc, "PrimaryPeekLocation", [this]() { return this->primaryPeekLocation; }) logger = + specialCounter(cc, "PrimaryPeekLocation", [this]() { return this->primaryPeekLocation; }); + logger = traceCounters("LogRouterMetrics", dbgid, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "LogRouterMetrics"); } }; From af7e65110f2436340aadb9a189cbc5c5b9f2a862 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Fri, 30 Oct 2020 16:20:08 -0700 Subject: [PATCH 043/317] Allow the caller to decorate role metrics trace event with more details. --- fdbrpc/Stats.actor.cpp | 5 ++++- fdbrpc/Stats.h | 4 +++- fdbserver/LogRouter.actor.cpp | 8 +++++--- fdbserver/storageserver.actor.cpp | 4 +++- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/fdbrpc/Stats.actor.cpp b/fdbrpc/Stats.actor.cpp index 1af9181fa9..f9e33d8dfc 100644 --- a/fdbrpc/Stats.actor.cpp +++ b/fdbrpc/Stats.actor.cpp @@ -76,7 +76,9 @@ void CounterCollection::logToTraceEvent(TraceEvent &te) const { } } -ACTOR Future traceCounters(std::string traceEventName, UID traceEventID, double interval, CounterCollection* counters, std::string trackLatestName) { +ACTOR Future traceCounters(std::string traceEventName, UID traceEventID, double interval, + CounterCollection* counters, std::string trackLatestName, + std::function decorator) { wait(delay(0)); // Give an opportunity for all members used in special counters to be initialized for (ICounter* c : counters->counters) @@ -89,6 +91,7 @@ ACTOR Future traceCounters(std::string traceEventName, UID traceEventID, d te.detail("Elapsed", now() - last_interval); counters->logToTraceEvent(te); + decorator(te); if (!trackLatestName.empty()) { te.trackLatest(trackLatestName); diff --git a/fdbrpc/Stats.h b/fdbrpc/Stats.h index d1c0156f87..5822ab65a1 100644 --- a/fdbrpc/Stats.h +++ b/fdbrpc/Stats.h @@ -132,7 +132,9 @@ struct SpecialCounter : ICounter, FastAllocated>, NonCopyable template static void specialCounter(CounterCollection& collection, std::string const& name, F && f) { new SpecialCounter(collection, name, std::move(f)); } -Future traceCounters(std::string const& traceEventName, UID const& traceEventID, double const& interval, CounterCollection* const& counters, std::string const& trackLatestName = std::string()); +Future traceCounters(std::string const& traceEventName, UID const& traceEventID, double const& interval, + CounterCollection* const& counters, std::string const& trackLatestName = std::string(), + std::function const& decorator = [](TraceEvent& te) {}); class LatencyBands { public: diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index a270c4c32c..60fe3e4a1c 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -149,9 +149,11 @@ struct LogRouterData { specialCounter(cc, "WaitForVersionMaxMS", [this](){ double val = this->maxWaitForVersionTime; this->maxWaitForVersionTime = 0; return 1000*val; }); specialCounter(cc, "GetMoreMS", [this](){ double val = this->getMoreTime; this->getMoreTime = 0; return 1000*val; }); specialCounter(cc, "GetMoreMaxMS", [this](){ double val = this->maxGetMoreTime; this->maxGetMoreTime = 0; return 1000*val; }); - specialCounter(cc, "PrimaryPeekLocation", [this]() { return this->primaryPeekLocation; }); - logger = - traceCounters("LogRouterMetrics", dbgid, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "LogRouterMetrics"); + logger = traceCounters("LogRouterMetrics", dbgid, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, + "LogRouterMetrics", [this](TraceEvent& te) { + te.detail("PrimaryPeekLocation", this->primaryPeekLocation); + te.detail("RouterTag", this->routerTag) + }); } }; diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 413f0905ad..2f75cb42f8 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -3406,7 +3406,9 @@ ACTOR Future metricsCore( StorageServer* self, StorageServerInterface ssi wait( self->byteSampleRecovery ); - actors.add(traceCounters("StorageMetrics", self->thisServerID, SERVER_KNOBS->STORAGE_LOGGING_DELAY, &self->counters.cc, self->thisServerID.toString() + "/StorageMetrics")); + actors.add(traceCounters("StorageMetrics", self->thisServerID, SERVER_KNOBS->STORAGE_LOGGING_DELAY, + &self->counters.cc, self->thisServerID.toString() + "/StorageMetrics", + [self](TraceEvent& te) { te.detail("Tag", self->tag); })); loop { choose { From 566365accd79e64a38f0f6c7c3a2bf90cf8e5c1f Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Fri, 30 Oct 2020 16:28:05 -0700 Subject: [PATCH 044/317] Fix typo. --- fdbserver/LogRouter.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index 60fe3e4a1c..8846fdb0f4 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -152,7 +152,7 @@ struct LogRouterData { logger = traceCounters("LogRouterMetrics", dbgid, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "LogRouterMetrics", [this](TraceEvent& te) { te.detail("PrimaryPeekLocation", this->primaryPeekLocation); - te.detail("RouterTag", this->routerTag) + te.detail("RouterTag", this->routerTag); }); } }; From d302f6092548cc698eb031c4d5ed66d2f3fc5592 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Fri, 30 Oct 2020 17:06:22 -0700 Subject: [PATCH 045/317] Fix build error. --- fdbserver/LogRouter.actor.cpp | 2 +- fdbserver/storageserver.actor.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index 8846fdb0f4..01cdd721af 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -152,7 +152,7 @@ struct LogRouterData { logger = traceCounters("LogRouterMetrics", dbgid, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "LogRouterMetrics", [this](TraceEvent& te) { te.detail("PrimaryPeekLocation", this->primaryPeekLocation); - te.detail("RouterTag", this->routerTag); + te.detail("RouterTag", this->routerTag.toString()); }); } }; diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 2f75cb42f8..14c629b85a 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -3406,9 +3406,10 @@ ACTOR Future metricsCore( StorageServer* self, StorageServerInterface ssi wait( self->byteSampleRecovery ); + Tag tag = self->tag; actors.add(traceCounters("StorageMetrics", self->thisServerID, SERVER_KNOBS->STORAGE_LOGGING_DELAY, &self->counters.cc, self->thisServerID.toString() + "/StorageMetrics", - [self](TraceEvent& te) { te.detail("Tag", self->tag); })); + [tag](TraceEvent& te) { te.detail("Tag", tag.toString()); })); loop { choose { From 46150d22c3f5ec478b1a61c595f928c935d1276e Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Sun, 1 Nov 2020 11:24:23 -0800 Subject: [PATCH 046/317] Attach generation(recovery count) to TLog metrics and LogRouter metrics. --- fdbserver/LogRouter.actor.cpp | 11 ++++++++--- fdbserver/TLogServer.actor.cpp | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index 01cdd721af..d8c370f93c 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -90,6 +90,7 @@ struct LogRouterData { double maxWaitForVersionTime = 0; double getMoreTime = 0; double maxGetMoreTime = 0; + uint64_t generation = -1; struct PeekTrackerData { std::map>> sequence_version; @@ -120,9 +121,12 @@ struct LogRouterData { return newTagData; } - LogRouterData(UID dbgid, const InitializeLogRouterRequest& req) : dbgid(dbgid), routerTag(req.routerTag), logSystem(new AsyncVar>()), - version(req.startVersion-1), minPopped(0), startVersion(req.startVersion), allowPops(false), minKnownCommittedVersion(0), poppedVersion(0), foundEpochEnd(false), - cc("LogRouter", dbgid.toString()), getMoreCount("GetMoreCount", cc), getMoreBlockedCount("GetMoreBlockedCount", cc) { + LogRouterData(UID dbgid, const InitializeLogRouterRequest& req) + : dbgid(dbgid), routerTag(req.routerTag), logSystem(new AsyncVar>()), + version(req.startVersion - 1), minPopped(0), generation(req.recoveryCount), startVersion(req.startVersion), + allowPops(false), minKnownCommittedVersion(0), poppedVersion(0), foundEpochEnd(false), + cc("LogRouter", dbgid.toString()), getMoreCount("GetMoreCount", cc), + getMoreBlockedCount("GetMoreBlockedCount", cc) { //setup just enough of a logSet to be able to call getPushLocations logSet.logServers.resize(req.tLogLocalities.size()); logSet.tLogPolicy = req.tLogPolicy; @@ -149,6 +153,7 @@ struct LogRouterData { specialCounter(cc, "WaitForVersionMaxMS", [this](){ double val = this->maxWaitForVersionTime; this->maxWaitForVersionTime = 0; return 1000*val; }); specialCounter(cc, "GetMoreMS", [this](){ double val = this->getMoreTime; this->getMoreTime = 0; return 1000*val; }); specialCounter(cc, "GetMoreMaxMS", [this](){ double val = this->maxGetMoreTime; this->maxGetMoreTime = 0; return 1000*val; }); + specialCounter(cc, "Geneartion", [this]() { return this->generation; }); logger = traceCounters("LogRouterMetrics", dbgid, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "LogRouterMetrics", [this](TraceEvent& te) { te.detail("PrimaryPeekLocation", this->primaryPeekLocation); diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index 19c811cb98..9a663f02b7 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -576,6 +576,7 @@ struct LogData : NonCopyable, public ReferenceCounted { specialCounter(cc, "QueueDiskBytesTotal", [tLogData](){ return tLogData->rawPersistentQueue->getStorageBytes().total; }); specialCounter(cc, "PeekMemoryReserved", [tLogData]() { return tLogData->peekMemoryLimiter.activePermits(); }); specialCounter(cc, "PeekMemoryRequestsStalled", [tLogData]() { return tLogData->peekMemoryLimiter.waiters(); }); + specialCounter(cc, "Geneartion", [this]() { return this->recoveryCount; }); } ~LogData() { From 1664e2ff7fd5e3bd4097b9604bb8b04ec5c71e4b Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Sun, 1 Nov 2020 21:22:23 -0800 Subject: [PATCH 047/317] Add more comments and questions to LR tLog and loadbalance --- fdbclient/FDBTypes.h | 4 ++-- fdbrpc/LoadBalance.actor.h | 12 +++++------- fdbserver/LogRouter.actor.cpp | 5 ++++- fdbserver/TLogServer.actor.cpp | 4 +++- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/fdbclient/FDBTypes.h b/fdbclient/FDBTypes.h index 30953d2178..823d82ad22 100644 --- a/fdbclient/FDBTypes.h +++ b/fdbclient/FDBTypes.h @@ -39,10 +39,10 @@ typedef int64_t Generation; enum { tagLocalitySpecial = -1, // tag with this locality means it is invalidTag (id=0), txsTag (id=1), or cacheTag (id=2) tagLocalityLogRouter = -2, - tagLocalityRemoteLog = -3, + tagLocalityRemoteLog = -3, // Q: definition? tagLocalityUpgraded = -4, tagLocalitySatellite = -5, - tagLocalityLogRouterMapped = -6, + tagLocalityLogRouterMapped = -6, // Q: definition? I guess it is used by pseudo tags tagLocalityTxs = -7, tagLocalityInvalid = -99 }; // The TLog and LogRouter require these number to be as compact as possible diff --git a/fdbrpc/LoadBalance.actor.h b/fdbrpc/LoadBalance.actor.h index bd485c40ce..f156d8c791 100644 --- a/fdbrpc/LoadBalance.actor.h +++ b/fdbrpc/LoadBalance.actor.h @@ -171,13 +171,11 @@ void addLaggingRequest(Future> reply, Promise requestFinis // failMon's information for load balancing and avoiding failed servers // If ALL the servers are failed and the list of servers is not fresh, throws an exception to let the caller refresh the list of servers ACTOR template -Future< REPLY_TYPE(Request) > loadBalance( - Reference> alternatives, - RequestStream Interface::* channel, - Request request = Request(), - TaskPriority taskID = TaskPriority::DefaultPromiseEndpoint, - bool atMostOnce = false, // if true, throws request_maybe_delivered() instead of retrying automatically - QueueModel* model = NULL) +Future loadBalance( + Reference> alternatives, RequestStream Interface::*channel, + Request request = Request(), TaskPriority taskID = TaskPriority::DefaultPromiseEndpoint, + bool atMostOnce = false, // if true, throws request_maybe_delivered() instead of retrying automatically + QueueModel* model = NULL) // Q: What does the function do differently when model = NULL? { state Future> firstRequest; state Optional firstRequestEndpoint; diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index f2ffbe6225..d610551dc3 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -86,7 +86,7 @@ struct LogRouterData { Tag routerTag; bool allowPops; LogSet logSet; - bool foundEpochEnd; + bool foundEpochEnd; // Cluster is not fully recovered yet. LR has to handle recovery double waitForVersionTime = 0; // The total amount of time LR waits for remote tLog to peek and pop its data. double maxWaitForVersionTime = 0; // The max one-instance wait time when LR must wait for remote tLog to pop data. double getMoreTime = 0; // The total amount of time LR waits for satellite tLog's data to become available. @@ -142,8 +142,10 @@ struct LogRouterData { eventCacheHolder = Reference( new EventCacheHolder(dbgid.shortString() + ".PeekLocation") ); + // FetchedVersions: How many version of mutations buffered at LR and have not been popped by remote tLogs specialCounter(cc, "Version", [this]() { return this->version.get(); }); specialCounter(cc, "MinPopped", [this](){ return this->minPopped.get(); }); + // TODO: Add minPopped locality and minPoppedId, similar as tLog Metrics specialCounter(cc, "FetchedVersions", [this](){ return std::max(0, std::min(SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS, this->version.get() - this->minPopped.get())); }); specialCounter(cc, "MinKnownCommittedVersion", [this](){ return this->minKnownCommittedVersion; }); specialCounter(cc, "PoppedVersion", [this](){ return this->poppedVersion; }); @@ -227,6 +229,7 @@ ACTOR Future waitForVersion( LogRouterData *self, Version ver ) { return Void(); } if(!self->foundEpochEnd) { + // Why it only needs to wait for (ver - SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS), instead of ver? wait(self->minPopped.whenAtLeast(std::min(self->version.get(), ver - SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS))); } else { while(self->minPopped.get() + SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS < ver) { diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index bb986197c5..ddd55c5a5f 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -557,7 +557,8 @@ struct LogData : NonCopyable, public ReferenceCounted { queueCommittedVersion.initMetric(LiteralStringRef("TLog.QueueCommittedVersion"), cc.id); specialCounter(cc, "Version", [this](){ return this->version.get(); }); - specialCounter(cc, "QueueCommittedVersion", [this](){ return this->queueCommittedVersion.get(); }); + specialCounter(cc, "QueueCommittedVersion", + [this]() { return this->queueCommittedVersion.get(); }); // Q: What is this? specialCounter(cc, "PersistentDataVersion", [this](){ return this->persistentDataVersion; }); specialCounter(cc, "PersistentDataDurableVersion", [this](){ return this->persistentDataDurableVersion; }); specialCounter(cc, "KnownCommittedVersion", [this](){ return this->knownCommittedVersion; }); @@ -763,6 +764,7 @@ ACTOR Future updatePoppedLocation( TLogData* self, Reference logD return Void(); } +// Q: pop disk queue to what? ACTOR Future popDiskQueue( TLogData* self, Reference logData ) { if (!logData->initialized) return Void(); From 32c87bbb3356050fa0e5afc3bb95f48dae364198 Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Sun, 1 Nov 2020 12:15:39 -0800 Subject: [PATCH 048/317] Lightweight, power of two spaced histogram implementation + automatic reporting --- fdbrpc/sim2.actor.cpp | 2 - fdbrpc/simulator.h | 2 + fdbserver/workloads/KVStoreTest.actor.cpp | 14 +-- flow/CMakeLists.txt | 2 + flow/Histogram.cpp | 125 ++++++++++++++++++++++ flow/Histogram.h | 96 +++++++++++++++++ flow/SystemMonitor.cpp | 2 + flow/Trace.cpp | 15 +++ 8 files changed, 249 insertions(+), 9 deletions(-) create mode 100644 flow/Histogram.cpp create mode 100644 flow/Histogram.h diff --git a/fdbrpc/sim2.actor.cpp b/fdbrpc/sim2.actor.cpp index e4acc3e5df..4688e223ae 100644 --- a/fdbrpc/sim2.actor.cpp +++ b/fdbrpc/sim2.actor.cpp @@ -102,8 +102,6 @@ bool onlyBeforeSimulatorInit() { const UID TOKEN_ENDPOINT_NOT_FOUND(-1, -1); -ISimulator* g_pSimulator = 0; -thread_local ISimulator::ProcessInfo* ISimulator::currentProcess = 0; int openCount = 0; struct SimClogging { diff --git a/fdbrpc/simulator.h b/fdbrpc/simulator.h index 9d0a153a75..879224827c 100644 --- a/fdbrpc/simulator.h +++ b/fdbrpc/simulator.h @@ -23,6 +23,7 @@ #pragma once #include "flow/flow.h" +#include "flow/Histogram.h" #include "fdbrpc/FailureMonitor.h" #include "fdbrpc/Locality.h" #include "fdbrpc/IAsyncFile.h" @@ -54,6 +55,7 @@ public: LocalityData locality; ProcessClass startingClass; TDMetricCollection tdmetrics; + HistogramRegistry histograms; std::map> listenerMap; bool failed; bool excluded; diff --git a/fdbserver/workloads/KVStoreTest.actor.cpp b/fdbserver/workloads/KVStoreTest.actor.cpp index 749b46861a..0aa34fdff3 100755 --- a/fdbserver/workloads/KVStoreTest.actor.cpp +++ b/fdbserver/workloads/KVStoreTest.actor.cpp @@ -28,9 +28,9 @@ extern IKeyValueStore *makeDummyKeyValueStore(); template -class Histogram { +class TestHistogram { public: - Histogram(int minSamples = 100) : minSamples(minSamples) { reset(); } + TestHistogram(int minSamples = 100) : minSamples(minSamples) { reset(); } void reset(){ N = 0; @@ -153,7 +153,7 @@ struct KVTest { } }; -ACTOR Future testKVRead( KVTest* test, Key key, Histogram* latency, PerfIntCounter* count ) { +ACTOR Future testKVRead( KVTest* test, Key key, TestHistogram* latency, PerfIntCounter* count ) { //state Version s1 = test->lastCommit; state Version s2 = test->lastDurable; @@ -171,7 +171,7 @@ ACTOR Future testKVRead( KVTest* test, Key key, Histogram* latency, return Void(); } -ACTOR Future testKVReadSaturation( KVTest* test, Histogram* latency, PerfIntCounter* count ) { +ACTOR Future testKVReadSaturation( KVTest* test, TestHistogram* latency, PerfIntCounter* count ) { while (true) { state double begin = timer(); Optional val = wait( test->store->readValue(test->randomKey()) ); @@ -181,7 +181,7 @@ ACTOR Future testKVReadSaturation( KVTest* test, Histogram* latency } } -ACTOR Future testKVCommit( KVTest* test, Histogram* latency, PerfIntCounter* count ) { +ACTOR Future testKVCommit( KVTest* test, TestHistogram* latency, PerfIntCounter* count ) { state Version v = test->lastSet; test->lastCommit = v; state double begin = timer(); @@ -202,7 +202,7 @@ struct KVStoreTestWorkload : TestWorkload { bool doSetup, doClear, doCount; std::string filename; PerfIntCounter reads, sets, commits; - Histogram readLatency, commitLatency; + TestHistogram readLatency, commitLatency; double setupTook; std::string storeType; @@ -232,7 +232,7 @@ struct KVStoreTestWorkload : TestWorkload { return Void(); } virtual Future check( Database const& cx ) { return true; } - void metricsFromHistogram(vector& m, std::string name, Histogram& h){ + void metricsFromHistogram(vector& m, std::string name, TestHistogram& h){ m.push_back( PerfMetric( "Min " + name, 1000.0 * h.min(), true) ); m.push_back( PerfMetric( "Average " + name, 1000.0 * h.mean(), true) ); m.push_back( PerfMetric( "Median " + name, 1000.0 * h.medianEstimate(), true) ); diff --git a/flow/CMakeLists.txt b/flow/CMakeLists.txt index 11e43f0389..9d48a78c36 100644 --- a/flow/CMakeLists.txt +++ b/flow/CMakeLists.txt @@ -24,6 +24,8 @@ set(FLOW_SRCS FileTraceLogWriter.h Hash3.c Hash3.h + Histogram.cpp + Histogram.h IDispatched.h IRandom.h IThreadPool.cpp diff --git a/flow/Histogram.cpp b/flow/Histogram.cpp new file mode 100644 index 0000000000..7ece6de469 --- /dev/null +++ b/flow/Histogram.cpp @@ -0,0 +1,125 @@ +/* + * Histogram.cpp + * + * This source file is part of the FoundationDB open source project + * + * Copyright 2013-2018 Apple Inc. and the FoundationDB project authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +// TODO: remove dependency on fdbrpc. + +// we need to be able to check if we're in simulation so that the histograms are properly +// scoped to the right "machine". +// either we pull g_simulator into flow, or flow (and the I/O path) will be unable to log performance +// metrics. +#include + +// pull in some global pointers too: These types are implemented in fdbrpc/sim2.actor.cpp, which is not available here. Yuck. +// If you're not using the simulator, these will remain null, and all should be well. + +// TODO: create a execution context abstraction that allows independent flow instances within a process. +// The simulator would be the main user of it, and histogram would be the only other user (for now). +ISimulator* g_pSimulator = nullptr; +thread_local ISimulator::ProcessInfo* ISimulator::currentProcess = nullptr; + +// Fallback registry when we're not in simulation -- if we had execution contexts we wouldn't need to check if +// we have a simulated contex here; we'd just use the current context regardless. +static HistogramRegistry * globalHistograms = nullptr; + +HistogramRegistry & GetHistogramRegistry() { + ISimulator::ProcessInfo * info = g_simulator.getCurrentProcess(); + + if (info) { + // in simulator; scope histograms to simulated process + return info->histograms; + } + // avoid link order issues where the registry hasn't been initialized, but we're + // instantiating a histogram + if (globalHistograms == nullptr) { + globalHistograms = new HistogramRegistry(); + } + return *globalHistograms; +} + +void HistogramRegistry::registerHistogram(Histogram * h) { + if (histograms.find(h->name()) != histograms.end()) { + TraceEvent(SevError, "HistogramDoubleRegistered") + .detail("group", h->group) + .detail("op", h->op); + ASSERT(false); + } + histograms.insert(std::pair(h->name(), h)); +} + +void HistogramRegistry::unregisterHistogram(Histogram * h) { + if (histograms.find(h->name()) == histograms.end()) { + TraceEvent(SevError, "HistogramNotRegistered") + .detail("group", h->group) + .detail("op", h->op); + } + ASSERT_EQ(histograms.erase(h->name()), 1); +} + +void HistogramRegistry::logReport() { + for (auto & i : histograms) { + i.second->writeToLog(); + i.second->clear(); + } +} + +void Histogram::writeToLog() { + bool active = false; + for (uint32_t i = 0; i < 32; i++) { + if (buckets[i]) { + active = true; + break; + } + } + if (!active) { + return ; + } + + TraceEvent e(SevInfo, "Histogram"); + e.detail("Group", group).detail("Op", op); + for (uint32_t i = 0; i < 32; i++) { + if (buckets[i]) { + switch(unit) { + case Unit::microseconds: + { + uint32_t usec = ((uint32_t)1)< +#include + +#ifdef _WIN32 +#include +#pragma intrinsic(_BitScanReverse) +#endif + +class Histogram; + +class HistogramRegistry { + public: + void registerHistogram(Histogram * h); + void unregisterHistogram(Histogram * h); + void logReport(); + private: + std::map histograms; +}; + +// TODO: This should be scoped properly for simulation (instead of just having all the "machines" share one histogram namespace) +HistogramRegistry & GetHistogramRegistry(); + +class Histogram { +public: + enum class Unit { + microseconds, + bytes + }; + + Histogram(char const * group, char const * op, Unit unit) : group(group), op(op), unit(unit), registry(GetHistogramRegistry()) { + clear(); + registry.registerHistogram(this); + } + + ~Histogram() { + registry.unregisterHistogram(this); + } + + inline void sample(uint32_t sample) { +#ifdef _WIN32 + unsigned long index; + buckets[_BitScanReverse(&index, sample) ? index : 0]++; +#else + buckets[sample ? (31 - __builtin_clz(sample)) : 0]++; +#endif + } + + inline void sampleSeconds(double delta) { + sample((uint32_t)(delta * 1000000)); // convert to microseconds and truncate to integer + } + + void clear() { + for (uint32_t i : buckets) { + i = 0; + } + } + void writeToLog(); + + std::string name() { + return group + ":" + op; + } + + std::string const group; + std::string const op; + Unit const unit; + HistogramRegistry & registry; + +private: + uint32_t buckets[32]; +}; + +#endif // FLOW_HISTOGRAM_H \ No newline at end of file diff --git a/flow/SystemMonitor.cpp b/flow/SystemMonitor.cpp index c3b5cb8051..677d2a262a 100644 --- a/flow/SystemMonitor.cpp +++ b/flow/SystemMonitor.cpp @@ -19,6 +19,7 @@ */ #include "flow/flow.h" +#include "flow/Histogram.h" #include "flow/Platform.h" #include "flow/TDMetric.actor.h" #include "flow/SystemMonitor.h" @@ -59,6 +60,7 @@ SystemStatistics customSystemMonitor(std::string eventName, StatisticsState *sta netData.init(); if (!DEBUG_DETERMINISM && currentStats.initialized) { { + GetHistogramRegistry().logReport(); TraceEvent(eventName.c_str()) .detail("Elapsed", currentStats.elapsed) .detail("CPUSeconds", currentStats.processCPUSeconds) diff --git a/flow/Trace.cpp b/flow/Trace.cpp index de93602da8..ec46772eeb 100644 --- a/flow/Trace.cpp +++ b/flow/Trace.cpp @@ -676,6 +676,13 @@ TraceEvent::TraceEvent(TraceEvent &&ev) { tmpEventMetric = ev.tmpEventMetric; trackingKey = ev.trackingKey; type = ev.type; + timeIndex = ev.timeIndex; + + for (int i = 0; i < 5; i++) { + eventCounts[i] = ev.eventCounts[i]; + } + + networkThread = ev.networkThread; ev.initialized = true; ev.enabled = false; @@ -684,6 +691,7 @@ TraceEvent::TraceEvent(TraceEvent &&ev) { } TraceEvent& TraceEvent::operator=(TraceEvent &&ev) { + // Note: still broken if ev and this are the same memory address. enabled = ev.enabled; err = ev.err; fields = std::move(ev.fields); @@ -696,6 +704,13 @@ TraceEvent& TraceEvent::operator=(TraceEvent &&ev) { tmpEventMetric = ev.tmpEventMetric; trackingKey = ev.trackingKey; type = ev.type; + timeIndex = ev.timeIndex; + + for (int i = 0; i < 5; i++) { + eventCounts[i] = ev.eventCounts[i]; + } + + networkThread = ev.networkThread; ev.initialized = true; ev.enabled = false; From cb004b3b22b91186de4d9119304429ee36f2bdf3 Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Mon, 2 Nov 2020 11:09:45 -0800 Subject: [PATCH 049/317] Address pull request comments --- flow/Histogram.cpp | 16 +++------------- flow/Histogram.h | 6 ++++-- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/flow/Histogram.cpp b/flow/Histogram.cpp index 7ece6de469..f3efd074c9 100644 --- a/flow/Histogram.cpp +++ b/flow/Histogram.cpp @@ -71,7 +71,7 @@ void HistogramRegistry::unregisterHistogram(Histogram * h) { .detail("group", h->group) .detail("op", h->op); } - ASSERT_EQ(histograms.erase(h->name()), 1); + ASSERT(histograms.erase(h->name()) == 1); } void HistogramRegistry::logReport() { @@ -101,21 +101,11 @@ void Histogram::writeToLog() { case Unit::microseconds: { uint32_t usec = ((uint32_t)1)< + #include #include @@ -51,7 +53,7 @@ public: bytes }; - Histogram(char const * group, char const * op, Unit unit) : group(group), op(op), unit(unit), registry(GetHistogramRegistry()) { + Histogram(StringRef group, StringRef op, Unit unit) : group(group.toString()), op(op.toString()), unit(unit), registry(GetHistogramRegistry()) { clear(); registry.registerHistogram(this); } @@ -74,7 +76,7 @@ public: } void clear() { - for (uint32_t i : buckets) { + for (uint32_t & i : buckets) { i = 0; } } From 7c21df59fba10af2c108a0ca3cc46a40810ed58e Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Fri, 30 Oct 2020 18:19:30 +0000 Subject: [PATCH 050/317] Attempt to suggest compactions after commit finishes --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index 89bcf5fde9..f6ed28b7e7 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -93,12 +93,31 @@ struct RocksDBKeyValueStore : IKeyValueStore { } } + struct DeleteVisitor : public rocksdb::WriteBatch::Handler { + VectorRef& deletes; + Arena& arena; + + DeleteVisitor(VectorRef& deletes, Arena& arena) : deletes(deletes), arena(arena) {} + + rocksdb::Status DeleteRangeCF(uint32_t /*column_family_id*/, const rocksdb::Slice& begin, + const rocksdb::Slice& end) override { + KeyRangeRef kr(toStringRef(begin), toStringRef(end)); + deletes.push_back_deep(arena, kr); + return rocksdb::Status::OK(); + } + }; + struct CommitAction : TypedAction { std::unique_ptr batchToCommit; ThreadReturnPromise done; double getTimeEstimate() override { return SERVER_KNOBS->COMMIT_TIME_ESTIMATE; } }; void action(CommitAction& a) { + Standalone> deletes; + DeleteVisitor dv(deletes, deletes.arena()); + ASSERT(a.batchToCommit->Iterate(&dv).ok()); + // If there are any range deletes, we should have added them to be deleted. + ASSERT(!deletes.empty() || !a.batchToCommit->HasDeleteRange()); rocksdb::WriteOptions options; options.sync = !SERVER_KNOBS->ROCKSDB_UNSAFE_AUTO_FSYNC; auto s = db->Write(options, a.batchToCommit.get()); @@ -107,6 +126,11 @@ struct RocksDBKeyValueStore : IKeyValueStore { a.done.sendError(statusToError(s)); } else { a.done.send(Void()); + for (const auto& keyRange : deletes) { + auto begin = toSlice(keyRange.begin); + auto end = toSlice(keyRange.end); + ASSERT(db->SuggestCompactRange(db->DefaultColumnFamily(), &begin, &end).ok()); + } } } From 0ba4e8d64b1b0ec7c026f48743b45a625b4a436f Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Mon, 2 Nov 2020 14:17:56 -0800 Subject: [PATCH 051/317] Fix make build. --- flow/flow.vcxproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/flow/flow.vcxproj b/flow/flow.vcxproj index 5f168c4d52..aa1461d570 100644 --- a/flow/flow.vcxproj +++ b/flow/flow.vcxproj @@ -22,11 +22,13 @@ + + From 22b16302c33391d16c07d32515f4b89b508c8beb Mon Sep 17 00:00:00 2001 From: Vishesh Yadav Date: Mon, 2 Nov 2020 14:59:17 -0800 Subject: [PATCH 052/317] Make ConnectionReset logs easier to query #3977 All TraceLogs that are related to ConnectionReset should be prefixed with ConnectionReset. This should make it easy to query and aggregate by address and role. --- fdbserver/LogSystemPeekCursor.actor.cpp | 16 ++++++++++++++-- fdbserver/MasterProxyServer.actor.cpp | 14 +++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/fdbserver/LogSystemPeekCursor.actor.cpp b/fdbserver/LogSystemPeekCursor.actor.cpp index 1e24cac5fd..abbd35a289 100644 --- a/fdbserver/LogSystemPeekCursor.actor.cpp +++ b/fdbserver/LogSystemPeekCursor.actor.cpp @@ -138,8 +138,20 @@ ACTOR Future resetChecker( ILogSystem::ServerPeekCursor* self, NetworkAddr self->unknownReplies = 0; self->fastReplies = 0; wait(delay(SERVER_KNOBS->PEEK_STATS_INTERVAL)); - TraceEvent("SlowPeekStats").detail("PeerAddress", addr).detail("SlowReplies", self->slowReplies).detail("FastReplies", self->fastReplies).detail("UnknownReplies", self->unknownReplies); - if(self->slowReplies >= SERVER_KNOBS->PEEK_STATS_SLOW_AMOUNT && self->slowReplies/double(self->slowReplies+self->fastReplies) >= SERVER_KNOBS->PEEK_STATS_SLOW_RATIO) { + TraceEvent("SlowPeekStats") + .detail("PeerAddress", addr) + .detail("SlowReplies", self->slowReplies) + .detail("FastReplies", self->fastReplies) + .detail("UnknownReplies", self->unknownReplies); + + if (self->slowReplies >= SERVER_KNOBS->PEEK_STATS_SLOW_AMOUNT && + self->slowReplies / double(self->slowReplies + self->fastReplies) >= SERVER_KNOBS->PEEK_STATS_SLOW_RATIO) { + + TraceEvent("ConnectionResetSlowPeek") + .detail("PeerAddress", addr) + .detail("SlowReplies", self->slowReplies) + .detail("FastReplies", self->fastReplies) + .detail("UnknownReplies", self->unknownReplies); FlowTransport::transport().resetConnection(addr); self->lastReset = now(); } diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 52f0b9fe6f..d935926b65 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -567,7 +567,10 @@ ACTOR Future commitBatch( g_traceBatch.addEvent("CommitDebug", debugID.get().first(), "MasterProxyServer.commitBatch.Before"); if(localBatchNumber-self->latestLocalCommitBatchResolving.get()>SERVER_KNOBS->RESET_MASTER_BATCHES && now()-self->lastMasterReset>SERVER_KNOBS->RESET_MASTER_DELAY) { - TraceEvent(SevWarnAlways, "ResetMasterNetwork").detail("CurrentBatch", localBatchNumber).detail("InProcessBatch", self->latestLocalCommitBatchResolving.get()); + TraceEvent(SevWarnAlways, "ConnectionResetMaster") + .detail("PeerAddress", self->master.address()) + .detail("CurrentBatch", localBatchNumber) + .detail("InProcessBatch", self->latestLocalCommitBatchResolving.get()); FlowTransport::transport().resetConnection(self->master.address()); self->lastMasterReset=now(); } @@ -628,9 +631,14 @@ ACTOR Future commitBatch( state vector> transactionResolverMap = std::move( requests.transactionResolverMap ); state Future releaseFuture = releaseResolvingAfter(self, releaseDelay, localBatchNumber); - if(localBatchNumber-self->latestLocalCommitBatchLogging.get()>SERVER_KNOBS->RESET_RESOLVER_BATCHES && now()-self->lastResolverReset>SERVER_KNOBS->RESET_RESOLVER_DELAY) { - TraceEvent(SevWarnAlways, "ResetResolverNetwork").detail("CurrentBatch", localBatchNumber).detail("InProcessBatch", self->latestLocalCommitBatchLogging.get()); + if (localBatchNumber - self->latestLocalCommitBatchLogging.get() > SERVER_KNOBS->RESET_RESOLVER_BATCHES && + now() - self->lastResolverReset > SERVER_KNOBS->RESET_RESOLVER_DELAY) { + for (int r = 0; rresolvers.size(); r++) { + TraceEvent(SevWarnAlways, "ConnectionResetResolver") + .detail("PeerAddr", self->resolvers[r].address()) + .detail("CurrentBatch", localBatchNumber) + .detail("InProcessBatch", self->latestLocalCommitBatchLogging.get()); FlowTransport::transport().resetConnection(self->resolvers[r].address()); } self->lastResolverReset=now(); From 7bdcb01bdf46cf126d6a34f18713964d311e5954 Mon Sep 17 00:00:00 2001 From: Vishesh Yadav Date: Mon, 2 Nov 2020 15:59:38 -0800 Subject: [PATCH 053/317] FlowTransport: Count number of incoming/outgoing/failed connections with logging --- fdbrpc/FlowTransport.actor.cpp | 34 ++++++++++++++++++++++++---------- fdbrpc/FlowTransport.h | 11 +++++++++-- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/fdbrpc/FlowTransport.actor.cpp b/fdbrpc/FlowTransport.actor.cpp index ca96f3a337..1e18132bd6 100644 --- a/fdbrpc/FlowTransport.actor.cpp +++ b/fdbrpc/FlowTransport.actor.cpp @@ -220,17 +220,29 @@ ACTOR Future pingLatencyLogger(TransportData* self) { if(!peer) { TraceEvent(SevWarnAlways, "MissingNetworkAddress").suppressFor(10.0).detail("PeerAddr", lastAddress); } + if (peer->lastLoggedTime <= 0.0) { + peer->lastLoggedTime = peer->lastConnectTime; + } + if(peer && peer->pingLatencies.getPopulationSize() >= 10) { TraceEvent("PingLatency") - .detail("PeerAddr", lastAddress) - .detail("MinLatency", peer->pingLatencies.min()) - .detail("MaxLatency", peer->pingLatencies.max()) - .detail("MeanLatency", peer->pingLatencies.mean()) - .detail("MedianLatency", peer->pingLatencies.median()) - .detail("P90Latency", peer->pingLatencies.percentile(0.90)) - .detail("Count", peer->pingLatencies.getPopulationSize()) - .detail("BytesReceived", peer->bytesReceived - peer->lastLoggedBytesReceived) - .detail("BytesSent", peer->bytesSent - peer->lastLoggedBytesSent); + .detail("Elapsed", now() - peer->lastLoggedTime) + .detail("PeerAddr", lastAddress) + .detail("MinLatency", peer->pingLatencies.min()) + .detail("MaxLatency", peer->pingLatencies.max()) + .detail("MeanLatency", peer->pingLatencies.mean()) + .detail("MedianLatency", peer->pingLatencies.median()) + .detail("P90Latency", peer->pingLatencies.percentile(0.90)) + .detail("Count", peer->pingLatencies.getPopulationSize()) + .detail("BytesReceived", peer->bytesReceived - peer->lastLoggedBytesReceived) + .detail("BytesSent", peer->bytesSent - peer->lastLoggedBytesSent) + .detail("ConnectOutgoingCount", peer->connectOutgoingCount) + .detail("ConnectIncomingCount", peer->connectIncomingCount) + .detail("ConnectFailedCount", peer->connectFailedCount); + peer->lastLoggedTime = now(); + peer->connectOutgoingCount = 0; + peer->connectIncomingCount = 0; + peer->connectFailedCount = 0; peer->pingLatencies.clear(); peer->lastLoggedBytesReceived = peer->bytesReceived; peer->lastLoggedBytesSent = peer->bytesSent; @@ -476,7 +488,7 @@ ACTOR Future connectionKeeper( Reference self, std::max(0.0, self->lastConnectTime + self->reconnectionDelay - now()))); // Don't connect() to the same peer more than once per 2 sec self->lastConnectTime = now(); - + ++self->connectOutgoingCount; TraceEvent("ConnectingTo", conn ? conn->getDebugID() : UID()).suppressFor(1.0).detail("PeerAddr", self->destination); try { @@ -505,6 +517,7 @@ ACTOR Future connectionKeeper( Reference self, } } } catch( Error &e ) { + ++self->connectFailedCount; if(e.code() != error_code_connection_failed) { throw; } @@ -648,6 +661,7 @@ void Peer::discardUnreliablePackets() { void Peer::onIncomingConnection( Reference self, Reference conn, Future reader ) { // In case two processes are trying to connect to each other simultaneously, the process with the larger canonical NetworkAddress // gets to keep its outgoing connection. + ++self->connectIncomingCount; if ( !destination.isPublic() && !outgoingConnectionIdle ) throw address_in_use(); NetworkAddress compatibleAddr = transport->localAddresses.address; if(transport->localAddresses.secondaryAddress.present() && transport->localAddresses.secondaryAddress.get().isTLS() == destination.isTLS()) { diff --git a/fdbrpc/FlowTransport.h b/fdbrpc/FlowTransport.h index d441f4aed9..0fd4fa2a17 100644 --- a/fdbrpc/FlowTransport.h +++ b/fdbrpc/FlowTransport.h @@ -127,15 +127,22 @@ struct Peer : public ReferenceCounted { double lastDataPacketSentTime; int outstandingReplies; ContinuousSample pingLatencies; + double lastLoggedTime; int64_t lastLoggedBytesReceived; int64_t lastLoggedBytesSent; + // Cleared every time stats are logged for this peer. + int connectOutgoingCount; + int connectIncomingCount; + int connectFailedCount; + explicit Peer(TransportData* transport, NetworkAddress const& destination) : transport(transport), destination(destination), outgoingConnectionIdle(true), lastConnectTime(0.0), reconnectionDelay(FLOW_KNOBS->INITIAL_RECONNECTION_TIME), compatible(true), outstandingReplies(0), incompatibleProtocolVersionNewer(false), peerReferences(-1), bytesReceived(0), lastDataPacketSentTime(now()), - pingLatencies(destination.isPublic() ? FLOW_KNOBS->PING_SAMPLE_AMOUNT : 1), lastLoggedBytesReceived(0), - bytesSent(0), lastLoggedBytesSent(0) {} + pingLatencies(destination.isPublic() ? FLOW_KNOBS->PING_SAMPLE_AMOUNT : 1), lastLoggedBytesReceived(0), + bytesSent(0), lastLoggedBytesSent(0), lastLoggedTime(0.0), connectOutgoingCount(0), connectIncomingCount(0), + connectFailedCount(0) {} void send(PacketBuffer* pb, ReliablePacket* rp, bool firstUnsent); From 44cdc4dfa6376f35c317be192196858f0b4772a1 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Wed, 4 Nov 2020 09:44:28 -0800 Subject: [PATCH 054/317] Update fdbserver/LogRouter.actor.cpp --- fdbserver/LogRouter.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index d8c370f93c..d1e513f240 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -153,7 +153,7 @@ struct LogRouterData { specialCounter(cc, "WaitForVersionMaxMS", [this](){ double val = this->maxWaitForVersionTime; this->maxWaitForVersionTime = 0; return 1000*val; }); specialCounter(cc, "GetMoreMS", [this](){ double val = this->getMoreTime; this->getMoreTime = 0; return 1000*val; }); specialCounter(cc, "GetMoreMaxMS", [this](){ double val = this->maxGetMoreTime; this->maxGetMoreTime = 0; return 1000*val; }); - specialCounter(cc, "Geneartion", [this]() { return this->generation; }); + specialCounter(cc, "Generation", [this]() { return this->generation; }); logger = traceCounters("LogRouterMetrics", dbgid, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "LogRouterMetrics", [this](TraceEvent& te) { te.detail("PrimaryPeekLocation", this->primaryPeekLocation); From 5825af272f91cf6261c7ce56a4c413198402ee64 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Wed, 4 Nov 2020 22:06:30 +0000 Subject: [PATCH 055/317] Fix whitespace --- fdbserver/Knobs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 41a262a024..b7c1a9b84d 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -315,7 +315,7 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi // KeyValueStoreRocksDB init( ROCKSDB_BACKGROUND_PARALLELISM, 0 ); - init( ROCKSDB_READ_PARALLELISM, 4 ); + init( ROCKSDB_READ_PARALLELISM, 4 ); init( ROCKSDB_MEMTABLE_BYTES, 512 * 1024 * 1024 ); init( ROCKSDB_UNSAFE_AUTO_FSYNC, false ); init( ROCKSDB_PERIODIC_COMPACTION_SECONDS, 0 ); From 7b28de8a415935f805434f73302ebf99dc2cf666 Mon Sep 17 00:00:00 2001 From: Vishesh Yadav Date: Wed, 4 Nov 2020 14:06:49 -0800 Subject: [PATCH 056/317] Add IDs to ConnectionReset TraceEvents --- fdbserver/LogSystemPeekCursor.actor.cpp | 4 ++-- fdbserver/MasterProxyServer.actor.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fdbserver/LogSystemPeekCursor.actor.cpp b/fdbserver/LogSystemPeekCursor.actor.cpp index abbd35a289..6d4c33301d 100644 --- a/fdbserver/LogSystemPeekCursor.actor.cpp +++ b/fdbserver/LogSystemPeekCursor.actor.cpp @@ -138,7 +138,7 @@ ACTOR Future resetChecker( ILogSystem::ServerPeekCursor* self, NetworkAddr self->unknownReplies = 0; self->fastReplies = 0; wait(delay(SERVER_KNOBS->PEEK_STATS_INTERVAL)); - TraceEvent("SlowPeekStats") + TraceEvent("SlowPeekStats", self->randomID) .detail("PeerAddress", addr) .detail("SlowReplies", self->slowReplies) .detail("FastReplies", self->fastReplies) @@ -147,7 +147,7 @@ ACTOR Future resetChecker( ILogSystem::ServerPeekCursor* self, NetworkAddr if (self->slowReplies >= SERVER_KNOBS->PEEK_STATS_SLOW_AMOUNT && self->slowReplies / double(self->slowReplies + self->fastReplies) >= SERVER_KNOBS->PEEK_STATS_SLOW_RATIO) { - TraceEvent("ConnectionResetSlowPeek") + TraceEvent("ConnectionResetSlowPeek", self->randomID) .detail("PeerAddress", addr) .detail("SlowReplies", self->slowReplies) .detail("FastReplies", self->fastReplies) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index d935926b65..2ad44f47cf 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -567,7 +567,7 @@ ACTOR Future commitBatch( g_traceBatch.addEvent("CommitDebug", debugID.get().first(), "MasterProxyServer.commitBatch.Before"); if(localBatchNumber-self->latestLocalCommitBatchResolving.get()>SERVER_KNOBS->RESET_MASTER_BATCHES && now()-self->lastMasterReset>SERVER_KNOBS->RESET_MASTER_DELAY) { - TraceEvent(SevWarnAlways, "ConnectionResetMaster") + TraceEvent(SevWarnAlways, "ConnectionResetMaster", self->dbgid) .detail("PeerAddress", self->master.address()) .detail("CurrentBatch", localBatchNumber) .detail("InProcessBatch", self->latestLocalCommitBatchResolving.get()); @@ -635,7 +635,7 @@ ACTOR Future commitBatch( now() - self->lastResolverReset > SERVER_KNOBS->RESET_RESOLVER_DELAY) { for (int r = 0; rresolvers.size(); r++) { - TraceEvent(SevWarnAlways, "ConnectionResetResolver") + TraceEvent(SevWarnAlways, "ConnectionResetResolver", self->dbgid) .detail("PeerAddr", self->resolvers[r].address()) .detail("CurrentBatch", localBatchNumber) .detail("InProcessBatch", self->latestLocalCommitBatchLogging.get()); From 5d7ec6555a48ce0553a568968506435c16b5351a Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Wed, 4 Nov 2020 16:34:32 -0800 Subject: [PATCH 057/317] Update fdbserver/LogRouter.actor.cpp --- fdbserver/LogRouter.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index d1e513f240..f2d2936584 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -90,7 +90,7 @@ struct LogRouterData { double maxWaitForVersionTime = 0; double getMoreTime = 0; double maxGetMoreTime = 0; - uint64_t generation = -1; + int64_t generation = -1; struct PeekTrackerData { std::map>> sequence_version; From 26a66c632a8f6552b9b9939efee972bf368e1925 Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Thu, 5 Nov 2020 10:25:21 -0800 Subject: [PATCH 058/317] Allow histograms to be fetched by name (so multiple instances can share the same histogram --- flow/Histogram.cpp | 64 +++++++++++++++++++++++++++++++++++++++++++--- flow/Histogram.h | 36 +++++++++++++++++++++----- flow/network.h | 11 +++++--- flow/serialize.h | 16 +++++------- 4 files changed, 104 insertions(+), 23 deletions(-) diff --git a/flow/Histogram.cpp b/flow/Histogram.cpp index f3efd074c9..51aa647065 100644 --- a/flow/Histogram.cpp +++ b/flow/Histogram.cpp @@ -19,7 +19,8 @@ */ #include -#include +#include +#include // TODO: remove dependency on fdbrpc. // we need to be able to check if we're in simulation so that the histograms are properly @@ -74,6 +75,14 @@ void HistogramRegistry::unregisterHistogram(Histogram * h) { ASSERT(histograms.erase(h->name()) == 1); } +Histogram * HistogramRegistry::lookupHistogram(std::string name) { + auto h = histograms.find(name); + if (h == histograms.end()) { + return nullptr; + } + return h->second; +} + void HistogramRegistry::logReport() { for (auto & i : histograms) { i.second->writeToLog(); @@ -100,12 +109,12 @@ void Histogram::writeToLog() { switch(unit) { case Unit::microseconds: { - uint32_t usec = ((uint32_t)1)< h = Histogram::getHistogram(LiteralStringRef("smoke_test"), LiteralStringRef("counts"), Histogram::Unit::bytes); + + h->sample(0); + ASSERT(h->buckets[0] == 1); + h->sample(1); + ASSERT(h->buckets[0] == 2); + + h->sample(2); + ASSERT(h->buckets[1] == 1); + + GetHistogramRegistry().logReport(); + + ASSERT(h->buckets[0] == 0); + h->sample(0); + ASSERT(h->buckets[0] == 1); + h = Histogram::getHistogram(LiteralStringRef("smoke_test"), LiteralStringRef("counts2"), Histogram::Unit::bytes); + + // confirm that old h was deallocated. + h = Histogram::getHistogram(LiteralStringRef("smoke_test"), LiteralStringRef("counts"), Histogram::Unit::bytes); + ASSERT(h->buckets[0] == 0); + + h = Histogram::getHistogram(LiteralStringRef("smoke_test"), LiteralStringRef("times"), Histogram::Unit::microseconds); + + h->sampleSeconds(0.000000); + h->sampleSeconds(0.0000019); + ASSERT(h->buckets[0] == 2); + h->sampleSeconds(0.0000021); + ASSERT(h->buckets[1] == 1); + h->sampleSeconds(0.000015); + ASSERT(h->buckets[3] == 1); + + h->sampleSeconds(4400.0); + ASSERT(h->buckets[31] == 1); + + GetHistogramRegistry().logReport(); + + } + + // h has been deallocated. Does this crash? + GetHistogramRegistry().logReport(); + + return Void(); +} \ No newline at end of file diff --git a/flow/Histogram.h b/flow/Histogram.h index db4932bc4f..e9ba06f9f7 100644 --- a/flow/Histogram.h +++ b/flow/Histogram.h @@ -38,6 +38,7 @@ class HistogramRegistry { public: void registerHistogram(Histogram * h); void unregisterHistogram(Histogram * h); + Histogram * lookupHistogram(std::string name); void logReport(); private: std::map histograms; @@ -46,22 +47,42 @@ class HistogramRegistry { // TODO: This should be scoped properly for simulation (instead of just having all the "machines" share one histogram namespace) HistogramRegistry & GetHistogramRegistry(); -class Histogram { +class Histogram : public ReferenceCounted { public: enum class Unit { microseconds, bytes }; - Histogram(StringRef group, StringRef op, Unit unit) : group(group.toString()), op(op.toString()), unit(unit), registry(GetHistogramRegistry()) { +private: + Histogram(std::string group, std::string op, Unit unit) : group(group), op(op), unit(unit), registry(GetHistogramRegistry()) { clear(); registry.registerHistogram(this); } + static std::string generateName(std::string group, std::string op) { + return group + ":" + op; + } + +public: + ~Histogram() { registry.unregisterHistogram(this); } + + static Reference getHistogram(StringRef group, StringRef op, Unit unit) { + std::string group_str = group.toString(); + std::string op_str = op.toString(); + std::string name = generateName(group_str, op_str); + HistogramRegistry & registry = GetHistogramRegistry(); + Histogram * h = registry.lookupHistogram(name); + if (!h) { + h = new Histogram(group_str, op_str, unit); + } + return Reference(h); + } + inline void sample(uint32_t sample) { #ifdef _WIN32 unsigned long index; @@ -72,7 +93,12 @@ public: } inline void sampleSeconds(double delta) { - sample((uint32_t)(delta * 1000000)); // convert to microseconds and truncate to integer + uint64_t delta_usec = (delta * 1000000); + if (delta_usec > UINT32_MAX) { + sample(UINT32_MAX); + } else { + sample((uint32_t)(delta * 1000000)); // convert to microseconds and truncate to integer + } } void clear() { @@ -83,15 +109,13 @@ public: void writeToLog(); std::string name() { - return group + ":" + op; + return generateName(this->group, this->op); } std::string const group; std::string const op; Unit const unit; HistogramRegistry & registry; - -private: uint32_t buckets[32]; }; diff --git a/flow/network.h b/flow/network.h index 6f9d271a03..eb2105c468 100644 --- a/flow/network.h +++ b/flow/network.h @@ -30,8 +30,9 @@ #ifndef TLS_DISABLED #include "boost/asio/ssl.hpp" #endif -#include "flow/serialize.h" +#include "flow/Arena.h" #include "flow/IRandom.h" +#include "flow/Trace.h" enum class TaskPriority { Max = 1000000, @@ -111,8 +112,6 @@ inline TaskPriority incrementPriorityIfEven(TaskPriority p) { class Void; -template class Optional; - struct IPAddress { typedef boost::asio::ip::address_v6::bytes_type IPAddressStore; static_assert(std::is_same>::value, @@ -351,6 +350,12 @@ public: virtual Future read() = 0; }; +struct SendBuffer { + uint8_t const* data; + SendBuffer* next; + int bytes_written, bytes_sent; +}; + class IConnection { public: // IConnection is reference-counted (use Reference), but the caller must explicitly call close() diff --git a/flow/serialize.h b/flow/serialize.h index 42de439cec..db51167c88 100644 --- a/flow/serialize.h +++ b/flow/serialize.h @@ -30,6 +30,7 @@ #include "flow/Arena.h" #include "flow/FileIdentifier.h" #include "flow/ObjectSerializer.h" +#include "flow/network.h" #include // Though similar, is_binary_serializable cannot be replaced by std::is_pod, as doing so would prefer @@ -664,24 +665,19 @@ private: ProtocolVersion m_protocolVersion; }; -struct SendBuffer { - uint8_t const* data; - SendBuffer* next; - int bytes_written, bytes_sent; -}; - struct PacketBuffer : SendBuffer { -private: +private: int reference_count; - uint32_t size_; - static constexpr size_t PACKET_BUFFER_OVERHEAD = 32; + uint32_t const size_; + double const enqueue_time; + static constexpr size_t PACKET_BUFFER_OVERHEAD = 40; public: uint8_t* data() { return const_cast(static_cast(this)->data); } size_t size() { return size_; } private: - explicit PacketBuffer(size_t size) : reference_count(1), size_(size) { + explicit PacketBuffer(size_t size) : reference_count(1), size_(size), enqueue_time(g_network->now()) { next = 0; bytes_written = bytes_sent = 0; ((SendBuffer*)this)->data = reinterpret_cast(this + 1); From df18f20efd67e12e316362aa33067ab366a459bf Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Thu, 5 Nov 2020 10:26:51 -0800 Subject: [PATCH 059/317] clang format --- fdbserver/workloads/KVStoreTest.actor.cpp | 8 +- flow/Histogram.cpp | 201 +++++++++++----------- flow/Histogram.h | 118 ++++++------- flow/serialize.h | 2 +- 4 files changed, 159 insertions(+), 170 deletions(-) diff --git a/fdbserver/workloads/KVStoreTest.actor.cpp b/fdbserver/workloads/KVStoreTest.actor.cpp index 0aa34fdff3..bdaef4d6d2 100755 --- a/fdbserver/workloads/KVStoreTest.actor.cpp +++ b/fdbserver/workloads/KVStoreTest.actor.cpp @@ -153,7 +153,7 @@ struct KVTest { } }; -ACTOR Future testKVRead( KVTest* test, Key key, TestHistogram* latency, PerfIntCounter* count ) { +ACTOR Future testKVRead(KVTest* test, Key key, TestHistogram* latency, PerfIntCounter* count) { //state Version s1 = test->lastCommit; state Version s2 = test->lastDurable; @@ -171,7 +171,7 @@ ACTOR Future testKVRead( KVTest* test, Key key, TestHistogram* late return Void(); } -ACTOR Future testKVReadSaturation( KVTest* test, TestHistogram* latency, PerfIntCounter* count ) { +ACTOR Future testKVReadSaturation(KVTest* test, TestHistogram* latency, PerfIntCounter* count) { while (true) { state double begin = timer(); Optional val = wait( test->store->readValue(test->randomKey()) ); @@ -181,7 +181,7 @@ ACTOR Future testKVReadSaturation( KVTest* test, TestHistogram* lat } } -ACTOR Future testKVCommit( KVTest* test, TestHistogram* latency, PerfIntCounter* count ) { +ACTOR Future testKVCommit(KVTest* test, TestHistogram* latency, PerfIntCounter* count) { state Version v = test->lastSet; test->lastCommit = v; state double begin = timer(); @@ -232,7 +232,7 @@ struct KVStoreTestWorkload : TestWorkload { return Void(); } virtual Future check( Database const& cx ) { return true; } - void metricsFromHistogram(vector& m, std::string name, TestHistogram& h){ + void metricsFromHistogram(vector& m, std::string name, TestHistogram& h) { m.push_back( PerfMetric( "Min " + name, 1000.0 * h.min(), true) ); m.push_back( PerfMetric( "Average " + name, 1000.0 * h.mean(), true) ); m.push_back( PerfMetric( "Median " + name, 1000.0 * h.medianEstimate(), true) ); diff --git a/flow/Histogram.cpp b/flow/Histogram.cpp index 51aa647065..6fa0f14384 100644 --- a/flow/Histogram.cpp +++ b/flow/Histogram.cpp @@ -29,8 +29,8 @@ // metrics. #include -// pull in some global pointers too: These types are implemented in fdbrpc/sim2.actor.cpp, which is not available here. Yuck. -// If you're not using the simulator, these will remain null, and all should be well. +// pull in some global pointers too: These types are implemented in fdbrpc/sim2.actor.cpp, which is not available here. +// Yuck. If you're not using the simulator, these will remain null, and all should be well. // TODO: create a execution context abstraction that allows independent flow instances within a process. // The simulator would be the main user of it, and histogram would be the only other user (for now). @@ -39,133 +39,130 @@ thread_local ISimulator::ProcessInfo* ISimulator::currentProcess = nullptr; // Fallback registry when we're not in simulation -- if we had execution contexts we wouldn't need to check if // we have a simulated contex here; we'd just use the current context regardless. -static HistogramRegistry * globalHistograms = nullptr; +static HistogramRegistry* globalHistograms = nullptr; -HistogramRegistry & GetHistogramRegistry() { - ISimulator::ProcessInfo * info = g_simulator.getCurrentProcess(); +HistogramRegistry& GetHistogramRegistry() { + ISimulator::ProcessInfo* info = g_simulator.getCurrentProcess(); - if (info) { - // in simulator; scope histograms to simulated process - return info->histograms; - } - // avoid link order issues where the registry hasn't been initialized, but we're - // instantiating a histogram - if (globalHistograms == nullptr) { - globalHistograms = new HistogramRegistry(); - } - return *globalHistograms; + if (info) { + // in simulator; scope histograms to simulated process + return info->histograms; + } + // avoid link order issues where the registry hasn't been initialized, but we're + // instantiating a histogram + if (globalHistograms == nullptr) { + globalHistograms = new HistogramRegistry(); + } + return *globalHistograms; } -void HistogramRegistry::registerHistogram(Histogram * h) { - if (histograms.find(h->name()) != histograms.end()) { - TraceEvent(SevError, "HistogramDoubleRegistered") - .detail("group", h->group) - .detail("op", h->op); - ASSERT(false); - } - histograms.insert(std::pair(h->name(), h)); +void HistogramRegistry::registerHistogram(Histogram* h) { + if (histograms.find(h->name()) != histograms.end()) { + TraceEvent(SevError, "HistogramDoubleRegistered").detail("group", h->group).detail("op", h->op); + ASSERT(false); + } + histograms.insert(std::pair(h->name(), h)); } -void HistogramRegistry::unregisterHistogram(Histogram * h) { - if (histograms.find(h->name()) == histograms.end()) { - TraceEvent(SevError, "HistogramNotRegistered") - .detail("group", h->group) - .detail("op", h->op); - } - ASSERT(histograms.erase(h->name()) == 1); +void HistogramRegistry::unregisterHistogram(Histogram* h) { + if (histograms.find(h->name()) == histograms.end()) { + TraceEvent(SevError, "HistogramNotRegistered").detail("group", h->group).detail("op", h->op); + } + ASSERT(histograms.erase(h->name()) == 1); } -Histogram * HistogramRegistry::lookupHistogram(std::string name) { - auto h = histograms.find(name); - if (h == histograms.end()) { - return nullptr; - } - return h->second; +Histogram* HistogramRegistry::lookupHistogram(std::string name) { + auto h = histograms.find(name); + if (h == histograms.end()) { + return nullptr; + } + return h->second; } void HistogramRegistry::logReport() { - for (auto & i : histograms) { - i.second->writeToLog(); - i.second->clear(); - } + for (auto& i : histograms) { + i.second->writeToLog(); + i.second->clear(); + } } void Histogram::writeToLog() { - bool active = false; - for (uint32_t i = 0; i < 32; i++) { - if (buckets[i]) { - active = true; - break; - } - } - if (!active) { - return ; - } + bool active = false; + for (uint32_t i = 0; i < 32; i++) { + if (buckets[i]) { + active = true; + break; + } + } + if (!active) { + return; + } - TraceEvent e(SevInfo, "Histogram"); - e.detail("Group", group).detail("Op", op); - for (uint32_t i = 0; i < 32; i++) { - if (buckets[i]) { - switch(unit) { - case Unit::microseconds: - { - uint32_t usec = ((uint32_t)1)<<(i+1); - e.detail(format("LessThan%u.%03u", usec / 1000, usec % 1000), buckets[i]); - break; - } - case Unit::bytes: - e.detail(format("LessThan%u", ((uint32_t)1)<<(i+1)), buckets[i]); - break; - default: - ASSERT(false); - } - } - } + TraceEvent e(SevInfo, "Histogram"); + e.detail("Group", group).detail("Op", op); + for (uint32_t i = 0; i < 32; i++) { + if (buckets[i]) { + switch (unit) { + case Unit::microseconds: { + uint32_t usec = ((uint32_t)1) << (i + 1); + e.detail(format("LessThan%u.%03u", usec / 1000, usec % 1000), buckets[i]); + break; + } + case Unit::bytes: + e.detail(format("LessThan%u", ((uint32_t)1) << (i + 1)), buckets[i]); + break; + default: + ASSERT(false); + } + } + } } TEST_CASE("/flow/histogram/smoke_test") { - - { - Reference h = Histogram::getHistogram(LiteralStringRef("smoke_test"), LiteralStringRef("counts"), Histogram::Unit::bytes); - h->sample(0); - ASSERT(h->buckets[0] == 1); - h->sample(1); - ASSERT(h->buckets[0] == 2); + { + Reference h = + Histogram::getHistogram(LiteralStringRef("smoke_test"), LiteralStringRef("counts"), Histogram::Unit::bytes); - h->sample(2); - ASSERT(h->buckets[1] == 1); + h->sample(0); + ASSERT(h->buckets[0] == 1); + h->sample(1); + ASSERT(h->buckets[0] == 2); - GetHistogramRegistry().logReport(); + h->sample(2); + ASSERT(h->buckets[1] == 1); - ASSERT(h->buckets[0] == 0); - h->sample(0); - ASSERT(h->buckets[0] == 1); - h = Histogram::getHistogram(LiteralStringRef("smoke_test"), LiteralStringRef("counts2"), Histogram::Unit::bytes); - - // confirm that old h was deallocated. - h = Histogram::getHistogram(LiteralStringRef("smoke_test"), LiteralStringRef("counts"), Histogram::Unit::bytes); - ASSERT(h->buckets[0] == 0); + GetHistogramRegistry().logReport(); - h = Histogram::getHistogram(LiteralStringRef("smoke_test"), LiteralStringRef("times"), Histogram::Unit::microseconds); + ASSERT(h->buckets[0] == 0); + h->sample(0); + ASSERT(h->buckets[0] == 1); + h = Histogram::getHistogram(LiteralStringRef("smoke_test"), LiteralStringRef("counts2"), + Histogram::Unit::bytes); - h->sampleSeconds(0.000000); - h->sampleSeconds(0.0000019); - ASSERT(h->buckets[0] == 2); - h->sampleSeconds(0.0000021); - ASSERT(h->buckets[1] == 1); - h->sampleSeconds(0.000015); - ASSERT(h->buckets[3] == 1); + // confirm that old h was deallocated. + h = Histogram::getHistogram(LiteralStringRef("smoke_test"), LiteralStringRef("counts"), Histogram::Unit::bytes); + ASSERT(h->buckets[0] == 0); - h->sampleSeconds(4400.0); - ASSERT(h->buckets[31] == 1); + h = Histogram::getHistogram(LiteralStringRef("smoke_test"), LiteralStringRef("times"), + Histogram::Unit::microseconds); - GetHistogramRegistry().logReport(); + h->sampleSeconds(0.000000); + h->sampleSeconds(0.0000019); + ASSERT(h->buckets[0] == 2); + h->sampleSeconds(0.0000021); + ASSERT(h->buckets[1] == 1); + h->sampleSeconds(0.000015); + ASSERT(h->buckets[3] == 1); - } + h->sampleSeconds(4400.0); + ASSERT(h->buckets[31] == 1); - // h has been deallocated. Does this crash? - GetHistogramRegistry().logReport(); + GetHistogramRegistry().logReport(); + } - return Void(); + // h has been deallocated. Does this crash? + GetHistogramRegistry().logReport(); + + return Void(); } \ No newline at end of file diff --git a/flow/Histogram.h b/flow/Histogram.h index e9ba06f9f7..93dd508686 100644 --- a/flow/Histogram.h +++ b/flow/Histogram.h @@ -35,88 +35,80 @@ class Histogram; class HistogramRegistry { - public: - void registerHistogram(Histogram * h); - void unregisterHistogram(Histogram * h); - Histogram * lookupHistogram(std::string name); - void logReport(); - private: - std::map histograms; +public: + void registerHistogram(Histogram* h); + void unregisterHistogram(Histogram* h); + Histogram* lookupHistogram(std::string name); + void logReport(); + +private: + std::map histograms; }; -// TODO: This should be scoped properly for simulation (instead of just having all the "machines" share one histogram namespace) -HistogramRegistry & GetHistogramRegistry(); +// TODO: This should be scoped properly for simulation (instead of just having all the "machines" share one histogram +// namespace) +HistogramRegistry& GetHistogramRegistry(); class Histogram : public ReferenceCounted { public: - enum class Unit { - microseconds, - bytes - }; + enum class Unit { microseconds, bytes }; private: - Histogram(std::string group, std::string op, Unit unit) : group(group), op(op), unit(unit), registry(GetHistogramRegistry()) { - clear(); - registry.registerHistogram(this); - } + Histogram(std::string group, std::string op, Unit unit) + : group(group), op(op), unit(unit), registry(GetHistogramRegistry()) { + clear(); + registry.registerHistogram(this); + } - static std::string generateName(std::string group, std::string op) { - return group + ":" + op; - } + static std::string generateName(std::string group, std::string op) { return group + ":" + op; } public: + ~Histogram() { registry.unregisterHistogram(this); } - ~Histogram() { - registry.unregisterHistogram(this); - } + static Reference getHistogram(StringRef group, StringRef op, Unit unit) { + std::string group_str = group.toString(); + std::string op_str = op.toString(); + std::string name = generateName(group_str, op_str); + HistogramRegistry& registry = GetHistogramRegistry(); + Histogram* h = registry.lookupHistogram(name); + if (!h) { + h = new Histogram(group_str, op_str, unit); + } + return Reference(h); + } - - static Reference getHistogram(StringRef group, StringRef op, Unit unit) { - std::string group_str = group.toString(); - std::string op_str = op.toString(); - std::string name = generateName(group_str, op_str); - HistogramRegistry & registry = GetHistogramRegistry(); - Histogram * h = registry.lookupHistogram(name); - if (!h) { - h = new Histogram(group_str, op_str, unit); - } - return Reference(h); - } - - inline void sample(uint32_t sample) { + inline void sample(uint32_t sample) { #ifdef _WIN32 - unsigned long index; - buckets[_BitScanReverse(&index, sample) ? index : 0]++; + unsigned long index; + buckets[_BitScanReverse(&index, sample) ? index : 0]++; #else - buckets[sample ? (31 - __builtin_clz(sample)) : 0]++; + buckets[sample ? (31 - __builtin_clz(sample)) : 0]++; #endif - } + } - inline void sampleSeconds(double delta) { - uint64_t delta_usec = (delta * 1000000); - if (delta_usec > UINT32_MAX) { - sample(UINT32_MAX); - } else { - sample((uint32_t)(delta * 1000000)); // convert to microseconds and truncate to integer - } - } + inline void sampleSeconds(double delta) { + uint64_t delta_usec = (delta * 1000000); + if (delta_usec > UINT32_MAX) { + sample(UINT32_MAX); + } else { + sample((uint32_t)(delta * 1000000)); // convert to microseconds and truncate to integer + } + } - void clear() { - for (uint32_t & i : buckets) { - i = 0; - } - } - void writeToLog(); + void clear() { + for (uint32_t& i : buckets) { + i = 0; + } + } + void writeToLog(); - std::string name() { - return generateName(this->group, this->op); - } + std::string name() { return generateName(this->group, this->op); } - std::string const group; - std::string const op; - Unit const unit; - HistogramRegistry & registry; - uint32_t buckets[32]; + std::string const group; + std::string const op; + Unit const unit; + HistogramRegistry& registry; + uint32_t buckets[32]; }; #endif // FLOW_HISTOGRAM_H \ No newline at end of file diff --git a/flow/serialize.h b/flow/serialize.h index db51167c88..4028df16e7 100644 --- a/flow/serialize.h +++ b/flow/serialize.h @@ -666,7 +666,7 @@ private: }; struct PacketBuffer : SendBuffer { -private: +private: int reference_count; uint32_t const size_; double const enqueue_time; From 2909e35415442e7e6e4706a6ab7433534afdc169 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Thu, 5 Nov 2020 16:13:18 -0800 Subject: [PATCH 060/317] When moving dispaching shard relocations, log the source and destination storage servers. --- fdbclient/FDBTypes.h | 4 ++++ fdbserver/DataDistributionQueue.actor.cpp | 3 +++ 2 files changed, 7 insertions(+) diff --git a/fdbclient/FDBTypes.h b/fdbclient/FDBTypes.h index 233039d855..a525b3d013 100644 --- a/fdbclient/FDBTypes.h +++ b/fdbclient/FDBTypes.h @@ -138,6 +138,10 @@ static std::string describe( Reference const& item ) { return item->toString(); } +static std::string describe(UID const& item) { + return item.shortString(); +} + template static std::string describe( T const& item ) { return item.toString(); diff --git a/fdbserver/DataDistributionQueue.actor.cpp b/fdbserver/DataDistributionQueue.actor.cpp index 238bd5c748..c4b507cb24 100644 --- a/fdbserver/DataDistributionQueue.actor.cpp +++ b/fdbserver/DataDistributionQueue.actor.cpp @@ -1045,6 +1045,9 @@ ACTOR Future dataDistributionRelocator( DDQueueData *self, RelocateData rd } else { TraceEvent(relocateShardInterval.severity, "RelocateShardHasDestination", distributorId) .detail("PairId", relocateShardInterval.pairID) + .detail("KeyBegin", rd.keys.begin) + .detail("KeyEnd", rd.keys.end) + .detail("SourceServers", describe(rd.src)) .detail("DestinationTeam", describe(destIds)) .detail("ExtraIds", describe(extraIds)); } From 4788544a6f7f4af17843f653c843173505222038 Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Thu, 5 Nov 2020 16:33:07 -0800 Subject: [PATCH 061/317] Revise comments based on review suggestions Ack. Jingyu and Xin for their suggestions. --- fdbclient/FDBTypes.h | 2 +- fdbclient/NativeAPI.actor.cpp | 4 ++++ fdbserver/LogRouter.actor.cpp | 6 +++--- fdbserver/TLogServer.actor.cpp | 3 ++- fdbserver/TagPartitionedLogSystem.actor.cpp | 6 ++++-- fdbserver/storageserver.actor.cpp | 3 +-- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/fdbclient/FDBTypes.h b/fdbclient/FDBTypes.h index 823d82ad22..55da3c8ab5 100644 --- a/fdbclient/FDBTypes.h +++ b/fdbclient/FDBTypes.h @@ -39,7 +39,7 @@ typedef int64_t Generation; enum { tagLocalitySpecial = -1, // tag with this locality means it is invalidTag (id=0), txsTag (id=1), or cacheTag (id=2) tagLocalityLogRouter = -2, - tagLocalityRemoteLog = -3, // Q: definition? + tagLocalityRemoteLog = -3, // tag created by log router for remote tLogs tagLocalityUpgraded = -4, tagLocalitySatellite = -5, tagLocalityLogRouterMapped = -6, // Q: definition? I guess it is used by pseudo tags diff --git a/fdbclient/NativeAPI.actor.cpp b/fdbclient/NativeAPI.actor.cpp index b6b8068a23..0be7548c76 100644 --- a/fdbclient/NativeAPI.actor.cpp +++ b/fdbclient/NativeAPI.actor.cpp @@ -1232,6 +1232,10 @@ ACTOR Future< vector< pair> > > getKeyRangeLoca // Get the SS locations for each shard in the 'keys' key-range; // Returned vector size is the number of shards in the input keys key-range. +// Returned vector element is pairs, where +// ShardRange is the whole shard key-range, not a part of the given key range. +// Example: If query the function with key range (b, d), the returned list of pairs could be something like: +// [([a, b1), locationInfo), ([b1, c), locationInfo), ([c, d1), locationInfo)]. template Future< vector< pair> > > getKeyRangeLocations( Database const& cx, KeyRange const& keys, int limit, bool reverse, F StorageServerInterface::*member, TransactionInfo const& info ) { ASSERT (!keys.empty()); diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index d610551dc3..7172bde654 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -75,12 +75,13 @@ struct LogRouterData { UID dbgid; Reference>> logSystem; - NotifiedVersion version; // The largest version at which the log router has peeked mutations from satellite tLog. + NotifiedVersion version; // The largest version at which the log router has peeked mutations + // from satellite tLog or primary tLogs. NotifiedVersion minPopped; // The minimum version among all tags that has been popped by remote tLogs. Version startVersion; Version minKnownCommittedVersion; // The minimum durable version among all LRs. // A LR's durable version is the maximum version of mutations that have been - // peeked by remote tLog. + // popped by remote tLog. Version poppedVersion; Deque>>> messageBlocks; Tag routerTag; @@ -271,7 +272,6 @@ ACTOR Future pullAsyncData( LogRouterData *self ) { state double startTime = now(); choose { when(wait( getMoreF ) ) { - self->getMoreTime += now() - startTime; self->maxGetMoreTime = std::max(self->maxGetMoreTime, now() - startTime); break; diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index ddd55c5a5f..7b70c85de7 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -484,7 +484,8 @@ struct LogData : NonCopyable, public ReferenceCounted { Version unrecoveredBefore, recoveredAt; struct PeekTrackerData { - std::map>> sequence_version; + std::map>> + sequence_version; // second: Version is peeked begin version. bool is onlySpilled double lastUpdate; Tag tag; diff --git a/fdbserver/TagPartitionedLogSystem.actor.cpp b/fdbserver/TagPartitionedLogSystem.actor.cpp index 2afe0b4ad7..5808cec168 100644 --- a/fdbserver/TagPartitionedLogSystem.actor.cpp +++ b/fdbserver/TagPartitionedLogSystem.actor.cpp @@ -160,7 +160,7 @@ OldTLogCoreData::OldTLogCoreData(const OldLogData& oldData) : struct TagPartitionedLogSystem : ILogSystem, ReferenceCounted { UID dbgid; LogSystemType logSystemType; - std::vector> tLogs; // LogSets in different locations: primary, satellite, logRouter, or remote + std::vector> tLogs; // LogSets in different locations: primary, satellite, or remote int expectedLogSets; int logRouterTags; int txsTags; @@ -253,7 +253,9 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCountedthisServerID, data->durableVersion.get()); if (checkFatalError.isReady()) checkFatalError.get(); - // TraceEvent("ForgotVersionsBefore", data->thisServerID).detail("Version", nextDurableVersion); // Q:Uncomment it? + // TraceEvent("ForgotVersionsBefore", data->thisServerID).detail("Version", nextDurableVersion); validate(data); return nextDurableVersion == desiredDurableVersion; @@ -3015,7 +3015,6 @@ bool StorageServerDisk::makeVersionMutationsDurable( Version& prevStorageVersion void StorageServerDisk::makeVersionDurable( Version version ) { storage->set( KeyValueRef(persistVersion, BinaryWriter::toValue(version, Unversioned())) ); - // Q: shall we enable it? How frequent will it be printed? // TraceEvent("MakeDurable", data->thisServerID) // .detail("FromVersion", prevStorageVersion) // .detail("ToVersion", version); From 08e8a0693305d3762a768a2a977cfe180f19310e Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Fri, 6 Nov 2020 19:13:45 -0800 Subject: [PATCH 062/317] PR comments; add missing addRef when re-using Histogram in HistogramRegistry; Instrument UnsentPacketQueue in FlowTransport --- flow/Histogram.cpp | 7 +++++-- flow/Histogram.h | 37 +++++++++++++++++++++++++++---------- flow/Net2Packet.cpp | 2 ++ flow/Net2Packet.h | 15 +++++++++++++-- flow/serialize.h | 5 +++-- 5 files changed, 50 insertions(+), 16 deletions(-) diff --git a/flow/Histogram.cpp b/flow/Histogram.cpp index 6fa0f14384..e5281093c9 100644 --- a/flow/Histogram.cpp +++ b/flow/Histogram.cpp @@ -51,6 +51,7 @@ HistogramRegistry& GetHistogramRegistry() { // avoid link order issues where the registry hasn't been initialized, but we're // instantiating a histogram if (globalHistograms == nullptr) { + // Note: This will show up as a leak on shutdown, but we're OK with that. globalHistograms = new HistogramRegistry(); } return *globalHistograms; @@ -65,10 +66,12 @@ void HistogramRegistry::registerHistogram(Histogram* h) { } void HistogramRegistry::unregisterHistogram(Histogram* h) { - if (histograms.find(h->name()) == histograms.end()) { + std::string name = h->name(); + if (histograms.find(name) == histograms.end()) { TraceEvent(SevError, "HistogramNotRegistered").detail("group", h->group).detail("op", h->op); } - ASSERT(histograms.erase(h->name()) == 1); + int count = histograms.erase(name); + ASSERT(count == 1); } Histogram* HistogramRegistry::lookupHistogram(std::string name) { diff --git a/flow/Histogram.h b/flow/Histogram.h index 93dd508686..fd765f4d86 100644 --- a/flow/Histogram.h +++ b/flow/Histogram.h @@ -42,22 +42,27 @@ public: void logReport(); private: + // This map is ordered by key so that ops within the same group end up + // next to each other in the trace log. std::map histograms; }; -// TODO: This should be scoped properly for simulation (instead of just having all the "machines" share one histogram -// namespace) HistogramRegistry& GetHistogramRegistry(); -class Histogram : public ReferenceCounted { +/* + * A fast histogram with power-of-two spaced buckets. + * + * For more information about this technique, see: + * https://www.fsl.cs.stonybrook.edu/project-osprof.html + */ +class Histogram sealed : public ReferenceCounted { public: enum class Unit { microseconds, bytes }; private: - Histogram(std::string group, std::string op, Unit unit) - : group(group), op(op), unit(unit), registry(GetHistogramRegistry()) { + Histogram(std::string group, std::string op, Unit unit, HistogramRegistry& registry) + : group(group), op(op), unit(unit), registry(registry), ReferenceCounted() { clear(); - registry.registerHistogram(this); } static std::string generateName(std::string group, std::string op) { return group + ":" + op; } @@ -72,18 +77,30 @@ public: HistogramRegistry& registry = GetHistogramRegistry(); Histogram* h = registry.lookupHistogram(name); if (!h) { - h = new Histogram(group_str, op_str, unit); + h = new Histogram(group_str, op_str, unit, registry); + registry.registerHistogram(h); + return Reference(h); + } else { + return Reference::addRef(h); } - return Reference(h); } + // This histogram buckets samples into powers of two. inline void sample(uint32_t sample) { + size_t idx; #ifdef _WIN32 unsigned long index; - buckets[_BitScanReverse(&index, sample) ? index : 0]++; + // _BitScanReverse sets index to the position of the first non-zero bit, so + // _BitScanReverse(sample) ~= log_2(sample). _BitScanReverse returns false if + // sample is zero. + idx = _BitScanReverse(&index, sample) ? index : 0; #else - buckets[sample ? (31 - __builtin_clz(sample)) : 0]++; + // __builtin_clz counts the leading zeros in its uint32_t argument. So, 31-clz ~= log_2(sample). + // __builtin_clz(0) is undefined. + idx = sample ? (31 - __builtin_clz(sample)) : 0; #endif + ASSERT(idx < 32); + buckets[idx]++; } inline void sampleSeconds(double delta) { diff --git a/flow/Net2Packet.cpp b/flow/Net2Packet.cpp index 74ce689be6..c126a5271d 100644 --- a/flow/Net2Packet.cpp +++ b/flow/Net2Packet.cpp @@ -150,6 +150,8 @@ void UnsentPacketQueue::sent(int bytes) { bytes -= b->bytes_written - b->bytes_sent; b->bytes_sent = b->bytes_written; ASSERT(b->bytes_written <= b->size()); + double queue_time = now() - b->enqueue_time; + sendQueueLatencyHistogram->sampleSeconds(queue_time); unsent_first = b->nextPacketBuffer(); if (!unsent_first) unsent_last = NULL; b->delref(); diff --git a/flow/Net2Packet.h b/flow/Net2Packet.h index 3d9a0f99b3..a1588f7d9e 100644 --- a/flow/Net2Packet.h +++ b/flow/Net2Packet.h @@ -23,6 +23,7 @@ #pragma once #include "flow/flow.h" +#include "flow/Histogram.h" // PacketWriter and PacketBuffer are in serialize.h because they are needed by the SerializeSource<> template @@ -40,8 +41,17 @@ struct ReliablePacket : FastAllocated { class UnsentPacketQueue : NonCopyable { public: - UnsentPacketQueue() : unsent_first(0), unsent_last(0) {} - ~UnsentPacketQueue() { discardAll(); } + UnsentPacketQueue() + : unsent_first(0), unsent_last(0), + sendQueueLatencyHistogram(Histogram::getHistogram( + LiteralStringRef("UnsentPacketQueue"), LiteralStringRef("QueueWait"), Histogram::Unit::microseconds)) {} + + ~UnsentPacketQueue() { + discardAll(); + unsent_first = (PacketBuffer*)0xDEADBEEF; + unsent_last = (PacketBuffer*)0xCAFEBABE; + sendQueueLatencyHistogram = Reference(nullptr); + } // Get a PacketBuffer to write new packets into PacketBuffer* getWriteBuffer() { @@ -70,6 +80,7 @@ public: private: PacketBuffer *unsent_first, *unsent_last; // Both NULL, or inclusive range of PacketBuffers that haven't been sent. The last one may have space for more packets to be written. + Reference sendQueueLatencyHistogram; }; class ReliablePacketList : NonCopyable { diff --git a/flow/serialize.h b/flow/serialize.h index 4028df16e7..ec250c1421 100644 --- a/flow/serialize.h +++ b/flow/serialize.h @@ -667,12 +667,13 @@ private: struct PacketBuffer : SendBuffer { private: + static constexpr size_t PACKET_BUFFER_OVERHEAD = 40; int reference_count; uint32_t const size_; - double const enqueue_time; - static constexpr size_t PACKET_BUFFER_OVERHEAD = 40; public: + double const enqueue_time; + uint8_t* data() { return const_cast(static_cast(this)->data); } size_t size() { return size_; } From b5a9ccf17573470b108bf63c8e794555bd01cd74 Mon Sep 17 00:00:00 2001 From: Saurabh Chaturvedi Date: Thu, 30 Jan 2020 19:10:08 +0530 Subject: [PATCH 063/317] Fix transaction retry typo for other lang tutorials --- documentation/sphinx/source/class-scheduling-go.rst | 2 +- documentation/sphinx/source/class-scheduling-java.rst | 4 ++-- documentation/sphinx/source/class-scheduling-ruby.rst | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/documentation/sphinx/source/class-scheduling-go.rst b/documentation/sphinx/source/class-scheduling-go.rst index a0d103769b..87080ac374 100644 --- a/documentation/sphinx/source/class-scheduling-go.rst +++ b/documentation/sphinx/source/class-scheduling-go.rst @@ -229,7 +229,7 @@ Furthermore, this version can only be called with a ``Database``, making it impo Note that by default, the operation will be retried an infinite number of times and the transaction will never time out. It is therefore recommended that the client choose a default transaction retry limit or timeout value that is suitable for their application. This can be set either at the transaction level using the ``SetRetryLimit`` or ``SetTimeout`` transaction options or at the database level with the ``SetTransactionRetryLimit`` or ``SetTransactionTimeout`` database options. For example, one can set a one minute timeout on each transaction and a default retry limit of 100 by calling:: db.Options().SetTransactionTimeout(60000) // 60,000 ms = 1 minute - db.Options().SetRetryLimit(100) + db.Options().SetTransactionRetryLimit(100) Making some sample classes -------------------------- diff --git a/documentation/sphinx/source/class-scheduling-java.rst b/documentation/sphinx/source/class-scheduling-java.rst index 75db289e1a..23240100c6 100644 --- a/documentation/sphinx/source/class-scheduling-java.rst +++ b/documentation/sphinx/source/class-scheduling-java.rst @@ -157,7 +157,7 @@ If instead you pass a :class:`Transaction` for the :class:`TransactionContext` p Note that by default, the operation will be retried an infinite number of times and the transaction will never time out. It is therefore recommended that the client choose a default transaction retry limit or timeout value that is suitable for their application. This can be set either at the transaction level using the ``setRetryLimit`` or ``setTimeout`` transaction options or at the database level with the ``setTransactionRetryLimit`` or ``setTransactionTimeout`` database options. For example, one can set a one minute timeout on each transaction and a default retry limit of 100 by calling:: db.options().setTransactionTimeout(60000); // 60,000 ms = 1 minute - db.options().setRetryLimit(100); + db.options().setTransactionRetryLimit(100); Making some sample classes -------------------------- @@ -444,7 +444,7 @@ Here's the code for the scheduling tutorial: fdb = FDB.selectAPIVersion(620); db = fdb.open(); db.options().setTransactionTimeout(60000); // 60,000 ms = 1 minute - db.options().setRetryLimit(100); + db.options().setTransactionRetryLimit(100); } // Generate 1,620 classes like '9:00 chem for dummies' diff --git a/documentation/sphinx/source/class-scheduling-ruby.rst b/documentation/sphinx/source/class-scheduling-ruby.rst index 345678887c..45c6534097 100644 --- a/documentation/sphinx/source/class-scheduling-ruby.rst +++ b/documentation/sphinx/source/class-scheduling-ruby.rst @@ -126,7 +126,7 @@ If instead you pass a :class:`Transaction` for the ``db_or_tr`` parameter, the t Note that by default, the operation will be retried an infinite number of times and the transaction will never time out. It is therefore recommended that the client choose a default transaction retry limit or timeout value that is suitable for their application. This can be set either at the transaction level using the ``set_retry_limit`` or ``set_timeout`` transaction options or at the database level with the ``set_transaction_retry_limit`` or ``set_transaction_timeout`` database options. For example, one can set a one minute timeout on each transaction and a default retry limit of 100 by calling:: @db.options.set_transaction_timeout(60000) # 60,000 ms = 1 minute - @db.options.set_retry_limit(100) + @db.options.set_transaction_retry_limit(100) Making some sample classes -------------------------- From 3b1e785e5b10e9c6e01665f699661a410888fb01 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Mon, 9 Nov 2020 18:44:50 +0000 Subject: [PATCH 064/317] Remove -Wno-unused-value for clang --- cmake/ConfigureCompiler.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/cmake/ConfigureCompiler.cmake b/cmake/ConfigureCompiler.cmake index 034df964f3..ac922584e8 100644 --- a/cmake/ConfigureCompiler.cmake +++ b/cmake/ConfigureCompiler.cmake @@ -233,7 +233,6 @@ else() -Wno-unused-function -Wno-unused-local-typedef -Wno-unused-parameter - -Wno-unused-value ) if (USE_CCACHE) add_compile_options( From c6768c4004a37e849a777d678c833910e3c37840 Mon Sep 17 00:00:00 2001 From: Young Liu Date: Mon, 9 Nov 2020 15:04:37 -0800 Subject: [PATCH 065/317] log router peek latency metrics --- .gitignore | 1 + fdbserver/LogRouter.actor.cpp | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 65c99da30e..ecf2e3fa54 100644 --- a/.gitignore +++ b/.gitignore @@ -89,3 +89,4 @@ flow/coveragetool/obj temp/ /compile_commands.json /.ccls-cache +.clangd/ \ No newline at end of file diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index f2d2936584..b858a96e2a 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -30,6 +30,8 @@ #include "fdbserver/ApplyMetadataMutation.h" #include "fdbserver/RecoveryState.h" #include "fdbclient/Atomic.h" +#include "flow/Arena.h" +#include "flow/Histogram.h" #include "flow/TDMetric.actor.h" #include "flow/actorcompiler.h" // This must be the last #include. @@ -91,6 +93,7 @@ struct LogRouterData { double getMoreTime = 0; double maxGetMoreTime = 0; int64_t generation = -1; + Histogram peekLatencyDist; struct PeekTrackerData { std::map>> sequence_version; @@ -126,7 +129,8 @@ struct LogRouterData { version(req.startVersion - 1), minPopped(0), generation(req.recoveryCount), startVersion(req.startVersion), allowPops(false), minKnownCommittedVersion(0), poppedVersion(0), foundEpochEnd(false), cc("LogRouter", dbgid.toString()), getMoreCount("GetMoreCount", cc), - getMoreBlockedCount("GetMoreBlockedCount", cc) { + getMoreBlockedCount("GetMoreBlockedCount", cc), + peekLatencyDist(dbgid.toString(), LiteralStringRef("LogRouterPeekLatency"), Histogram::Unit::microseconds) { //setup just enough of a logSet to be able to call getPushLocations logSet.logServers.resize(req.tLogLocalities.size()); logSet.tLogPolicy = req.tLogPolicy; @@ -266,8 +270,10 @@ ACTOR Future pullAsyncData( LogRouterData *self ) { state double startTime = now(); choose { when(wait( getMoreF ) ) { - self->getMoreTime += now() - startTime; - self->maxGetMoreTime = std::max(self->maxGetMoreTime, now() - startTime); + double peekTime = now() - startTime; + self->peekLatencyDist.sampleSeconds(peekTime); + self->getMoreTime += peekTime; + self->maxGetMoreTime = std::max(self->maxGetMoreTime, peekTime); break; } when( wait( dbInfoChange ) ) { //FIXME: does this actually happen? From 15d10d68cdf15fe1ceb60777123439c999aa641e Mon Sep 17 00:00:00 2001 From: Xiaoge Su Date: Tue, 3 Nov 2020 20:24:39 -0800 Subject: [PATCH 066/317] Cleanup DataDistributionQueue.actor.cpp and storageserver.actor.cpp --- fdbserver/DataDistributionQueue.actor.cpp | 29 +++++++++---------- fdbserver/storageserver.actor.cpp | 34 ++++++++++++----------- 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/fdbserver/DataDistributionQueue.actor.cpp b/fdbserver/DataDistributionQueue.actor.cpp index c4b507cb24..66000bbe98 100644 --- a/fdbserver/DataDistributionQueue.actor.cpp +++ b/fdbserver/DataDistributionQueue.actor.cpp @@ -18,8 +18,9 @@ * limitations under the License. */ -#include #include +#include +#include #include "flow/ActorCollection.h" #include "flow/Util.h" @@ -83,8 +84,8 @@ struct RelocateData { class ParallelTCInfo : public ReferenceCounted, public IDataDistributionTeam { public: - vector> teams; - vector tempServerIDs; + std::vector> teams; + std::vector tempServerIDs; ParallelTCInfo() {} @@ -105,11 +106,11 @@ public: } template - vector collect(std::function < vector(Reference)> func) { - vector result; + std::vector collect(std::function(Reference)> func) { + std::vector result; for (auto it = teams.begin(); it != teams.end(); it++) { - vector newItems = func(*it); + std::vector newItems = func(*it); result.insert(result.end(), newItems.begin(), newItems.end()); } return result; @@ -130,7 +131,7 @@ public: }); } - virtual vector getLastKnownServerInterfaces() { + virtual std::vector getLastKnownServerInterfaces() { return collect([](Reference team) { return team->getLastKnownServerInterfaces(); }); @@ -144,10 +145,10 @@ public: return totalSize; } - virtual vector const& getServerIDs() { + virtual std::vector const& getServerIDs() { tempServerIDs.clear(); for (auto it = teams.begin(); it != teams.end(); it++) { - vector const& childIDs = (*it)->getServerIDs(); + std::vector const& childIDs = (*it)->getServerIDs(); tempServerIDs.insert(tempServerIDs.end(), childIDs.begin(), childIDs.end()); } return tempServerIDs; @@ -194,7 +195,7 @@ public: } virtual Future updateStorageMetrics() { - vector> futures; + std::vector> futures; for (auto it = teams.begin(); it != teams.end(); it++) { futures.push_back((*it)->updateStorageMetrics()); @@ -262,7 +263,7 @@ public: }; struct Busyness { - vector ledger; + std::vector ledger; Busyness() : ledger( 10, 0 ) {} @@ -562,7 +563,7 @@ struct DDQueueData { if(keyServersEntries.size() < SERVER_KNOBS->DD_QUEUE_MAX_KEY_SERVERS) { for( int shard = 0; shard < keyServersEntries.size(); shard++ ) { - vector src, dest; + std::vector src, dest; decodeKeyServersValue( keyServersEntries[shard].value, src, dest ); ASSERT( src.size() ); for( int i = 0; i < src.size(); i++ ) { @@ -861,7 +862,7 @@ struct DDQueueData { startedHere++; // update both inFlightActors and inFlight key range maps, cancelling deleted RelocateShards - vector ranges; + std::vector ranges; inFlightActors.getRangesAffectedByInsertion( rd.keys, ranges ); inFlightActors.cancel( KeyRangeRef( ranges.front().begin, ranges.back().end ) ); inFlight.insert( rd.keys, rd ); @@ -1433,7 +1434,7 @@ ACTOR Future dataDistributionQueue( state RelocateData launchData; state Future recordMetrics = delay(SERVER_KNOBS->DD_QUEUE_LOGGING_INTERVAL); - state vector> balancingFutures; + state std::vector> balancingFutures; state ActorCollectionNoErrors actors; state PromiseStream rangesComplete; diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 14c629b85a..09e98c3191 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -19,11 +19,16 @@ */ #include +#include +#include +#include + #include "fdbrpc/fdbrpc.h" #include "fdbrpc/LoadBalance.h" -#include "flow/IndexedSet.h" -#include "flow/Hash3.h" #include "flow/ActorCollection.h" +#include "flow/Hash3.h" +#include "flow/Histogram.h" +#include "flow/IndexedSet.h" #include "flow/SystemMonitor.h" #include "flow/Util.h" #include "fdbclient/Atomic.h" @@ -52,11 +57,8 @@ #include "fdbrpc/Smoother.h" #include "fdbrpc/Stats.h" #include "flow/TDMetric.actor.h" -#include -#include "flow/actorcompiler.h" // This must be the last #include. -using std::pair; -using std::make_pair; +#include "flow/actorcompiler.h" // This must be the last #include. #pragma region Data Structures @@ -240,13 +242,13 @@ struct UpdateEagerReadInfo { void finishKeyBegin() { std::sort(keyBegin.begin(), keyBegin.end()); keyBegin.resize( std::unique(keyBegin.begin(), keyBegin.end()) - keyBegin.begin() ); - std::sort(keys.begin(), keys.end(), [](const pair& lhs, const pair& rhs) { return (lhs.first < rhs.first) || (lhs.first == rhs.first && lhs.second > rhs.second); } ); - keys.resize(std::unique(keys.begin(), keys.end(), [](const pair& lhs, const pair& rhs) { return lhs.first == rhs.first; } ) - keys.begin()); + std::sort(keys.begin(), keys.end(), [](const std::pair& lhs, const std::pair& rhs) { return (lhs.first < rhs.first) || (lhs.first == rhs.first && lhs.second > rhs.second); } ); + keys.resize(std::unique(keys.begin(), keys.end(), [](const std::pair& lhs, const std::pair& rhs) { return lhs.first == rhs.first; } ) - keys.begin()); //value gets populated in doEagerReads } Optional& getValue(KeyRef key) { - int i = std::lower_bound(keys.begin(), keys.end(), pair(key, 0), [](const pair& lhs, const pair& rhs) { return lhs.first < rhs.first; } ) - keys.begin(); + int i = std::lower_bound(keys.begin(), keys.end(),std::pair(key, 0), [](const std::pair& lhs, const std::pair& rhs) { return lhs.first < rhs.first; } ) - keys.begin(); ASSERT( i < keys.size() && keys[i].first == key ); return value[i]; } @@ -297,8 +299,8 @@ private: public: Tag tag; - vector> history; - vector> allHistory; + vector> history; + vector> allHistory; Version poppedAllAfter; std::map freeable; // for each version, an Arena that must be held until that version is < oldestVersion Arena lastArena; @@ -345,8 +347,8 @@ public: poppedAllAfter = std::numeric_limits::max(); } - vector>* hist = &history; - vector> allHistoryCopy; + vector>* hist = &history; + vector> allHistoryCopy; if(popAllTags) { allHistoryCopy = allHistory; hist = &allHistoryCopy; @@ -1950,7 +1952,7 @@ ACTOR Future fetchKeys( StorageServer *data, AddingShard* shard ) { state TraceInterval interval("FetchKeys"); state KeyRange keys = shard->keys; state Future warningLogger = logFetchKeysWarning(shard); - state double startt = now(); + state const double startTime = now(); state int fetchBlockBytes = BUGGIFY ? SERVER_KNOBS->BUGGIFY_BLOCK_BYTES : SERVER_KNOBS->FETCH_BLOCK_BYTES; // delay(0) to force a return to the run loop before the work of fetchKeys is started. @@ -1989,7 +1991,7 @@ ACTOR Future fetchKeys( StorageServer *data, AddingShard* shard ) { state double executeStart = now(); ++data->counters.fetchWaitingCount; - data->counters.fetchWaitingMS += 1000*(executeStart - startt); + data->counters.fetchWaitingMS += 1000 * (executeStart - startTime); // Fetch keys gets called while the update actor is processing mutations. data->version will not be updated until all mutations for a version // have been processed. We need to take the durableVersionLock to ensure data->version is greater than the version of the mutation which caused @@ -2214,7 +2216,7 @@ ACTOR Future fetchKeys( StorageServer *data, AddingShard* shard ) { TraceEvent(SevError, "FetchKeysError", data->thisServerID) .error(e) - .detail("Elapsed", now()-startt) + .detail("Elapsed", now() - startTime) .detail("KeyBegin", keys.begin) .detail("KeyEnd",keys.end); if (e.code() != error_code_actor_cancelled) From e6aedfbf5767f0389da2433aaf9a8f0286c63b42 Mon Sep 17 00:00:00 2001 From: Xiaoge Su Date: Sat, 7 Nov 2020 20:38:02 -0800 Subject: [PATCH 067/317] Report latency/bandwidth/size in each fetchKEys call --- fdbserver/StorageMetrics.actor.h | 5 ++ fdbserver/storageserver.actor.cpp | 92 ++++++++++++++++++++++++++++++- 2 files changed, 96 insertions(+), 1 deletion(-) diff --git a/fdbserver/StorageMetrics.actor.h b/fdbserver/StorageMetrics.actor.h index 3a84063679..48679aa977 100644 --- a/fdbserver/StorageMetrics.actor.h +++ b/fdbserver/StorageMetrics.actor.h @@ -27,6 +27,11 @@ #include "fdbserver/Knobs.h" #include "flow/actorcompiler.h" // This must be the last #include. +const StringRef STORAGESERVER_HISTOGRAM_GROUP = LiteralStringRef("StorageServer"); +const StringRef FETCH_KEYS_LATENCY_HISTOGRAM = LiteralStringRef("FetchKeysLatency"); +const StringRef FETCH_KEYS_BYTES_HISTOGRAM = LiteralStringRef("FetchKeysSize"); +const StringRef FETCH_KEYS_BYTES_PER_SECOND_HISTOGRAM = LiteralStringRef("FetchKeysBandwidth"); + struct StorageMetricSample { IndexedSet sample; int64_t metricUnitsPerSample; diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 09e98c3191..4fc51ad589 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -298,6 +298,55 @@ private: std::map> mutationLog; // versions (durableVersion, version] public: +public: + // Histograms + struct FetchKeysHistograms { + const Reference latency; + const Reference bytes; + const Reference bandwidth; + + FetchKeysHistograms(const Reference latency_, const Reference bytes_, const Reference bandwidth_) + : latency(latency_), bytes(bytes_), bandwidth(bandwidth_) {} + } fetchKeysHistograms; + + class CurrentRunningFetchKeys { + std::unordered_map startTimeMap; + std::unordered_map keyRangeMap; + + static const StringRef emptyString; + static const KeyRangeRef emptyKeyRange; + public: + void recordStart(const UID id, const KeyRange keyRange) { + startTimeMap[id] = now(); + keyRangeMap[id] = keyRange; + } + + void recordFinish(const UID id) { + startTimeMap.erase(id); + keyRangeMap.erase(id); + } + + std::pair longestTime() const { + if (numRunning() == 0) { + return {-1, emptyKeyRange}; + } + + const double now_= now(); + double longest = 0; + UID UIDofLongest; + for (const auto kv: startTimeMap) { + const double currentRunningTime = now_ - kv.second; + if (longest < currentRunningTime) { + longest = currentRunningTime; + UIDofLongest = kv.first; + } + } + return {longest, keyRangeMap.at(UIDofLongest)}; + } + + int numRunning() const { return startTimeMap.size(); } + } currentRunningFetchKeys; + Tag tag; vector> history; vector> allHistory; @@ -538,7 +587,12 @@ public: } counters; StorageServer(IKeyValueStore* storage, Reference> const& db, StorageServerInterface const& ssi) - : instanceID(deterministicRandom()->randomUniqueID().first()), + : fetchKeysHistograms( + Histogram::getHistogram(STORAGESERVER_HISTOGRAM_GROUP, FETCH_KEYS_LATENCY_HISTOGRAM, Histogram::Unit::microseconds), + Histogram::getHistogram(STORAGESERVER_HISTOGRAM_GROUP, FETCH_KEYS_BYTES_HISTOGRAM, Histogram::Unit::bytes), + Histogram::getHistogram(STORAGESERVER_HISTOGRAM_GROUP, FETCH_KEYS_BYTES_PER_SECOND_HISTOGRAM, Histogram::Unit::bytes) + ), + instanceID(deterministicRandom()->randomUniqueID().first()), storage(this, storage), db(db), lastTLogVersion(0), lastVersionWithData(0), restoredVersion(0), rebootAfterDurableVersion(std::numeric_limits::max()), @@ -664,6 +718,9 @@ public: } }; +const StringRef StorageServer::CurrentRunningFetchKeys::emptyString= LiteralStringRef(""); +const KeyRangeRef StorageServer::CurrentRunningFetchKeys::emptyKeyRange = KeyRangeRef(StorageServer::CurrentRunningFetchKeys::emptyString, StorageServer::CurrentRunningFetchKeys::emptyString); + // If and only if key:=value is in (storage+versionedData), // NOT ACTUALLY: and key < allKeys.end, // and H(key) < |key+value|/bytesPerSample, // let sampledSize = max(|key+value|,bytesPerSample) @@ -1948,12 +2005,44 @@ ACTOR Future logFetchKeysWarning(AddingShard* shard) { } } +class FetchKeysMetricReporter { + const UID uid; + const double startTime; + int fetchedBytes; + StorageServer::FetchKeysHistograms& histograms; + StorageServer::CurrentRunningFetchKeys& currentRunning; + +public: + FetchKeysMetricReporter(const UID& uid_, const double startTime_, const KeyRange& keyRange, StorageServer::FetchKeysHistograms& histograms_, StorageServer::CurrentRunningFetchKeys& currentRunning_) + : uid(uid_), startTime(startTime_), fetchedBytes(0), histograms(histograms_), currentRunning(currentRunning_) { + + currentRunning.recordStart(uid, keyRange); + } + + void addFetchedBytes(const int bytes) { fetchedBytes += bytes; } + + ~FetchKeysMetricReporter() { + const double latency = now() - startTime; + if (latency == 0) return; + + const uint32_t bandwidth = fetchedBytes / latency; + + histograms.latency->sampleSeconds(latency); + histograms.bytes->sample(fetchedBytes); + histograms.bandwidth->sample(bandwidth); + + currentRunning.recordFinish(uid); + } +}; + ACTOR Future fetchKeys( StorageServer *data, AddingShard* shard ) { + state const UID fetchKeysID = deterministicRandom()->randomUniqueID(); state TraceInterval interval("FetchKeys"); state KeyRange keys = shard->keys; state Future warningLogger = logFetchKeysWarning(shard); state const double startTime = now(); state int fetchBlockBytes = BUGGIFY ? SERVER_KNOBS->BUGGIFY_BLOCK_BYTES : SERVER_KNOBS->FETCH_BLOCK_BYTES; + state FetchKeysMetricReporter metricReporter(fetchKeysID, startTime, keys, data->fetchKeysHistograms, data->currentRunningFetchKeys); // delay(0) to force a return to the run loop before the work of fetchKeys is started. // This allows adding->start() to be called inline with CSK. @@ -2031,6 +2120,7 @@ ACTOR Future fetchKeys( StorageServer *data, AddingShard* shard ) { debugKeyRange("fetchRange", fetchVersion, keys); for(auto k = this_block.begin(); k != this_block.end(); ++k) debugMutation("fetch", fetchVersion, MutationRef(MutationRef::SetValue, k->key, k->value)); + metricReporter.addFetchedBytes(expectedSize); data->counters.bytesFetched += expectedSize; if( fetchBlockBytes > expectedSize ) { holdingFKPL.release( fetchBlockBytes - expectedSize ); From da31eb3d89f884c09b9e2d0165447c3c499c2150 Mon Sep 17 00:00:00 2001 From: Xiaoge Su Date: Sat, 7 Nov 2020 20:22:29 -0800 Subject: [PATCH 068/317] Periodically report the fetchKeys status --- fdbserver/Knobs.cpp | 2 ++ fdbserver/Knobs.h | 2 ++ fdbserver/storageserver.actor.cpp | 24 ++++++++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index a265665f01..1524c69413 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -509,6 +509,8 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( BEHIND_CHECK_COUNT, 2 ); init( BEHIND_CHECK_VERSIONS, 5 * VERSIONS_PER_SECOND ); init( WAIT_METRICS_WRONG_SHARD_CHANCE, isSimulated ? 1.0 : 0.1 ); + init( REPORT_DD_METRICS, true ); + init( DD_METRICS_REPORT_INTERVAL, 30.0 ); //Wait Failure init( MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS, 250 ); if( randomize && BUGGIFY ) MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS = 2; diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 674fbde746..b5ae218af7 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -452,6 +452,8 @@ public: int BEHIND_CHECK_COUNT; int64_t BEHIND_CHECK_VERSIONS; double WAIT_METRICS_WRONG_SHARD_CHANCE; + bool REPORT_DD_METRICS; + double DD_METRICS_REPORT_INTERVAL; //Wait Failure int MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS; diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 4fc51ad589..bd5e37c3b3 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -3567,6 +3567,29 @@ ACTOR Future checkBehind( StorageServer* self ) { } } +ACTOR Future reportStorageServerState(StorageServer* self) { + if (!SERVER_KNOBS->REPORT_DD_METRICS) { + return Void(); + } + + loop { + wait(delay(SERVER_KNOBS->DD_METRICS_REPORT_INTERVAL)); + + const auto numRunningFetchKeys = self->currentRunningFetchKeys.numRunning(); + if (numRunningFetchKeys == 0) { + continue; + } + + const auto longestRunningFetchKeys = self->currentRunningFetchKeys.longestTime(); + TraceEvent(SevInfo, "FetchKeyCurrentStatus") + .detail("Timestamp", now()) + .detail("LongestRunningTime", longestRunningFetchKeys.first) + .detail("StartKey", longestRunningFetchKeys.second.begin) + .detail("EndKey", longestRunningFetchKeys.second.end) + .detail("NumRunning", numRunningFetchKeys); + } +} + ACTOR Future storageServerCore( StorageServer* self, StorageServerInterface ssi ) { state Future doUpdate = Void(); @@ -3584,6 +3607,7 @@ ACTOR Future storageServerCore( StorageServer* self, StorageServerInterfac actors.add(metricsCore(self, ssi)); actors.add(logLongByteSampleRecovery(self->byteSampleRecovery)); actors.add(checkBehind(self)); + actors.add(reportStorageServerState(self)); self->coreStarted.send( Void() ); From bc688a23c5985f478480a7850b90427778b8e846 Mon Sep 17 00:00:00 2001 From: Young Liu Date: Mon, 9 Nov 2020 18:54:21 -0800 Subject: [PATCH 069/317] Use histogram new API and change group name --- fdbserver/LogRouter.actor.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index b858a96e2a..9f47792c46 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -93,7 +93,7 @@ struct LogRouterData { double getMoreTime = 0; double maxGetMoreTime = 0; int64_t generation = -1; - Histogram peekLatencyDist; + Reference peekLatencyDist; struct PeekTrackerData { std::map>> sequence_version; @@ -130,7 +130,8 @@ struct LogRouterData { allowPops(false), minKnownCommittedVersion(0), poppedVersion(0), foundEpochEnd(false), cc("LogRouter", dbgid.toString()), getMoreCount("GetMoreCount", cc), getMoreBlockedCount("GetMoreBlockedCount", cc), - peekLatencyDist(dbgid.toString(), LiteralStringRef("LogRouterPeekLatency"), Histogram::Unit::microseconds) { + peekLatencyDist(Histogram::getHistogram(LiteralStringRef("LogRouter"), LiteralStringRef("PeekTLogLatency"), + Histogram::Unit::microseconds)) { //setup just enough of a logSet to be able to call getPushLocations logSet.logServers.resize(req.tLogLocalities.size()); logSet.tLogPolicy = req.tLogPolicy; @@ -271,7 +272,7 @@ ACTOR Future pullAsyncData( LogRouterData *self ) { choose { when(wait( getMoreF ) ) { double peekTime = now() - startTime; - self->peekLatencyDist.sampleSeconds(peekTime); + self->peekLatencyDist->sampleSeconds(peekTime); self->getMoreTime += peekTime; self->maxGetMoreTime = std::max(self->maxGetMoreTime, peekTime); break; From aa4652d965fd66874b1082d9ac98b349952db92d Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Mon, 9 Nov 2020 19:15:51 -0800 Subject: [PATCH 070/317] Lower DELAY_CC_WORST_FIT_CANDIDACY_SECONDS for LowLatencyWorkload --- fdbserver/workloads/LowLatency.actor.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fdbserver/workloads/LowLatency.actor.cpp b/fdbserver/workloads/LowLatency.actor.cpp index f9d807f095..b9fd73f107 100644 --- a/fdbserver/workloads/LowLatency.actor.cpp +++ b/fdbserver/workloads/LowLatency.actor.cpp @@ -50,6 +50,10 @@ struct LowLatencyWorkload : TestWorkload { virtual std::string description() { return "LowLatency"; } virtual Future setup( Database const& cx ) { + if (g_network->isSimulated()) { + ASSERT(const_cast(SERVER_KNOBS)->setKnob("min_delay_cc_worst_fit_candidacy_seconds", "5")); + ASSERT(const_cast(SERVER_KNOBS)->setKnob("max_delay_cc_worst_fit_candidacy_seconds", "10")); + } return Void(); } From 1976f2c371437e933d6a7469ba9d1ef913d59e62 Mon Sep 17 00:00:00 2001 From: Vishesh Yadav Date: Thu, 5 Nov 2020 12:14:35 -0800 Subject: [PATCH 071/317] FlowTransport: Sample connect latencies --- fdbrpc/FlowTransport.actor.cpp | 9 ++++++++- fdbrpc/FlowTransport.h | 3 ++- flow/Knobs.cpp | 1 + flow/Knobs.h | 1 + 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/fdbrpc/FlowTransport.actor.cpp b/fdbrpc/FlowTransport.actor.cpp index 1e18132bd6..cad8b88916 100644 --- a/fdbrpc/FlowTransport.actor.cpp +++ b/fdbrpc/FlowTransport.actor.cpp @@ -238,12 +238,18 @@ ACTOR Future pingLatencyLogger(TransportData* self) { .detail("BytesSent", peer->bytesSent - peer->lastLoggedBytesSent) .detail("ConnectOutgoingCount", peer->connectOutgoingCount) .detail("ConnectIncomingCount", peer->connectIncomingCount) - .detail("ConnectFailedCount", peer->connectFailedCount); + .detail("ConnectFailedCount", peer->connectFailedCount) + .detail("ConnectMinLatency", peer->connectLatencies.min()) + .detail("ConnectMaxLatency", peer->connectLatencies.max()) + .detail("ConnectMeanLatency", peer->connectLatencies.mean()) + .detail("ConnectMedianLatency", peer->connectLatencies.median()) + .detail("ConnectP90Latency", peer->connectLatencies.percentile(0.90)); peer->lastLoggedTime = now(); peer->connectOutgoingCount = 0; peer->connectIncomingCount = 0; peer->connectFailedCount = 0; peer->pingLatencies.clear(); + peer->connectLatencies.clear(); peer->lastLoggedBytesReceived = peer->bytesReceived; peer->lastLoggedBytesSent = peer->bytesSent; wait(delay(FLOW_KNOBS->PING_LOGGING_INTERVAL)); @@ -496,6 +502,7 @@ ACTOR Future connectionKeeper( Reference self, when( Reference _conn = wait( INetworkConnections::net()->connect(self->destination) ) ) { conn = _conn; wait(conn->connectHandshake()); + self->connectLatencies.addSample(now() - self->lastConnectTime); if (FlowTransport::isClient()) { IFailureMonitor::failureMonitor().setStatus(self->destination, FailureStatus(false)); } diff --git a/fdbrpc/FlowTransport.h b/fdbrpc/FlowTransport.h index 0fd4fa2a17..436c3c81ed 100644 --- a/fdbrpc/FlowTransport.h +++ b/fdbrpc/FlowTransport.h @@ -135,6 +135,7 @@ struct Peer : public ReferenceCounted { int connectOutgoingCount; int connectIncomingCount; int connectFailedCount; + ContinuousSample connectLatencies; explicit Peer(TransportData* transport, NetworkAddress const& destination) : transport(transport), destination(destination), outgoingConnectionIdle(true), lastConnectTime(0.0), @@ -142,7 +143,7 @@ struct Peer : public ReferenceCounted { incompatibleProtocolVersionNewer(false), peerReferences(-1), bytesReceived(0), lastDataPacketSentTime(now()), pingLatencies(destination.isPublic() ? FLOW_KNOBS->PING_SAMPLE_AMOUNT : 1), lastLoggedBytesReceived(0), bytesSent(0), lastLoggedBytesSent(0), lastLoggedTime(0.0), connectOutgoingCount(0), connectIncomingCount(0), - connectFailedCount(0) {} + connectFailedCount(0), connectLatencies(destination.isPublic() ? FLOW_KNOBS->NETWORK_CONNECT_SAMPLE_AMOUNT : 1) {} void send(PacketBuffer* pb, ReliablePacket* rp, bool firstUnsent); diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index f62d074445..3df410ddcb 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -74,6 +74,7 @@ FlowKnobs::FlowKnobs(bool randomize, bool isSimulated) { init( TOO_MANY_CONNECTIONS_CLOSED_TIMEOUT, 20.0 ); init( PING_LOGGING_INTERVAL, 3.0 ); init( PING_SAMPLE_AMOUNT, 100 ); + init( NETWORK_CONNECT_SAMPLE_AMOUNT, 100 ); init( TLS_CERT_REFRESH_DELAY_SECONDS, 12*60*60 ); init( TLS_SERVER_CONNECTION_THROTTLE_TIMEOUT, 9.0 ); diff --git a/flow/Knobs.h b/flow/Knobs.h index 83420c3db4..d42807305c 100644 --- a/flow/Knobs.h +++ b/flow/Knobs.h @@ -92,6 +92,7 @@ public: int USE_OBJECT_SERIALIZER; double PING_LOGGING_INTERVAL; int PING_SAMPLE_AMOUNT; + int NETWORK_CONNECT_SAMPLE_AMOUNT; int TLS_CERT_REFRESH_DELAY_SECONDS; double TLS_SERVER_CONNECTION_THROTTLE_TIMEOUT; From 6cea86b795c8a7b1bab797a4d7f0ff2ca074d3b4 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Tue, 10 Nov 2020 16:05:17 -0800 Subject: [PATCH 072/317] Address review comments --- fdbserver/MasterProxyServer.actor.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index bb8df548fc..8c4d3562dc 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -69,7 +69,7 @@ struct ProxyStats { double percentageOfGRVQueueProcessed; double percentageOfBatchGRVQueueProcessed; - LatencySample normalTxnGRVTimeInQueue; + LatencySample defaultTxnGRVTimeInQueue; LatencySample batchTxnGRVTimeInQueue; LatencySample commitLatencySample; @@ -103,18 +103,20 @@ struct ProxyStats { SERVER_KNOBS->LATENCY_SAMPLE_SIZE), commitLatencyBands("CommitLatencyBands", id, SERVER_KNOBS->STORAGE_LOGGING_DELAY), grvLatencyBands("GRVLatencyBands", id, SERVER_KNOBS->STORAGE_LOGGING_DELAY), - normalTxnGRVTimeInQueue("NormalTxnGRVTimeInQueue", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, - SERVER_KNOBS->LATENCY_SAMPLE_SIZE), + defaultTxnGRVTimeInQueue("DefaultTxnGRVTimeInQueue", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, + SERVER_KNOBS->LATENCY_SAMPLE_SIZE), batchTxnGRVTimeInQueue("BatchTxnGRVTimeInQueue", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, - SERVER_KNOBS->LATENCY_SAMPLE_SIZE) { + SERVER_KNOBS->LATENCY_SAMPLE_SIZE), + transactionRateAllowed(0), batchTransactionRateAllowed(0), transactionLimit(0), batchTransactionLimit(0), + percentageOfGRVQueueProcessed(0), percentageOfBatchGRVQueueProcessed(0) { specialCounter(cc, "LastAssignedCommitVersion", [this](){return this->lastCommitVersionAssigned;}); specialCounter(cc, "Version", [pVersion](){return *pVersion; }); specialCounter(cc, "CommittedVersion", [pCommittedVersion](){ return pCommittedVersion->get(); }); specialCounter(cc, "CommitBatchesMemBytesCount", [commitBatchesMemBytesCountPtr]() { return *commitBatchesMemBytesCountPtr; }); // The rate at which the limit(budget) is allowed to grow. - specialCounter(cc, "NormalTransactionRateAllowed", [this]() { return this->transactionRateAllowed; }); + specialCounter(cc, "SystemAndDefaultTxnRateAllowed", [this]() { return this->transactionRateAllowed; }); specialCounter(cc, "BatchTransactionRateAllowed", [this]() { return this->batchTransactionRateAllowed; }); - specialCounter(cc, "NormalTransactionLimit", [this]() { return this->transactionLimit; }); + specialCounter(cc, "SystemAndDefaultTxnLimit", [this]() { return this->transactionLimit; }); specialCounter(cc, "BatchTransactionLimit", [this]() { return this->batchTransactionLimit; }); specialCounter(cc, "PercentageOfGRVQueueProcessed", [this]() { return this->percentageOfGRVQueueProcessed; }); specialCounter(cc, "PercentageOfBatchGRVQueueProcessed", @@ -1396,10 +1398,9 @@ ACTOR static Future transactionStarter(MasterProxyInterface proxy, Referen double currentTime = g_network->timer(); if (req.priority() >= GetReadVersionRequest::PRIORITY_SYSTEM_IMMEDIATE) { systemTransactionsStarted[req.flags & 1] += tc; - stats->normalTxnGRVTimeInQueue.addMeasurement(currentTime - req.requestTime()); } else if (req.priority() >= GetReadVersionRequest::PRIORITY_DEFAULT) { defaultPriTransactionsStarted[req.flags & 1] += tc; - stats->normalTxnGRVTimeInQueue.addMeasurement(currentTime - req.requestTime()); + stats->defaultTxnGRVTimeInQueue.addMeasurement(currentTime - req.requestTime()); } else { batchPriTransactionsStarted[req.flags & 1] += tc; stats->batchTxnGRVTimeInQueue.addMeasurement(currentTime - req.requestTime()); From f467524e06823dd3f0c18812955eba02b12753be Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Wed, 11 Nov 2020 00:24:23 +0000 Subject: [PATCH 073/317] Don't dereference self on broken_promise --- fdbserver/DataDistributionTracker.actor.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fdbserver/DataDistributionTracker.actor.cpp b/fdbserver/DataDistributionTracker.actor.cpp index e5d695f24f..947bbf7bb6 100644 --- a/fdbserver/DataDistributionTracker.actor.cpp +++ b/fdbserver/DataDistributionTracker.actor.cpp @@ -621,8 +621,10 @@ ACTOR Future shardTracker( wait( delay(0, TaskPriority::DataDistribution) ); } } catch (Error& e) { - if (e.code() != error_code_actor_cancelled) - self->output.sendError(e); // Propagate failure to dataDistributionTracker + // If e is broken_promise then self may have already been deleted + if (e.code() != error_code_actor_cancelled && e.code() != error_code_broken_promise) { + self->output.sendError(e); // Propagate failure to dataDistributionTracker + } throw e; } } From 0b8e91b9c02c00f7de1c46307c084303f45934c3 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Wed, 11 Nov 2020 14:01:01 -0800 Subject: [PATCH 074/317] Do not count system priority and default priority txns together. --- fdbserver/MasterProxyServer.actor.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 8c4d3562dc..40ec7299ad 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -66,7 +66,7 @@ struct ProxyStats { double transactionRateAllowed, batchTransactionRateAllowed; double transactionLimit, batchTransactionLimit; // how much of the GRV requests queue was processed in one attempt to hand out read version. - double percentageOfGRVQueueProcessed; + double percentageOfDefaultGRVQueueProcessed; double percentageOfBatchGRVQueueProcessed; LatencySample defaultTxnGRVTimeInQueue; @@ -108,7 +108,7 @@ struct ProxyStats { batchTxnGRVTimeInQueue("BatchTxnGRVTimeInQueue", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, SERVER_KNOBS->LATENCY_SAMPLE_SIZE), transactionRateAllowed(0), batchTransactionRateAllowed(0), transactionLimit(0), batchTransactionLimit(0), - percentageOfGRVQueueProcessed(0), percentageOfBatchGRVQueueProcessed(0) { + percentageOfDefaultGRVQueueProcessed(0), percentageOfBatchGRVQueueProcessed(0) { specialCounter(cc, "LastAssignedCommitVersion", [this](){return this->lastCommitVersionAssigned;}); specialCounter(cc, "Version", [pVersion](){return *pVersion; }); specialCounter(cc, "CommittedVersion", [pCommittedVersion](){ return pCommittedVersion->get(); }); @@ -118,7 +118,8 @@ struct ProxyStats { specialCounter(cc, "BatchTransactionRateAllowed", [this]() { return this->batchTransactionRateAllowed; }); specialCounter(cc, "SystemAndDefaultTxnLimit", [this]() { return this->transactionLimit; }); specialCounter(cc, "BatchTransactionLimit", [this]() { return this->batchTransactionLimit; }); - specialCounter(cc, "PercentageOfGRVQueueProcessed", [this]() { return this->percentageOfGRVQueueProcessed; }); + specialCounter(cc, "PercentageOfDefaultGRVQueueProcessed", + [this]() { return this->percentageOfDefaultGRVQueueProcessed; }); specialCounter(cc, "PercentageOfBatchGRVQueueProcessed", [this]() { return this->percentageOfBatchGRVQueueProcessed; }); logger = traceCounters("ProxyMetrics", id, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "ProxyMetrics"); @@ -1364,7 +1365,6 @@ ACTOR static Future transactionStarter(MasterProxyInterface proxy, Referen int requestsToStart = 0; - uint32_t systemQueueSize = systemQueue.size(); uint32_t defaultQueueSize = defaultQueue.size(); uint32_t batchQueueSize = batchQueue.size(); while (requestsToStart < SERVER_KNOBS->START_TRANSACTION_MAX_REQUESTS_TO_START) { @@ -1436,7 +1436,7 @@ ACTOR static Future transactionStarter(MasterProxyInterface proxy, Referen g_traceBatch.addEvent("TransactionDebug", debugID.get().first(), "MasterProxyServer.masterProxyServerCore.Broadcast"); } - int nonBatchGRVProcessed = 0; + int defaultGRVProcessed = 0; int batchGRVProcessed = 0; for (int i = 0; i < start.size(); i++) { if (start[i].size()) { @@ -1447,11 +1447,11 @@ ACTOR static Future transactionStarter(MasterProxyInterface proxy, Referen if (i == 0) { addActor.send(timeReply(readVersionReply, replyTimes)); } - nonBatchGRVProcessed += systemTransactionsStarted[i] + defaultPriTransactionsStarted[i]; + defaultGRVProcessed += defaultPriTransactionsStarted[i]; batchGRVProcessed += batchPriTransactionsStarted[i]; } } - stats->percentageOfGRVQueueProcessed = (double)nonBatchGRVProcessed / (systemQueueSize + defaultQueueSize); + stats->percentageOfDefaultGRVQueueProcessed = (double)defaultGRVProcessed / defaultQueueSize; stats->percentageOfBatchGRVQueueProcessed = (double)batchGRVProcessed / batchQueueSize; } } From c2dd7d1d38f8c0caac37ef074f2f45bc1fde1813 Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Wed, 11 Nov 2020 22:27:52 -0800 Subject: [PATCH 075/317] Remove unresolved questions --- fdbclient/FDBTypes.h | 2 +- fdbrpc/LoadBalance.actor.h | 3 +-- fdbserver/DataDistributionTracker.actor.cpp | 1 - fdbserver/TLogServer.actor.cpp | 2 +- fdbserver/storageserver.actor.cpp | 2 +- 5 files changed, 4 insertions(+), 6 deletions(-) diff --git a/fdbclient/FDBTypes.h b/fdbclient/FDBTypes.h index 55da3c8ab5..aed4122f7e 100644 --- a/fdbclient/FDBTypes.h +++ b/fdbclient/FDBTypes.h @@ -42,7 +42,7 @@ enum { tagLocalityRemoteLog = -3, // tag created by log router for remote tLogs tagLocalityUpgraded = -4, tagLocalitySatellite = -5, - tagLocalityLogRouterMapped = -6, // Q: definition? I guess it is used by pseudo tags + tagLocalityLogRouterMapped = -6, // The pseudo tag used by log routers to pop the real LogRouter tag (i.e., -2) tagLocalityTxs = -7, tagLocalityInvalid = -99 }; // The TLog and LogRouter require these number to be as compact as possible diff --git a/fdbrpc/LoadBalance.actor.h b/fdbrpc/LoadBalance.actor.h index f156d8c791..e4a99d50df 100644 --- a/fdbrpc/LoadBalance.actor.h +++ b/fdbrpc/LoadBalance.actor.h @@ -175,8 +175,7 @@ Future loadBalance( Reference> alternatives, RequestStream Interface::*channel, Request request = Request(), TaskPriority taskID = TaskPriority::DefaultPromiseEndpoint, bool atMostOnce = false, // if true, throws request_maybe_delivered() instead of retrying automatically - QueueModel* model = NULL) // Q: What does the function do differently when model = NULL? -{ + QueueModel* model = NULL) { state Future> firstRequest; state Optional firstRequestEndpoint; state Future> secondRequest; diff --git a/fdbserver/DataDistributionTracker.actor.cpp b/fdbserver/DataDistributionTracker.actor.cpp index 2987ff881a..0c6234f6ab 100644 --- a/fdbserver/DataDistributionTracker.actor.cpp +++ b/fdbserver/DataDistributionTracker.actor.cpp @@ -527,7 +527,6 @@ Future shardMerger( // becomes BandwidthStatusLow less than DD_LOW_BANDWIDTH_DELAY ago, the merging logic will stop at the shard; // ShardCount: The number of non-splittable shards that are merged. Each shard is defined in self->shards may have // more than 1 shards. - // Q: Is ShardCount's definition correct? TraceEvent("RelocateShardMergeMetrics", self->distributorId) .detail("OldKeys", keys) .detail("NewKeys", mergeRange) diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index 7b70c85de7..f4183c660a 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -2243,7 +2243,7 @@ void removeLog( TLogData* self, Reference logData ) { } } -// tLog pull data from LR +// remote tLog pull data from log routers ACTOR Future pullAsyncData( TLogData* self, Reference logData, std::vector tags, Version beginVersion, Optional endVersion, bool poppedIsKnownCommitted ) { state Future dbInfoChange = Void(); state Reference r; diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index f6ddd621bb..28b4ec3543 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -2096,7 +2096,7 @@ ACTOR Future fetchKeys( StorageServer *data, AddingShard* shard ) { while (!shard->updates.empty() && shard->updates[0].version <= fetchVersion) shard->updates.pop_front(); //FIXME: remove when we no longer support upgrades from 5.X - if (debug_getRangeRetries >= 100) { // Q: Is this the reason why fetch may fetch from primary + if (debug_getRangeRetries >= 100) { data->cx->enableLocalityLoadBalance = false; // TODO: Add SevWarnAlways to say it was disabled. } From 0fd43a5bbb4b8ad3ed11033d2efb267288df6feb Mon Sep 17 00:00:00 2001 From: Xiaoge Su Date: Thu, 12 Nov 2020 11:43:25 -0800 Subject: [PATCH 076/317] Update per comments --- fdbserver/storageserver.actor.cpp | 82 ++++++++++++++++++------------- 1 file changed, 47 insertions(+), 35 deletions(-) diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index bd5e37c3b3..5805466304 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -305,8 +305,13 @@ public: const Reference bytes; const Reference bandwidth; - FetchKeysHistograms(const Reference latency_, const Reference bytes_, const Reference bandwidth_) - : latency(latency_), bytes(bytes_), bandwidth(bandwidth_) {} + FetchKeysHistograms() + : latency(Histogram::getHistogram(STORAGESERVER_HISTOGRAM_GROUP, FETCH_KEYS_LATENCY_HISTOGRAM, + Histogram::Unit::microseconds)), + bytes(Histogram::getHistogram(STORAGESERVER_HISTOGRAM_GROUP, FETCH_KEYS_BYTES_HISTOGRAM, + Histogram::Unit::bytes)), + bandwidth(Histogram::getHistogram(STORAGESERVER_HISTOGRAM_GROUP, FETCH_KEYS_BYTES_PER_SECOND_HISTOGRAM, + Histogram::Unit::bytes)) {} } fetchKeysHistograms; class CurrentRunningFetchKeys { @@ -331,11 +336,11 @@ public: return {-1, emptyKeyRange}; } - const double now_= now(); + const double currentTime = now(); double longest = 0; UID UIDofLongest; for (const auto kv: startTimeMap) { - const double currentRunningTime = now_ - kv.second; + const double currentRunningTime = currentTime - kv.second; if (longest < currentRunningTime) { longest = currentRunningTime; UIDofLongest = kv.first; @@ -586,27 +591,18 @@ public: } } counters; - StorageServer(IKeyValueStore* storage, Reference> const& db, StorageServerInterface const& ssi) - : fetchKeysHistograms( - Histogram::getHistogram(STORAGESERVER_HISTOGRAM_GROUP, FETCH_KEYS_LATENCY_HISTOGRAM, Histogram::Unit::microseconds), - Histogram::getHistogram(STORAGESERVER_HISTOGRAM_GROUP, FETCH_KEYS_BYTES_HISTOGRAM, Histogram::Unit::bytes), - Histogram::getHistogram(STORAGESERVER_HISTOGRAM_GROUP, FETCH_KEYS_BYTES_PER_SECOND_HISTOGRAM, Histogram::Unit::bytes) - ), - instanceID(deterministicRandom()->randomUniqueID().first()), - storage(this, storage), db(db), - lastTLogVersion(0), lastVersionWithData(0), restoredVersion(0), - rebootAfterDurableVersion(std::numeric_limits::max()), - durableInProgress(Void()), - versionLag(0), primaryLocality(tagLocalityInvalid), - updateEagerReads(0), - shardChangeCounter(0), - fetchKeysParallelismLock(SERVER_KNOBS->FETCH_KEYS_PARALLELISM_BYTES), - shuttingDown(false), debug_inApplyUpdate(false), debug_lastValidateTime(0), watchBytes(0), numWatches(0), - logProtocol(0), counters(this), tag(invalidTag), maxQueryQueue(0), thisServerID(ssi.id()), - readQueueSizeMetric(LiteralStringRef("StorageServer.ReadQueueSize")), - behind(false), versionBehind(false), byteSampleClears(false, LiteralStringRef("\xff\xff\xff")), noRecentUpdates(false), - lastUpdate(now()), poppedAllAfter(std::numeric_limits::max()), cpuUsage(0.0), diskUsage(0.0) - { + StorageServer(IKeyValueStore* storage, Reference> const& db, + StorageServerInterface const& ssi) + : fetchKeysHistograms(), instanceID(deterministicRandom()->randomUniqueID().first()), storage(this, storage), + db(db), lastTLogVersion(0), lastVersionWithData(0), restoredVersion(0), + rebootAfterDurableVersion(std::numeric_limits::max()), durableInProgress(Void()), versionLag(0), + primaryLocality(tagLocalityInvalid), updateEagerReads(0), shardChangeCounter(0), + fetchKeysParallelismLock(SERVER_KNOBS->FETCH_KEYS_PARALLELISM_BYTES), shuttingDown(false), + debug_inApplyUpdate(false), debug_lastValidateTime(0), watchBytes(0), numWatches(0), logProtocol(0), + counters(this), tag(invalidTag), maxQueryQueue(0), thisServerID(ssi.id()), + readQueueSizeMetric(LiteralStringRef("StorageServer.ReadQueueSize")), behind(false), versionBehind(false), + byteSampleClears(false, LiteralStringRef("\xff\xff\xff")), noRecentUpdates(false), lastUpdate(now()), + poppedAllAfter(std::numeric_limits::max()), cpuUsage(0.0), diskUsage(0.0) { version.initMetric(LiteralStringRef("StorageServer.Version"), counters.cc.id); oldestVersion.initMetric(LiteralStringRef("StorageServer.OldestVersion"), counters.cc.id); durableVersion.initMetric(LiteralStringRef("StorageServer.DurableVersion"), counters.cc.id); @@ -718,7 +714,7 @@ public: } }; -const StringRef StorageServer::CurrentRunningFetchKeys::emptyString= LiteralStringRef(""); +const StringRef StorageServer::CurrentRunningFetchKeys::emptyString = LiteralStringRef(""); const KeyRangeRef StorageServer::CurrentRunningFetchKeys::emptyKeyRange = KeyRangeRef(StorageServer::CurrentRunningFetchKeys::emptyString, StorageServer::CurrentRunningFetchKeys::emptyString); // If and only if key:=value is in (storage+versionedData), // NOT ACTUALLY: and key < allKeys.end, @@ -1996,12 +1992,20 @@ void splitMutation(StorageServer* data, KeyRangeMap& map, MutationRef const& ASSERT(false); // Unknown mutation type in splitMutations } +constexpr double FETCH_KEY_TOO_LONG_TIME_CRITERIA = 300.0; + ACTOR Future logFetchKeysWarning(AddingShard* shard) { state double startTime = now(); loop { state double waitSeconds = BUGGIFY ? 5.0 : 600.0; wait(delay(waitSeconds)); - TraceEvent(waitSeconds > 300.0 ? SevWarnAlways : SevInfo, "FetchKeysTooLong").detail("Duration", now() - startTime).detail("Phase", shard->phase).detail("Begin", shard->keys.begin.printable()).detail("End", shard->keys.end.printable()); + + const auto traceEventLevel = waitSeconds > FETCH_KEY_TOO_LONG_TIME_CRITERIA ? SevWarnAlways : SevInfo; + TraceEvent(traceEventLevel, "FetchKeysTooLong") + .detail("Duration", now() - startTime) + .detail("Phase", shard->phase) + .detail("Begin", shard->keys.begin.printable()) + .detail("End", shard->keys.end.printable()); } } @@ -2022,8 +2026,10 @@ public: void addFetchedBytes(const int bytes) { fetchedBytes += bytes; } ~FetchKeysMetricReporter() { - const double latency = now() - startTime; - if (latency == 0) return; + double latency = now() - startTime; + + // If fetchKeys is *NOT* run, i.e. returning immediately, still report a record. + if (latency == 0) latency = 1e6; const uint32_t bandwidth = fetchedBytes / latency; @@ -3581,12 +3587,18 @@ ACTOR Future reportStorageServerState(StorageServer* self) { } const auto longestRunningFetchKeys = self->currentRunningFetchKeys.longestTime(); - TraceEvent(SevInfo, "FetchKeyCurrentStatus") - .detail("Timestamp", now()) - .detail("LongestRunningTime", longestRunningFetchKeys.first) - .detail("StartKey", longestRunningFetchKeys.second.begin) - .detail("EndKey", longestRunningFetchKeys.second.end) - .detail("NumRunning", numRunningFetchKeys); + + auto level = SevInfo; + if (longestRunningFetchKeys.first >= FETCH_KEY_TOO_LONG_TIME_CRITERIA) { + level = SevWarnAlways; + } + + TraceEvent(level, "FetchKeyCurrentStatus") + .detail("Timestamp", now()) + .detail("LongestRunningTime", longestRunningFetchKeys.first) + .detail("StartKey", longestRunningFetchKeys.second.begin.printable()) + .detail("EndKey", longestRunningFetchKeys.second.end.printable()) + .detail("NumRunning", numRunningFetchKeys); } } From acbd4c1f39f32ab018ec054f74bbaf08fd89e2d2 Mon Sep 17 00:00:00 2001 From: Xiaoge Su Date: Thu, 12 Nov 2020 13:01:41 -0800 Subject: [PATCH 077/317] Extract FETCH_KEYS_TOO_LONG_TIME_CRITERIA to Knob --- fdbserver/Knobs.cpp | 1 + fdbserver/Knobs.h | 1 + fdbserver/storageserver.actor.cpp | 6 ++---- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 1524c69413..f0225e6f08 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -511,6 +511,7 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( WAIT_METRICS_WRONG_SHARD_CHANCE, isSimulated ? 1.0 : 0.1 ); init( REPORT_DD_METRICS, true ); init( DD_METRICS_REPORT_INTERVAL, 30.0 ); + init( FETCH_KEYS_TOO_LONG_TIME_CRITERIA, 300.0 ); //Wait Failure init( MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS, 250 ); if( randomize && BUGGIFY ) MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS = 2; diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index b5ae218af7..87bedc51e0 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -454,6 +454,7 @@ public: double WAIT_METRICS_WRONG_SHARD_CHANCE; bool REPORT_DD_METRICS; double DD_METRICS_REPORT_INTERVAL; + double FETCH_KEYS_TOO_LONG_TIME_CRITERIA; //Wait Failure int MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS; diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 5805466304..6c34fc7746 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -1992,15 +1992,13 @@ void splitMutation(StorageServer* data, KeyRangeMap& map, MutationRef const& ASSERT(false); // Unknown mutation type in splitMutations } -constexpr double FETCH_KEY_TOO_LONG_TIME_CRITERIA = 300.0; - ACTOR Future logFetchKeysWarning(AddingShard* shard) { state double startTime = now(); loop { state double waitSeconds = BUGGIFY ? 5.0 : 600.0; wait(delay(waitSeconds)); - const auto traceEventLevel = waitSeconds > FETCH_KEY_TOO_LONG_TIME_CRITERIA ? SevWarnAlways : SevInfo; + const auto traceEventLevel = waitSeconds > SERVER_KNOBS->FETCH_KEYS_TOO_LONG_TIME_CRITERIA ? SevWarnAlways : SevInfo; TraceEvent(traceEventLevel, "FetchKeysTooLong") .detail("Duration", now() - startTime) .detail("Phase", shard->phase) @@ -3589,7 +3587,7 @@ ACTOR Future reportStorageServerState(StorageServer* self) { const auto longestRunningFetchKeys = self->currentRunningFetchKeys.longestTime(); auto level = SevInfo; - if (longestRunningFetchKeys.first >= FETCH_KEY_TOO_LONG_TIME_CRITERIA) { + if (longestRunningFetchKeys.first >= SERVER_KNOBS->FETCH_KEYS_TOO_LONG_TIME_CRITERIA) { level = SevWarnAlways; } From cc13ef08bdd192e20e1857da851d83b75abe5e63 Mon Sep 17 00:00:00 2001 From: Jon Fu Date: Tue, 10 Nov 2020 13:50:39 -0500 Subject: [PATCH 078/317] Sort the failed sets before modifying them in attempts to make changes consistent --- fdbclient/ManagementAPI.actor.cpp | 1 + fdbserver/workloads/RemoveServersSafely.actor.cpp | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/fdbclient/ManagementAPI.actor.cpp b/fdbclient/ManagementAPI.actor.cpp index 354f64e7ee..5f51c82c16 100644 --- a/fdbclient/ManagementAPI.actor.cpp +++ b/fdbclient/ManagementAPI.actor.cpp @@ -1607,6 +1607,7 @@ ACTOR Future> checkForExcludingServers(Database cx, vec wait( delayJittered( 1.0 ) ); // SOMEDAY: watches! } catch (Error& e) { + TraceEvent("CheckForExcludingServersError").error(e); wait( tr.onError(e) ); } } diff --git a/fdbserver/workloads/RemoveServersSafely.actor.cpp b/fdbserver/workloads/RemoveServersSafely.actor.cpp index 945c9ff676..18c46904d3 100644 --- a/fdbserver/workloads/RemoveServersSafely.actor.cpp +++ b/fdbserver/workloads/RemoveServersSafely.actor.cpp @@ -408,6 +408,9 @@ struct RemoveServersSafelyWorkload : TestWorkload { if (coordinators.size() > 2) { auto randomCoordinator = deterministicRandom()->randomChoice(coordinators); coordExcl = AddressExclusion(randomCoordinator.ip, randomCoordinator.port); + TraceEvent("RemoveAndKill", functionId) + .detail("Step", "ChooseCoordinator") + .detail("Coordinator", describe(coordExcl)); } } std::copy(toKill.begin(), toKill.end(), std::back_inserter(toKillArray)); @@ -417,11 +420,12 @@ struct RemoveServersSafelyWorkload : TestWorkload { state bool safe = false; state std::set failSet = random_subset(toKillArray, deterministicRandom()->randomInt(0, toKillArray.size() + 1)); - if (coordExcl.isValid()) { - failSet.insert(coordExcl); - } toKillMarkFailedArray.resize(failSet.size()); std::copy(failSet.begin(), failSet.end(), toKillMarkFailedArray.begin()); + std::sort(toKillMarkFailedArray.begin(), toKillMarkFailedArray.end()); + if (coordExcl.isValid()) { + toKillMarkFailedArray.push_back(coordExcl); + } TraceEvent("RemoveAndKill", functionId) .detail("Step", "SafetyCheck") .detail("Exclusions", describe(toKillMarkFailedArray)); @@ -460,6 +464,7 @@ struct RemoveServersSafelyWorkload : TestWorkload { toKillMarkFailedArray.erase(removeServer); } ASSERT(toKillMarkFailedArray.size() <= toKillArray.size()); + std::sort(toKillArray.begin(), toKillArray.end()); auto removeServer = toKill.begin(); TraceEvent("RemoveAndKill", functionId) .detail("Step", "ReplaceNonFailedKillSet") From 046a6e8427e4961d869303b9567d710fe2c5f850 Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Thu, 12 Nov 2020 13:29:11 -0800 Subject: [PATCH 079/317] Add Alex comment on tLog --- fdbserver/TLogServer.actor.cpp | 34 +++++++++++++-------- fdbserver/TagPartitionedLogSystem.actor.cpp | 9 ++++-- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index f4183c660a..4bb5d63594 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -325,7 +325,7 @@ struct TLogData : NonCopyable { FlowLock concurrentLogRouterReads; FlowLock persistentDataCommitLock; - // fields used by snapshot based backup and restore: start + // Beginning of fields used by snapshot based backup and restore bool ignorePopRequest; // ignore pop request from storage servers double ignorePopDeadline; // time until which the ignorePopRequest will be // honored @@ -337,7 +337,7 @@ struct TLogData : NonCopyable { std::map toBePopped; // map of Tag->Version for all the pops // that came when ignorePopRequest was set Reference> degraded; - // fields used by snapshot based backup and restore: end + // End of fields used by snapshot based backup and restore std::vector tempTagMessages; @@ -435,13 +435,19 @@ struct LogData : NonCopyable, public ReferenceCounted { bool stopped, initialized; DBRecoveryCount recoveryCount; + // If persistentDataVersion != persistentDurableDataVersion, + // then spilling is happening from persistentDurableDataVersion to persistentDataVersion. + // Data less than persistentDataDurableVersion is spilled on disk (or fully popped from the TLog); VersionMetricHandle persistentDataVersion, persistentDataDurableVersion; // The last version number in the portion of the log (written|durable) to persistentData - NotifiedVersion version, queueCommittedVersion; + NotifiedVersion version; + NotifiedVersion queueCommittedVersion; // The disk queue has committed up until the queueCommittedVersion version. Version queueCommittingVersion; - Version knownCommittedVersion, durableKnownCommittedVersion, minKnownCommittedVersion; - Version queuePoppedVersion; + Version knownCommittedVersion; // The maximum version that a proxy has told us that is committed (all TLogs have + // ack'd a commit for this version). + Version durableKnownCommittedVersion, minKnownCommittedVersion; + Version queuePoppedVersion; // The disk queue has been popped up until the location which represents this version. Version minPoppedTagVersion; - Tag minPoppedTag; + Tag minPoppedTag; // The tag that makes tLog hold its data and cause tLog's disk queue increasing. Deque>>> messageBlocks; std::vector>> tag_data; //tag.locality | tag.id @@ -558,14 +564,15 @@ struct LogData : NonCopyable, public ReferenceCounted { queueCommittedVersion.initMetric(LiteralStringRef("TLog.QueueCommittedVersion"), cc.id); specialCounter(cc, "Version", [this](){ return this->version.get(); }); - specialCounter(cc, "QueueCommittedVersion", - [this]() { return this->queueCommittedVersion.get(); }); // Q: What is this? + specialCounter(cc, "QueueCommittedVersion", [this]() { return this->queueCommittedVersion.get(); }); specialCounter(cc, "PersistentDataVersion", [this](){ return this->persistentDataVersion; }); specialCounter(cc, "PersistentDataDurableVersion", [this](){ return this->persistentDataDurableVersion; }); specialCounter(cc, "KnownCommittedVersion", [this](){ return this->knownCommittedVersion; }); specialCounter(cc, "QueuePoppedVersion", [this](){ return this->queuePoppedVersion; }); - specialCounter(cc, "MinPoppedTagVersion", - [this]() { return this->minPoppedTagVersion; }); // Q: why can it be 0 in some trace logs + specialCounter(cc, "MinPoppedTagVersion", [this]() { return this->minPoppedTagVersion; }); + // The locality and id of the tag that is responsible for making the TLog hold onto its oldest piece of data. + // If disk queues are growing and no one is sure why, then you shall look at this to find the tag responsible + // for why the TLog thinks it can't throw away data. specialCounter(cc, "MinPoppedTagLocality", [this](){ return this->minPoppedTag.locality; }); specialCounter(cc, "MinPoppedTagId", [this](){ return this->minPoppedTag.id; }); specialCounter(cc, "SharedBytesInput", [tLogData](){ return tLogData->bytesInput; }); @@ -765,7 +772,9 @@ ACTOR Future updatePoppedLocation( TLogData* self, Reference logD return Void(); } -// Q: pop disk queue to what? +// It runs against the oldest TLog instance, calculates the first location in the disk queue that contains un-popped +// data, and then issues a pop to the disk queue at that location so that anything earlier can be +// removed/forgotten/overwritten. In effect, it applies the effect of TLogPop RPCs to disk. ACTOR Future popDiskQueue( TLogData* self, Reference logData ) { if (!logData->initialized) return Void(); @@ -983,7 +992,8 @@ ACTOR Future updatePersistentData( TLogData* self, Reference logD // This function (and updatePersistentData, which is called by this function) run at a low priority and can soak up all // CPU resources. For this reason, they employ aggressive use of yields to avoid causing slow tasks that could introduce // latencies for more important work (e.g. commits). -// Q: Can someone explain what this actor is doing? +// This actor is just a loop that calls updatePersistentData and popDiskQueue whenever +// (a) there's data to be spilled or (b) we should update metadata after some commits have been fully popped. ACTOR Future updateStorage( TLogData* self ) { while(self->spillOrder.size() && !self->id_data.count(self->spillOrder.front())) { self->spillOrder.pop_front(); diff --git a/fdbserver/TagPartitionedLogSystem.actor.cpp b/fdbserver/TagPartitionedLogSystem.actor.cpp index 5808cec168..e5c8009640 100644 --- a/fdbserver/TagPartitionedLogSystem.actor.cpp +++ b/fdbserver/TagPartitionedLogSystem.actor.cpp @@ -184,9 +184,14 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCounted recoveredAt; Version knownCommittedVersion; LocalityData locality; + // For each currently running popFromLog actor, outstandingPops is + // (logID, tag)->(max popped version, durableKnownCommittedVersion). + // Why do we need durableKnownCommittedVersion? knownCommittedVersion gives the lower bound of what data + // will need to be copied into the next generation to restore the replication factor. + // Guess: It probably serves as a minimum version of what data should be on a TLog in the next generation and + // sending a pop for anything less than durableKnownCommittedVersion for the TLog will be absurd. std::map, std::pair> outstandingPops; - // For each currently running popFromLog actor, (logID, tag)->(max popped version, durableKnownCommittedVersion) - // Q: why do we need tag and durableKnownCommittedVersion? + Optional>> addActor; ActorCollection popActors; std::vector oldLogData; From 4a0fa579890a408c23e0c3eb1298aacdf74b816d Mon Sep 17 00:00:00 2001 From: Xiaoge Su Date: Thu, 12 Nov 2020 15:38:51 -0800 Subject: [PATCH 080/317] Add bytes_per_second unit in histograms --- fdbserver/storageserver.actor.cpp | 2 +- flow/Histogram.cpp | 30 +++++++++++++++++++++++------- flow/Histogram.h | 8 +++++++- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 6c34fc7746..99776171fe 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -311,7 +311,7 @@ public: bytes(Histogram::getHistogram(STORAGESERVER_HISTOGRAM_GROUP, FETCH_KEYS_BYTES_HISTOGRAM, Histogram::Unit::bytes)), bandwidth(Histogram::getHistogram(STORAGESERVER_HISTOGRAM_GROUP, FETCH_KEYS_BYTES_PER_SECOND_HISTOGRAM, - Histogram::Unit::bytes)) {} + Histogram::Unit::bytes_per_second)) {} } fetchKeysHistograms; class CurrentRunningFetchKeys { diff --git a/flow/Histogram.cpp b/flow/Histogram.cpp index e5281093c9..4de14970ef 100644 --- a/flow/Histogram.cpp +++ b/flow/Histogram.cpp @@ -41,6 +41,8 @@ thread_local ISimulator::ProcessInfo* ISimulator::currentProcess = nullptr; // we have a simulated contex here; we'd just use the current context regardless. static HistogramRegistry* globalHistograms = nullptr; +#pragma region HistogramRegistry + HistogramRegistry& GetHistogramRegistry() { ISimulator::ProcessInfo* info = g_simulator.getCurrentProcess(); @@ -89,6 +91,16 @@ void HistogramRegistry::logReport() { } } +#pragma endregion // HistogramRegistry + +#pragma region Histogram + +const std::unordered_map Histogram::UnitToStringMapper = { + { Histogram::Unit::microseconds, "microseconds" }, + { Histogram::Unit::bytes, "bytes" }, + { Histogram::Unit::bytes_per_second, "bytes_per_second" } +}; + void Histogram::writeToLog() { bool active = false; for (uint32_t i = 0; i < 32; i++) { @@ -102,17 +114,19 @@ void Histogram::writeToLog() { } TraceEvent e(SevInfo, "Histogram"); - e.detail("Group", group).detail("Op", op); + e.detail("Group", group).detail("Op", op).detail("Unit", UnitToStringMapper.at(unit)); + for (uint32_t i = 0; i < 32; i++) { + uint32_t value = ((uint32_t)1) << (i + 1); + if (buckets[i]) { switch (unit) { - case Unit::microseconds: { - uint32_t usec = ((uint32_t)1) << (i + 1); - e.detail(format("LessThan%u.%03u", usec / 1000, usec % 1000), buckets[i]); + case Unit::microseconds: + e.detail(format("LessThan%u.%03u", value / 1000, value % 1000), buckets[i]); break; - } case Unit::bytes: - e.detail(format("LessThan%u", ((uint32_t)1) << (i + 1)), buckets[i]); + case Unit::bytes_per_second: + e.detail(format("LessThan%u", value), buckets[i]); break; default: ASSERT(false); @@ -121,6 +135,8 @@ void Histogram::writeToLog() { } } +#pragma endregion // Histogram + TEST_CASE("/flow/histogram/smoke_test") { { @@ -168,4 +184,4 @@ TEST_CASE("/flow/histogram/smoke_test") { GetHistogramRegistry().logReport(); return Void(); -} \ No newline at end of file +} diff --git a/flow/Histogram.h b/flow/Histogram.h index fd765f4d86..7cef45b49f 100644 --- a/flow/Histogram.h +++ b/flow/Histogram.h @@ -26,6 +26,7 @@ #include #include +#include #ifdef _WIN32 #include @@ -57,11 +58,16 @@ HistogramRegistry& GetHistogramRegistry(); */ class Histogram sealed : public ReferenceCounted { public: - enum class Unit { microseconds, bytes }; + enum class Unit { microseconds, bytes, bytes_per_second }; private: + static const std::unordered_map UnitToStringMapper; + Histogram(std::string group, std::string op, Unit unit, HistogramRegistry& registry) : group(group), op(op), unit(unit), registry(registry), ReferenceCounted() { + + ASSERT(UnitToStringMapper.find(unit) != UnitToStringMapper.end()); + clear(); } From 3a6948c199313fa7e3e38d6ecbfb0366eb5194da Mon Sep 17 00:00:00 2001 From: Xiaoge Su Date: Thu, 12 Nov 2020 17:03:41 -0800 Subject: [PATCH 081/317] Report histogram periodically --- fdbserver/Knobs.cpp | 1 + fdbserver/Knobs.h | 1 + fdbserver/fdbserver.actor.cpp | 12 ++++++++++++ flow/SystemMonitor.cpp | 1 - 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index f0225e6f08..8431be5149 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -540,6 +540,7 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( MAX_STATUS_REQUESTS_PER_SECOND, 256.0 ); init( CONFIGURATION_ROWS_TO_FETCH, 20000 ); init( DISABLE_DUPLICATE_LOG_WARNING, false ); + init( HISTOGRAM_REPORT_INTERVAL, 300.0 ); // IPager init( PAGER_RESERVED_PAGES, 1 ); diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 87bedc51e0..0a5168397d 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -483,6 +483,7 @@ public: double MAX_STATUS_REQUESTS_PER_SECOND; int CONFIGURATION_ROWS_TO_FETCH; bool DISABLE_DUPLICATE_LOG_WARNING; + double HISTOGRAM_REPORT_INTERVAL; // IPager int PAGER_RESERVED_PAGES; diff --git a/fdbserver/fdbserver.actor.cpp b/fdbserver/fdbserver.actor.cpp index 94eb58e9dd..ef8c6f727c 100644 --- a/fdbserver/fdbserver.actor.cpp +++ b/fdbserver/fdbserver.actor.cpp @@ -373,6 +373,14 @@ void failAfter( Future trigger, Endpoint e ) { failAfter( trigger, g_simulator.getProcess( e ) ); } +ACTOR Future histogramReport() { + loop { + wait(delay(SERVER_KNOBS->HISTOGRAM_REPORT_INTERVAL)); + + GetHistogramRegistry().logReport(); + } +} + void testSerializationSpeed() { double tstart; double build = 0, serialize = 0, deserialize = 0, copy = 0, deallocate = 0; @@ -1658,6 +1666,8 @@ int main(int argc, char* argv[]) { if (role == Simulation) { TraceEvent("Simulation").detail("TestFile", testFile); + auto histogramReportActor = histogramReport(); + clientKnobs->trace(); flowKnobs->trace(); serverKnobs->trace(); @@ -1786,6 +1796,8 @@ int main(int argc, char* argv[]) { if (!dataFolder.size()) dataFolder = format("fdb/%d/", publicAddresses.address.port); // SOMEDAY: Better default + auto histogramReportActor = histogramReport(); + vector> actors(listenErrors.begin(), listenErrors.end()); actors.push_back( fdbd(connectionFile, localities, processClass, dataFolder, dataFolder, storageMemLimit, metricsConnFile, metricsPrefix, rsssize, whitelistBinPaths) ); //actors.push_back( recurring( []{}, .001 ) ); // for ASIO latency measurement diff --git a/flow/SystemMonitor.cpp b/flow/SystemMonitor.cpp index a69662442a..f996d2cd5c 100644 --- a/flow/SystemMonitor.cpp +++ b/flow/SystemMonitor.cpp @@ -60,7 +60,6 @@ SystemStatistics customSystemMonitor(std::string eventName, StatisticsState *sta netData.init(); if (!DEBUG_DETERMINISM && currentStats.initialized) { { - GetHistogramRegistry().logReport(); TraceEvent(eventName.c_str()) .detail("Elapsed", currentStats.elapsed) .detail("CPUSeconds", currentStats.processCPUSeconds) From 4df23741b286416357f6b3176d5aec5bae5c9fc8 Mon Sep 17 00:00:00 2001 From: Vishesh Yadav Date: Thu, 12 Nov 2020 15:54:43 -0800 Subject: [PATCH 082/317] tLog: Track tlog commit latencies in histogram --- fdbserver/TLogServer.actor.cpp | 38 +++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index 9a663f02b7..3c212dff1c 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -40,6 +40,7 @@ #include "fdbserver/WaitFailure.h" #include "fdbserver/RecoveryState.h" #include "fdbserver/FDBExecHelper.actor.h" +#include "flow/Histogram.h" #include "flow/actorcompiler.h" // This must be the last #include. using std::pair; @@ -338,17 +339,22 @@ struct TLogData : NonCopyable { Reference> degraded; std::vector tempTagMessages; - TLogData(UID dbgid, UID workerID, IKeyValueStore* persistentData, IDiskQueue * persistentQueue, Reference> dbInfo, Reference> degraded, std::string folder) - : dbgid(dbgid), workerID(workerID), instanceID(deterministicRandom()->randomUniqueID().first()), - persistentData(persistentData), rawPersistentQueue(persistentQueue), persistentQueue(new TLogQueue(persistentQueue, dbgid)), - dbInfo(dbInfo), degraded(degraded), queueCommitBegin(0), queueCommitEnd(0), - diskQueueCommitBytes(0), largeDiskQueueCommitBytes(false), bytesInput(0), bytesDurable(0), targetVolatileBytes(SERVER_KNOBS->TLOG_SPILL_THRESHOLD), overheadBytesInput(0), overheadBytesDurable(0), - peekMemoryLimiter(SERVER_KNOBS->TLOG_SPILL_REFERENCE_MAX_PEEK_MEMORY_BYTES), - concurrentLogRouterReads(SERVER_KNOBS->CONCURRENT_LOG_ROUTER_READS), - ignorePopRequest(false), ignorePopDeadline(), ignorePopUid(), dataFolder(folder), toBePopped() - { - cx = openDBOnServer(dbInfo, TaskPriority::DefaultEndpoint, true, true); - } + Reference commitLatencyDist; + + TLogData(UID dbgid, UID workerID, IKeyValueStore* persistentData, IDiskQueue* persistentQueue, + Reference> dbInfo, Reference> degraded, std::string folder) + : dbgid(dbgid), workerID(workerID), instanceID(deterministicRandom()->randomUniqueID().first()), + persistentData(persistentData), rawPersistentQueue(persistentQueue), + persistentQueue(new TLogQueue(persistentQueue, dbgid)), dbInfo(dbInfo), degraded(degraded), queueCommitBegin(0), + queueCommitEnd(0), diskQueueCommitBytes(0), largeDiskQueueCommitBytes(false), bytesInput(0), bytesDurable(0), + targetVolatileBytes(SERVER_KNOBS->TLOG_SPILL_THRESHOLD), overheadBytesInput(0), overheadBytesDurable(0), + peekMemoryLimiter(SERVER_KNOBS->TLOG_SPILL_REFERENCE_MAX_PEEK_MEMORY_BYTES), + concurrentLogRouterReads(SERVER_KNOBS->CONCURRENT_LOG_ROUTER_READS), ignorePopRequest(false), + ignorePopDeadline(), ignorePopUid(), dataFolder(folder), toBePopped(), + commitLatencyDist(Histogram::getHistogram(LiteralStringRef("tLog"), LiteralStringRef("commit"), + Histogram::Unit::microseconds)) { + cx = openDBOnServer(dbInfo, TaskPriority::DefaultEndpoint, true, true); + } }; struct LogData : NonCopyable, public ReferenceCounted { @@ -1824,7 +1830,11 @@ ACTOR Future tLogCommit( return Void(); } - if (logData->version.get() == req.prevVersion) { // Not a duplicate (check relies on critical section between here self->version.set() below!) + state double beforeCommitT = now(); + + // Not a duplicate (check relies on critical section between here self->version.set() below!) + state bool isNotDuplicate = (logData->version.get() == req.prevVersion); + if (isNotDuplicate) { if(req.debugID.present()) g_traceBatch.addEvent("CommitDebug", tlogDebugID.get().first(), "TLog.tLogCommit.Before"); @@ -1862,6 +1872,10 @@ ACTOR Future tLogCommit( return Void(); } + if (isNotDuplicate) { + self->commitLatencyDist->sampleSeconds(now() - beforeCommitT); + } + if(req.debugID.present()) g_traceBatch.addEvent("CommitDebug", tlogDebugID.get().first(), "TLog.tLogCommit.After"); From 6917da9ce708caadf647a426e2575b6cfa6ab212 Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Tue, 10 Nov 2020 23:22:27 -0800 Subject: [PATCH 083/317] Fix HasBeenTrueFor::set --- fdbserver/DataDistributionTracker.actor.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/fdbserver/DataDistributionTracker.actor.cpp b/fdbserver/DataDistributionTracker.actor.cpp index ade7fa3252..9bbecf662a 100644 --- a/fdbserver/DataDistributionTracker.actor.cpp +++ b/fdbserver/DataDistributionTracker.actor.cpp @@ -382,16 +382,19 @@ ACTOR Future changeSizes( DataDistributionTracker* self, KeyRange keys, in } struct HasBeenTrueFor : ReferenceCounted { - explicit HasBeenTrueFor( Optional value ) { + explicit HasBeenTrueFor(const Optional& value) { if(value.present()) { trigger = delayJittered(std::max(0.0, SERVER_KNOBS->DD_MERGE_COALESCE_DELAY + value.get().lastLowBandwidthStartTime - now()), TaskPriority::DataDistributionLow ) || cleared.getFuture(); } } - Future set() { + Future set(double lastLowBandwidthStartTime) { if( !trigger.isValid() ) { cleared = Promise(); - trigger = delayJittered( SERVER_KNOBS->DD_MERGE_COALESCE_DELAY, TaskPriority::DataDistributionLow ) || cleared.getFuture(); + trigger = + delayJittered(SERVER_KNOBS->DD_MERGE_COALESCE_DELAY + std::max(lastLowBandwidthStartTime - now(), 0.0), + TaskPriority::DataDistributionLow) || + cleared.getFuture(); } return trigger; } @@ -629,7 +632,7 @@ ACTOR Future shardEvaluator( // Every invocation must set this or clear it if(shouldMerge && !self->anyZeroHealthyTeams->get()) { - auto whenLongEnough = wantsToMerge->set(); + auto whenLongEnough = wantsToMerge->set(shardSize->get().get().lastLowBandwidthStartTime); if( !wantsToMerge->hasBeenTrueForLongEnough() ) { onChange = onChange || whenLongEnough; } From 65076db9080a95191ef75249c2f94b3ec5d98671 Mon Sep 17 00:00:00 2001 From: Xiaoge Su Date: Fri, 13 Nov 2020 13:15:58 -0800 Subject: [PATCH 084/317] Move the histogramReporter() to actors list --- fdbserver/fdbserver.actor.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fdbserver/fdbserver.actor.cpp b/fdbserver/fdbserver.actor.cpp index ef8c6f727c..4d5cfec990 100644 --- a/fdbserver/fdbserver.actor.cpp +++ b/fdbserver/fdbserver.actor.cpp @@ -1796,10 +1796,9 @@ int main(int argc, char* argv[]) { if (!dataFolder.size()) dataFolder = format("fdb/%d/", publicAddresses.address.port); // SOMEDAY: Better default - auto histogramReportActor = histogramReport(); - vector> actors(listenErrors.begin(), listenErrors.end()); actors.push_back( fdbd(connectionFile, localities, processClass, dataFolder, dataFolder, storageMemLimit, metricsConnFile, metricsPrefix, rsssize, whitelistBinPaths) ); + actors.push_back(histogramReport()); //actors.push_back( recurring( []{}, .001 ) ); // for ASIO latency measurement f = stopAfter( waitForAll(actors) ); From 6ed8bdb5985920090563e101e67e0bb5eb559de2 Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Fri, 13 Nov 2020 21:27:38 -0800 Subject: [PATCH 085/317] Update downloads.rst for 6.2.28 --- documentation/sphinx/source/downloads.rst | 24 +++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/documentation/sphinx/source/downloads.rst b/documentation/sphinx/source/downloads.rst index 696b812fb1..065440b8c5 100644 --- a/documentation/sphinx/source/downloads.rst +++ b/documentation/sphinx/source/downloads.rst @@ -10,38 +10,38 @@ macOS The macOS installation package is supported on macOS 10.7+. It includes the client and (optionally) the server. -* `FoundationDB-6.2.27.pkg `_ +* `FoundationDB-6.2.28.pkg `_ Ubuntu ------ The Ubuntu packages are supported on 64-bit Ubuntu 12.04+, but beware of the Linux kernel bug in Ubuntu 12.x. -* `foundationdb-clients-6.2.27-1_amd64.deb `_ -* `foundationdb-server-6.2.27-1_amd64.deb `_ (depends on the clients package) +* `foundationdb-clients-6.2.28-1_amd64.deb `_ +* `foundationdb-server-6.2.28-1_amd64.deb `_ (depends on the clients package) RHEL/CentOS EL6 --------------- The RHEL/CentOS EL6 packages are supported on 64-bit RHEL/CentOS 6.x. -* `foundationdb-clients-6.2.27-1.el6.x86_64.rpm `_ -* `foundationdb-server-6.2.27-1.el6.x86_64.rpm `_ (depends on the clients package) +* `foundationdb-clients-6.2.28-1.el6.x86_64.rpm `_ +* `foundationdb-server-6.2.28-1.el6.x86_64.rpm `_ (depends on the clients package) RHEL/CentOS EL7 --------------- The RHEL/CentOS EL7 packages are supported on 64-bit RHEL/CentOS 7.x. -* `foundationdb-clients-6.2.27-1.el7.x86_64.rpm `_ -* `foundationdb-server-6.2.27-1.el7.x86_64.rpm `_ (depends on the clients package) +* `foundationdb-clients-6.2.28-1.el7.x86_64.rpm `_ +* `foundationdb-server-6.2.28-1.el7.x86_64.rpm `_ (depends on the clients package) Windows ------- The Windows installer is supported on 64-bit Windows XP and later. It includes the client and (optionally) the server. -* `foundationdb-6.2.27-x64.msi `_ +* `foundationdb-6.2.28-x64.msi `_ API Language Bindings ===================== @@ -58,18 +58,18 @@ On macOS and Windows, the FoundationDB Python API bindings are installed as part If you need to use the FoundationDB Python API from other Python installations or paths, download the Python package: -* `foundationdb-6.2.27.tar.gz `_ +* `foundationdb-6.2.28.tar.gz `_ Ruby 1.9.3/2.0.0+ ----------------- -* `fdb-6.2.27.gem `_ +* `fdb-6.2.28.gem `_ Java 8+ ------- -* `fdb-java-6.2.27.jar `_ -* `fdb-java-6.2.27-javadoc.jar `_ +* `fdb-java-6.2.28.jar `_ +* `fdb-java-6.2.28-javadoc.jar `_ Go 1.11+ -------- From 4b0fba6ea89b51b82df7868ca24b81f6997db4e4 Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Fri, 13 Nov 2020 22:14:01 -0800 Subject: [PATCH 086/317] Explain waitForVersion why wait for version minus MAX_READ_TRANSACTION_LIFE_VERSIONS --- fdbserver/LogRouter.actor.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index 2a92f39089..8a862fb2d4 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -245,7 +245,9 @@ ACTOR Future waitForVersion( LogRouterData *self, Version ver ) { return Void(); } if(!self->foundEpochEnd) { - // Why it only needs to wait for (ver - SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS), instead of ver? + // Similar to proxy that does not keep more than MAX_READ_TRANSACTION_LIFE_VERSIONS transactions oustanding; + // Log router does not keep more than MAX_READ_TRANSACTION_LIFE_VERSIONS transactions outstanding because + // remote SS cannot roll back to more than MAX_READ_TRANSACTION_LIFE_VERSIONS ago. wait(self->minPopped.whenAtLeast(std::min(self->version.get(), ver - SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS))); } else { while(self->minPopped.get() + SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS < ver) { From 661d931ac84083038e1f35520336a06efdbcfb3f Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Sat, 14 Nov 2020 21:44:22 -0800 Subject: [PATCH 087/317] update installer WIX GUID following release --- packaging/msi/FDBInstaller.wxs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/msi/FDBInstaller.wxs b/packaging/msi/FDBInstaller.wxs index 62239f03bd..2c6c498372 100644 --- a/packaging/msi/FDBInstaller.wxs +++ b/packaging/msi/FDBInstaller.wxs @@ -32,7 +32,7 @@ Date: Sat, 14 Nov 2020 21:52:00 -0800 Subject: [PATCH 088/317] update version to 6.2.29 --- CMakeLists.txt | 2 +- versions.target | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f4340697c1..567d81c91f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ # limitations under the License. cmake_minimum_required(VERSION 3.12) project(foundationdb - VERSION 6.2.28 + VERSION 6.2.29 DESCRIPTION "FoundationDB is a scalable, fault-tolerant, ordered key-value store with full ACID transactions." HOMEPAGE_URL "http://www.foundationdb.org/" LANGUAGES C CXX ASM) diff --git a/versions.target b/versions.target index 5b02dfd6bc..0347371b31 100644 --- a/versions.target +++ b/versions.target @@ -1,7 +1,7 @@ - 6.2.28 + 6.2.29 6.2 From ca8ea3b6ff54805e9d5b2d115e1f6a77f338e624 Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Sun, 15 Nov 2020 23:21:23 -0800 Subject: [PATCH 089/317] Fix memory issues caused by cancelling data distribution tracker --- fdbserver/DataDistribution.actor.cpp | 13 ++-- fdbserver/DataDistribution.actor.h | 3 +- fdbserver/DataDistributionTracker.actor.cpp | 86 ++++++++++++++------- flow/error_definitions.h | 1 + 4 files changed, 71 insertions(+), 32 deletions(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index 66359a44d0..4efc299519 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -4418,7 +4418,9 @@ ACTOR Future dataDistribution(Reference self) state DatabaseConfiguration configuration; state Reference initData; state MoveKeysLock lock; + state bool trackerCancelled; loop { + trackerCancelled = false; try { loop { TraceEvent("DDInitTakingMoveKeysLock", self->ddId); @@ -4579,11 +4581,11 @@ ACTOR Future dataDistribution(Reference self) } actors.push_back( pollMoveKeysLock(cx, lock) ); - actors.push_back( - reportErrorsExcept(dataDistributionTracker(initData, cx, output, shardsAffectedByTeamFailure, - getShardMetrics, getAverageShardBytes.getFuture(), - readyToStart, anyZeroHealthyTeams, self->ddId, &shards), - "DDTracker", self->ddId, &normalDDQueueErrors())); + actors.push_back(reportErrorsExcept( + dataDistributionTracker(initData, cx, output, shardsAffectedByTeamFailure, getShardMetrics, + getAverageShardBytes.getFuture(), readyToStart, anyZeroHealthyTeams, self->ddId, + &shards, &trackerCancelled), + "DDTracker", self->ddId, &normalDDQueueErrors())); actors.push_back( reportErrorsExcept( dataDistributionQueue( cx, output, input.getFuture(), getShardMetrics, processingUnhealthy, tcis, shardsAffectedByTeamFailure, lock, getAverageShardBytes, self->ddId, storageTeamSize, configuration.storageTeamSize, &lastLimited ), "DDQueue", self->ddId, &normalDDQueueErrors() ) ); vector teamCollectionsPtrs; @@ -4612,6 +4614,7 @@ ACTOR Future dataDistribution(Reference self) } catch( Error &e ) { state Error err = e; + trackerCancelled = true; wait(shards.clearAsync()); if (err.code() != error_code_movekeys_conflict) throw err; bool ddEnabled = wait( isDataDistributionEnabled(cx) ); diff --git a/fdbserver/DataDistribution.actor.h b/fdbserver/DataDistribution.actor.h index 12bd64adc0..e3c66bf73a 100644 --- a/fdbserver/DataDistribution.actor.h +++ b/fdbserver/DataDistribution.actor.h @@ -211,7 +211,8 @@ ACTOR Future dataDistributionTracker(Reference in PromiseStream getShardMetrics, FutureStream> getAverageShardBytes, Promise readyToStart, Reference> zeroHealthyTeams, - UID distributorId, KeyRangeMap* shards); + UID distributorId, KeyRangeMap* shards, + bool const* trackerCancelled); ACTOR Future dataDistributionQueue( Database cx, PromiseStream output, FutureStream input, diff --git a/fdbserver/DataDistributionTracker.actor.cpp b/fdbserver/DataDistributionTracker.actor.cpp index 5cda7c8a30..12f7feec92 100644 --- a/fdbserver/DataDistributionTracker.actor.cpp +++ b/fdbserver/DataDistributionTracker.actor.cpp @@ -76,14 +76,20 @@ struct DataDistributionTracker { Promise readyToStart; Reference> anyZeroHealthyTeams; + // The reference to trackerCancelled must be extracted by actors, + // because by the time (trackerCancelled == true) this memory cannot + // be accessed + bool const& trackerCancelled; + DataDistributionTracker(Database cx, UID distributorId, Promise const& readyToStart, PromiseStream const& output, Reference shardsAffectedByTeamFailure, - Reference> anyZeroHealthyTeams, KeyRangeMap& shards) + Reference> anyZeroHealthyTeams, KeyRangeMap& shards, + bool const& trackerCancelled) : cx(cx), distributorId(distributorId), dbSizeEstimate(new AsyncVar()), systemSizeEstimate(0), maxShardSize(new AsyncVar>()), sizeChanges(false), readyToStart(readyToStart), output(output), shardsAffectedByTeamFailure(shardsAffectedByTeamFailure), anyZeroHealthyTeams(anyZeroHealthyTeams), - shards(shards) {} + shards(shards), trackerCancelled(trackerCancelled) {} ~DataDistributionTracker() { @@ -134,11 +140,36 @@ int64_t getMaxShardSize( double dbSizeEstimate ) { (int64_t)SERVER_KNOBS->MAX_SHARD_BYTES); } +// This class extracts the trackerCancelled reference from a DataDistributionTracker object +// Because some actors spawned by the dataDistributionTracker outlive the DataDistributionTracker +// object, we must guard against memory errors by using a GetTracker functor to access +// the DataDistributionTracker object. +// +// Ideally this would be implemented with a lambda instead, but the actor compiler does not do +// type deduction. +class GetTracker { + bool const& trackerCancelled; + DataDistributionTracker& tracker; + +public: + GetTracker(DataDistributionTracker* tracker) : trackerCancelled(tracker->trackerCancelled), tracker(*tracker) { + ASSERT(!trackerCancelled); + } + + DataDistributionTracker* operator()() { + if (trackerCancelled) { + throw dd_tracker_cancelled(); + } + return &tracker; + } +}; + ACTOR Future trackShardBytes( DataDistributionTracker* self, KeyRange keys, Reference>> shardSize) { + state GetTracker getSelf(self); state BandwidthStatus bandwidthStatus = shardSize->get().present() ? getBandwidthStatus( shardSize->get().get().metrics ) : BandwidthStatusNormal; state double lastLowBandwidthStartTime = shardSize->get().present() ? shardSize->get().get().lastLowBandwidthStartTime : now(); state int shardCount = shardSize->get().present() ? shardSize->get().get().shardCount : 1; @@ -188,7 +219,7 @@ ACTOR Future trackShardBytes( bounds.permittedError.iosPerKSecond = bounds.permittedError.infinity; loop { - Transaction tr(self->cx); + Transaction tr(getSelf()->cx); // metrics.second is the number of key-ranges (i.e., shards) in the 'keys' key-range std::pair, int> metrics = wait( tr.waitStorageMetrics( keys, bounds.min, bounds.max, bounds.permittedError, CLIENT_KNOBS->STORAGE_METRICS_SHARD_LIMIT, shardCount ) ); if(metrics.first.present()) { @@ -212,9 +243,11 @@ ACTOR Future trackShardBytes( .detail("TrackerID", trackerID);*/ if( shardSize->get().present() ) { - self->dbSizeEstimate->set( self->dbSizeEstimate->get() + metrics.first.get().bytes - shardSize->get().get().metrics.bytes ); + getSelf()->dbSizeEstimate->set(getSelf()->dbSizeEstimate->get() + metrics.first.get().bytes - + shardSize->get().get().metrics.bytes); if(keys.begin >= systemKeys.begin) { - self->systemSizeEstimate += metrics.first.get().bytes - shardSize->get().get().metrics.bytes; + getSelf()->systemSizeEstimate += + metrics.first.get().bytes - shardSize->get().get().metrics.bytes; } } @@ -231,8 +264,10 @@ ACTOR Future trackShardBytes( } } } catch( Error &e ) { - if (e.code() != error_code_actor_cancelled) - self->output.sendError(e); // Propagate failure to dataDistributionTracker + if (e.code() != error_code_actor_cancelled && e.code() != error_code_broken_promise && + e.code() != error_code_dd_tracker_cancelled) { + getSelf()->output.sendError(e); // Propagate failure to dataDistributionTracker + } throw e; } } @@ -595,18 +630,15 @@ ACTOR Future shardEvaluator( return Void(); } -ACTOR Future shardTracker( - DataDistributionTracker* self, - KeyRange keys, - Reference>> shardSize) -{ +ACTOR Future shardTracker(DataDistributionTracker* self, KeyRange keys, + Reference>> shardSize) { + state GetTracker getSelf(self); wait( yieldedFuture(self->readyToStart.getFuture()) ); if( !shardSize->get().present() ) wait( shardSize->onChange() ); - if( !self->maxShardSize->get().present() ) - wait( yieldedFuture(self->maxShardSize->onChange()) ); + if (!getSelf()->maxShardSize->get().present()) wait(yieldedFuture(getSelf()->maxShardSize->onChange())); // Since maxShardSize will become present for all shards at once, avoid slow tasks with a short delay wait( delay( 0, TaskPriority::DataDistribution ) ); @@ -614,18 +646,18 @@ ACTOR Future shardTracker( // Survives multiple calls to shardEvaluator and keeps merges from happening too quickly. state Reference wantsToMerge( new HasBeenTrueFor( shardSize->get() ) ); - /*TraceEvent("ShardTracker", self->distributorId) - .detail("Begin", keys.begin) - .detail("End", keys.end) - .detail("TrackerID", trackerID) - .detail("MaxBytes", self->maxShardSize->get().get()) - .detail("ShardSize", shardSize->get().get().bytes) - .detail("BytesPerKSec", shardSize->get().get().bytesPerKSecond);*/ + /*TraceEvent("ShardTracker", getSelf()->distributorId) + .detail("Begin", keys.begin) + .detail("End", keys.end) + .detail("TrackerID", trackerID) + .detail("MaxBytes", getSelf()->maxShardSize->get().get()) + .detail("ShardSize", shardSize->get().get().bytes) + .detail("BytesPerKSec", shardSize->get().get().bytesPerKSecond);*/ try { loop { // Use the current known size to check for (and start) splits and merges. - wait( shardEvaluator( self, keys, shardSize, wantsToMerge ) ); + wait(shardEvaluator(getSelf(), keys, shardSize, wantsToMerge)); // We could have a lot of actors being released from the previous wait at the same time. Immediately calling // delay(0) mitigates the resulting SlowTask @@ -633,8 +665,9 @@ ACTOR Future shardTracker( } } catch (Error& e) { // If e is broken_promise then self may have already been deleted - if (e.code() != error_code_actor_cancelled && e.code() != error_code_broken_promise) { - self->output.sendError(e); // Propagate failure to dataDistributionTracker + if (e.code() != error_code_actor_cancelled && e.code() != error_code_broken_promise && + e.code() != error_code_dd_tracker_cancelled) { + getSelf()->output.sendError(e); // Propagate failure to dataDistributionTracker } throw e; } @@ -741,9 +774,10 @@ ACTOR Future dataDistributionTracker(Reference in PromiseStream getShardMetrics, FutureStream> getAverageShardBytes, Promise readyToStart, Reference> anyZeroHealthyTeams, - UID distributorId, KeyRangeMap* shards) { + UID distributorId, KeyRangeMap* shards, + bool const* trackerCancelled) { state DataDistributionTracker self(cx, distributorId, readyToStart, output, shardsAffectedByTeamFailure, - anyZeroHealthyTeams, *shards); + anyZeroHealthyTeams, *shards, *trackerCancelled); state Future loggingTrigger = Void(); try { wait( trackInitialShards( &self, initData ) ); diff --git a/flow/error_definitions.h b/flow/error_definitions.h index 0676dd7e0d..6caa76050f 100755 --- a/flow/error_definitions.h +++ b/flow/error_definitions.h @@ -86,6 +86,7 @@ ERROR( please_reboot_delete, 1208, "Reboot of server process requested, with del ERROR( master_proxy_failed, 1209, "Master terminating because a Proxy failed" ) ERROR( master_resolver_failed, 1210, "Master terminating because a Resolver failed" ) ERROR( server_overloaded, 1211, "Server is under too much load and cannot respond" ) +ERROR(dd_tracker_cancelled, 1212, "The data distribution tracker has been cancelled") // 15xx Platform errors ERROR( platform_error, 1500, "Platform error" ) From 6235d087a6f28ce46d25c7e016ddd96a12acb379 Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Mon, 16 Nov 2020 12:46:21 -0800 Subject: [PATCH 090/317] Prevent shardTracker or trackShardBytes from accidentally unsafely accessing DataDistributionTracker --- fdbserver/DataDistributionTracker.actor.cpp | 83 ++++++++++----------- 1 file changed, 38 insertions(+), 45 deletions(-) diff --git a/fdbserver/DataDistributionTracker.actor.cpp b/fdbserver/DataDistributionTracker.actor.cpp index 12f7feec92..c1fa1cb51f 100644 --- a/fdbserver/DataDistributionTracker.actor.cpp +++ b/fdbserver/DataDistributionTracker.actor.cpp @@ -81,6 +81,28 @@ struct DataDistributionTracker { // be accessed bool const& trackerCancelled; + // This class extracts the trackerCancelled reference from a DataDistributionTracker object + // Because some actors spawned by the dataDistributionTracker outlive the DataDistributionTracker + // object, we must guard against memory errors by using a GetTracker functor to access + // the DataDistributionTracker object. + class SafeAccessor { + bool const& trackerCancelled; + DataDistributionTracker& tracker; + + public: + SafeAccessor(DataDistributionTracker* tracker) + : trackerCancelled(tracker->trackerCancelled), tracker(*tracker) { + ASSERT(!trackerCancelled); + } + + DataDistributionTracker* operator()() { + if (trackerCancelled) { + throw dd_tracker_cancelled(); + } + return &tracker; + } + }; + DataDistributionTracker(Database cx, UID distributorId, Promise const& readyToStart, PromiseStream const& output, Reference shardsAffectedByTeamFailure, @@ -140,36 +162,8 @@ int64_t getMaxShardSize( double dbSizeEstimate ) { (int64_t)SERVER_KNOBS->MAX_SHARD_BYTES); } -// This class extracts the trackerCancelled reference from a DataDistributionTracker object -// Because some actors spawned by the dataDistributionTracker outlive the DataDistributionTracker -// object, we must guard against memory errors by using a GetTracker functor to access -// the DataDistributionTracker object. -// -// Ideally this would be implemented with a lambda instead, but the actor compiler does not do -// type deduction. -class GetTracker { - bool const& trackerCancelled; - DataDistributionTracker& tracker; - -public: - GetTracker(DataDistributionTracker* tracker) : trackerCancelled(tracker->trackerCancelled), tracker(*tracker) { - ASSERT(!trackerCancelled); - } - - DataDistributionTracker* operator()() { - if (trackerCancelled) { - throw dd_tracker_cancelled(); - } - return &tracker; - } -}; - -ACTOR Future trackShardBytes( - DataDistributionTracker* self, - KeyRange keys, - Reference>> shardSize) -{ - state GetTracker getSelf(self); +ACTOR Future trackShardBytes(DataDistributionTracker::SafeAccessor self, KeyRange keys, + Reference>> shardSize) { state BandwidthStatus bandwidthStatus = shardSize->get().present() ? getBandwidthStatus( shardSize->get().get().metrics ) : BandwidthStatusNormal; state double lastLowBandwidthStartTime = shardSize->get().present() ? shardSize->get().get().lastLowBandwidthStartTime : now(); state int shardCount = shardSize->get().present() ? shardSize->get().get().shardCount : 1; @@ -219,7 +213,7 @@ ACTOR Future trackShardBytes( bounds.permittedError.iosPerKSecond = bounds.permittedError.infinity; loop { - Transaction tr(getSelf()->cx); + Transaction tr(self()->cx); // metrics.second is the number of key-ranges (i.e., shards) in the 'keys' key-range std::pair, int> metrics = wait( tr.waitStorageMetrics( keys, bounds.min, bounds.max, bounds.permittedError, CLIENT_KNOBS->STORAGE_METRICS_SHARD_LIMIT, shardCount ) ); if(metrics.first.present()) { @@ -243,10 +237,10 @@ ACTOR Future trackShardBytes( .detail("TrackerID", trackerID);*/ if( shardSize->get().present() ) { - getSelf()->dbSizeEstimate->set(getSelf()->dbSizeEstimate->get() + metrics.first.get().bytes - - shardSize->get().get().metrics.bytes); + self()->dbSizeEstimate->set(self()->dbSizeEstimate->get() + metrics.first.get().bytes - + shardSize->get().get().metrics.bytes); if(keys.begin >= systemKeys.begin) { - getSelf()->systemSizeEstimate += + self()->systemSizeEstimate += metrics.first.get().bytes - shardSize->get().get().metrics.bytes; } } @@ -266,7 +260,7 @@ ACTOR Future trackShardBytes( } catch( Error &e ) { if (e.code() != error_code_actor_cancelled && e.code() != error_code_broken_promise && e.code() != error_code_dd_tracker_cancelled) { - getSelf()->output.sendError(e); // Propagate failure to dataDistributionTracker + self()->output.sendError(e); // Propagate failure to dataDistributionTracker } throw e; } @@ -630,15 +624,14 @@ ACTOR Future shardEvaluator( return Void(); } -ACTOR Future shardTracker(DataDistributionTracker* self, KeyRange keys, +ACTOR Future shardTracker(DataDistributionTracker::SafeAccessor self, KeyRange keys, Reference>> shardSize) { - state GetTracker getSelf(self); - wait( yieldedFuture(self->readyToStart.getFuture()) ); + wait(yieldedFuture(self()->readyToStart.getFuture())); if( !shardSize->get().present() ) wait( shardSize->onChange() ); - if (!getSelf()->maxShardSize->get().present()) wait(yieldedFuture(getSelf()->maxShardSize->onChange())); + if (!self()->maxShardSize->get().present()) wait(yieldedFuture(self()->maxShardSize->onChange())); // Since maxShardSize will become present for all shards at once, avoid slow tasks with a short delay wait( delay( 0, TaskPriority::DataDistribution ) ); @@ -646,18 +639,18 @@ ACTOR Future shardTracker(DataDistributionTracker* self, KeyRange keys, // Survives multiple calls to shardEvaluator and keeps merges from happening too quickly. state Reference wantsToMerge( new HasBeenTrueFor( shardSize->get() ) ); - /*TraceEvent("ShardTracker", getSelf()->distributorId) + /*TraceEvent("ShardTracker", self()->distributorId) .detail("Begin", keys.begin) .detail("End", keys.end) .detail("TrackerID", trackerID) - .detail("MaxBytes", getSelf()->maxShardSize->get().get()) + .detail("MaxBytes", self()->maxShardSize->get().get()) .detail("ShardSize", shardSize->get().get().bytes) .detail("BytesPerKSec", shardSize->get().get().bytesPerKSecond);*/ try { loop { // Use the current known size to check for (and start) splits and merges. - wait(shardEvaluator(getSelf(), keys, shardSize, wantsToMerge)); + wait(shardEvaluator(self(), keys, shardSize, wantsToMerge)); // We could have a lot of actors being released from the previous wait at the same time. Immediately calling // delay(0) mitigates the resulting SlowTask @@ -667,7 +660,7 @@ ACTOR Future shardTracker(DataDistributionTracker* self, KeyRange keys, // If e is broken_promise then self may have already been deleted if (e.code() != error_code_actor_cancelled && e.code() != error_code_broken_promise && e.code() != error_code_dd_tracker_cancelled) { - getSelf()->output.sendError(e); // Propagate failure to dataDistributionTracker + self()->output.sendError(e); // Propagate failure to dataDistributionTracker } throw e; } @@ -699,8 +692,8 @@ void restartShardTrackers(DataDistributionTracker* self, KeyRangeRef keys, Optio ShardTrackedData data; data.stats = shardSize; - data.trackShard = shardTracker( self, ranges[i], shardSize ); - data.trackBytes = trackShardBytes( self, ranges[i], shardSize ); + data.trackShard = shardTracker(DataDistributionTracker::SafeAccessor(self), ranges[i], shardSize); + data.trackBytes = trackShardBytes(DataDistributionTracker::SafeAccessor(self), ranges[i], shardSize); self->shards.insert( ranges[i], data ); } } From 4f369e70ab0b540a580568840d78570dead74613 Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Mon, 16 Nov 2020 13:25:39 -0800 Subject: [PATCH 091/317] Add code coverage macro to DataDistributionTracker::SafeAccessor::operator() --- fdbserver/DataDistributionTracker.actor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/fdbserver/DataDistributionTracker.actor.cpp b/fdbserver/DataDistributionTracker.actor.cpp index c1fa1cb51f..81ff9ade72 100644 --- a/fdbserver/DataDistributionTracker.actor.cpp +++ b/fdbserver/DataDistributionTracker.actor.cpp @@ -97,6 +97,7 @@ struct DataDistributionTracker { DataDistributionTracker* operator()() { if (trackerCancelled) { + TEST(true); // Trying to access DataDistributionTracker after tracker has been cancelled throw dd_tracker_cancelled(); } return &tracker; From 898fbac1915bb1c54e6e23de5eadf2126e58da8d Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Mon, 16 Nov 2020 13:28:08 -0800 Subject: [PATCH 092/317] Remove special handling of broken_promise errors --- fdbserver/DataDistributionTracker.actor.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/fdbserver/DataDistributionTracker.actor.cpp b/fdbserver/DataDistributionTracker.actor.cpp index 81ff9ade72..f7d5e0539a 100644 --- a/fdbserver/DataDistributionTracker.actor.cpp +++ b/fdbserver/DataDistributionTracker.actor.cpp @@ -259,8 +259,7 @@ ACTOR Future trackShardBytes(DataDistributionTracker::SafeAccessor self, K } } } catch( Error &e ) { - if (e.code() != error_code_actor_cancelled && e.code() != error_code_broken_promise && - e.code() != error_code_dd_tracker_cancelled) { + if (e.code() != error_code_actor_cancelled && e.code() != error_code_dd_tracker_cancelled) { self()->output.sendError(e); // Propagate failure to dataDistributionTracker } throw e; @@ -659,8 +658,7 @@ ACTOR Future shardTracker(DataDistributionTracker::SafeAccessor self, KeyR } } catch (Error& e) { // If e is broken_promise then self may have already been deleted - if (e.code() != error_code_actor_cancelled && e.code() != error_code_broken_promise && - e.code() != error_code_dd_tracker_cancelled) { + if (e.code() != error_code_actor_cancelled && e.code() != error_code_dd_tracker_cancelled) { self()->output.sendError(e); // Propagate failure to dataDistributionTracker } throw e; From 489ba20641121eb220aa573bbefcc7aa146f42ec Mon Sep 17 00:00:00 2001 From: David Youngworth Date: Mon, 16 Nov 2020 14:46:36 -0800 Subject: [PATCH 093/317] Fix several merge issues --- fdbserver/DataDistribution.actor.cpp | 23 ++++++++++++++++++++++- fdbserver/DataDistribution.actor.h | 2 +- fdbserver/DataDistributionQueue.actor.cpp | 8 +------- fdbserver/fdbserver.actor.cpp | 2 +- flow/network.h | 7 ++----- flow/serialize.h | 3 +-- 6 files changed, 28 insertions(+), 17 deletions(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index add08fd05f..e909de515a 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -178,7 +178,7 @@ public: } } - std::string getTeamID() override { return id.shortString(); } + std::string getTeamID() const override { return id.shortString(); } vector getLastKnownServerInterfaces() const override { vector v; @@ -3190,6 +3190,27 @@ ACTOR Future zeroServerLeftLogger_impl(DDTeamCollection* self, Reference team) { + auto ssis = team->getLastKnownServerInterfaces(); + for (const auto &ssi : ssis) { + AddressExclusion addr(ssi.address().ip, ssi.address().port); + AddressExclusion ipaddr(ssi.address().ip); + if (self->excludedServers.get(addr) == DDTeamCollection::Status::FAILED || + self->excludedServers.get(ipaddr) == DDTeamCollection::Status::FAILED) { + return true; + } + if(ssi.secondaryAddress().present()) { + AddressExclusion saddr(ssi.secondaryAddress().get().ip, ssi.secondaryAddress().get().port); + AddressExclusion sipaddr(ssi.secondaryAddress().get().ip); + if (self->excludedServers.get(saddr) == DDTeamCollection::Status::FAILED || + self->excludedServers.get(sipaddr) == DDTeamCollection::Status::FAILED) { + return true; + } + } + } + return false; +} + // Track a team and issue RelocateShards when the level of degradation changes // A badTeam can be unhealthy or just a redundantTeam removed by machineTeamRemover() or serverTeamRemover() ACTOR Future teamTracker(DDTeamCollection* self, Reference team, bool badTeam, bool redundantTeam) { diff --git a/fdbserver/DataDistribution.actor.h b/fdbserver/DataDistribution.actor.h index 623158486d..225f7ac5e2 100644 --- a/fdbserver/DataDistribution.actor.h +++ b/fdbserver/DataDistribution.actor.h @@ -58,7 +58,7 @@ struct IDataDistributionTeam { virtual bool isWrongConfiguration() const = 0; virtual void setWrongConfiguration(bool) = 0; virtual void addServers(const vector &servers) = 0; - virtual std::string getTeamID() = 0; + virtual std::string getTeamID() const = 0; std::string getDesc() const { const auto& servers = getLastKnownServerInterfaces(); diff --git a/fdbserver/DataDistributionQueue.actor.cpp b/fdbserver/DataDistributionQueue.actor.cpp index d38e28b614..d3ad7eaa41 100644 --- a/fdbserver/DataDistributionQueue.actor.cpp +++ b/fdbserver/DataDistributionQueue.actor.cpp @@ -85,12 +85,6 @@ class ParallelTCInfo : public ReferenceCounted, public IDataDist vector> teams; vector tempServerIDs; - ParallelTCInfo() {} - - void addTeam(Reference team) { - teams.push_back(team); - } - int64_t sum(std::function func) const { int64_t result = 0; for (const auto& team : teams) { @@ -242,7 +236,7 @@ public: teams[0]->addServers(servers); } - std::string getTeamID() override { + std::string getTeamID() const override { std::string id; for (int i = 0; i < teams.size(); i++) { auto const& team = teams[i]; diff --git a/fdbserver/fdbserver.actor.cpp b/fdbserver/fdbserver.actor.cpp index 18b72412ea..79e816fa12 100644 --- a/fdbserver/fdbserver.actor.cpp +++ b/fdbserver/fdbserver.actor.cpp @@ -1898,7 +1898,7 @@ int main(int argc, char* argv[]) { g_network->run(); } else if (role == Test) { setupRunLoopProfiler(); - auto m = startSystemMonitor(opts.dataFolder, opts.dcId opts.zoneId, opts.zoneId); + auto m = startSystemMonitor(opts.dataFolder, opts.dcId, opts.zoneId, opts.zoneId); f = stopAfter(runTests(opts.connectionFile, TEST_TYPE_FROM_FILE, TEST_HERE, 1, opts.testFile, StringRef(), opts.localities)); g_network->run(); diff --git a/flow/network.h b/flow/network.h index d8559e4d35..37a8391042 100644 --- a/flow/network.h +++ b/flow/network.h @@ -368,11 +368,8 @@ public: virtual Future read() = 0; }; -struct SendBuffer { - uint8_t const* data; - SendBuffer* next; - int bytes_written, bytes_sent; -}; +// forward declare SendBuffer, declared in serialize.h +struct SendBuffer; class IConnection { public: diff --git a/flow/serialize.h b/flow/serialize.h index 93ed64b5b4..3d5f88c27e 100644 --- a/flow/serialize.h +++ b/flow/serialize.h @@ -685,11 +685,10 @@ struct SendBuffer { struct PacketBuffer : SendBuffer { private: - static constexpr size_t PACKET_BUFFER_OVERHEAD = 40; int reference_count; uint32_t const size_; static constexpr size_t PACKET_BUFFER_MIN_SIZE = 16384; - static constexpr size_t PACKET_BUFFER_OVERHEAD = 32; + static constexpr size_t PACKET_BUFFER_OVERHEAD = 40; public: double const enqueue_time; From 84632d63ade1d6006ef1fba1d7e885ac2e43a8be Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Mon, 16 Nov 2020 17:54:47 -0800 Subject: [PATCH 094/317] Remove stale comment --- fdbserver/DataDistributionTracker.actor.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/fdbserver/DataDistributionTracker.actor.cpp b/fdbserver/DataDistributionTracker.actor.cpp index f7d5e0539a..74946ae81b 100644 --- a/fdbserver/DataDistributionTracker.actor.cpp +++ b/fdbserver/DataDistributionTracker.actor.cpp @@ -657,7 +657,6 @@ ACTOR Future shardTracker(DataDistributionTracker::SafeAccessor self, KeyR wait( delay(0, TaskPriority::DataDistribution) ); } } catch (Error& e) { - // If e is broken_promise then self may have already been deleted if (e.code() != error_code_actor_cancelled && e.code() != error_code_dd_tracker_cancelled) { self()->output.sendError(e); // Propagate failure to dataDistributionTracker } From 50e515c29a62ce56e9a0bd9ca70b93e6fd3b5483 Mon Sep 17 00:00:00 2001 From: David Youngworth Date: Wed, 21 Oct 2020 17:57:27 -0700 Subject: [PATCH 095/317] Add DateTime to trace, initial commit --- flow/Knobs.cpp | 1 + flow/Knobs.h | 1 + flow/Trace.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++++---- flow/Trace.h | 13 ++++++++++ 4 files changed, 76 insertions(+), 4 deletions(-) diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index 3df410ddcb..28b7deb180 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -151,6 +151,7 @@ FlowKnobs::FlowKnobs(bool randomize, bool isSimulated) { init( TRACE_RETRY_OPEN_INTERVAL, 1.00 ); init( MIN_TRACE_SEVERITY, isSimulated ? 0 : 10 ); // Related to the trace severity in Trace.h init( MAX_TRACE_SUPPRESSIONS, 1e4 ); + init( TRACE_DATETIME_ENABLED, true ); // trace time in human readable format (always real time) init( TRACE_SYNC_ENABLED, 0 ); init( TRACE_EVENT_METRIC_UNITS_PER_SAMPLE, 500 ); init( TRACE_EVENT_THROTTLER_SAMPLE_EXPIRY, 1800.0 ); // 30 mins diff --git a/flow/Knobs.h b/flow/Knobs.h index d42807305c..5dd746cc84 100644 --- a/flow/Knobs.h +++ b/flow/Knobs.h @@ -173,6 +173,7 @@ public: double TRACE_RETRY_OPEN_INTERVAL; int MIN_TRACE_SEVERITY; int MAX_TRACE_SUPPRESSIONS; + bool TRACE_DATETIME_ENABLED; int TRACE_SYNC_ENABLED; int TRACE_EVENT_METRIC_UNITS_PER_SAMPLE; int TRACE_EVENT_THROTTLER_SAMPLE_EXPIRY; diff --git a/flow/Trace.cpp b/flow/Trace.cpp index ec46772eeb..a70e48f5f0 100644 --- a/flow/Trace.cpp +++ b/flow/Trace.cpp @@ -29,7 +29,8 @@ #include #include #include - +#include +#include #include "flow/IThreadPool.h" #include "flow/ThreadHelper.actor.h" #include "flow/FastRef.h" @@ -422,6 +423,7 @@ public: if (roll) { auto o = new WriterThread::Roll; + double time = 0; writer->post(o); std::vector events = latestEventCache.getAllUnsafe(); @@ -430,9 +432,15 @@ public: TraceEventFields rolledFields; for(auto itr = events[idx].begin(); itr != events[idx].end(); ++itr) { if(itr->first == "Time") { - rolledFields.addField("Time", format("%.6f", TraceEvent::getCurrentTime())); + time = TraceEvent::getCurrentTime(); + rolledFields.addField("Time", format("%.6f", time)); rolledFields.addField("OriginalTime", itr->second); } + if (itr->first == "DateTime") { + UNSTOPPABLE_ASSERT(time > 0); // "Time" field should always come first + rolledFields.addField("DateTime", TraceEvent::printRealTime(time)); + rolledFields.addField("OriginalDateTime", itr->second); + } else if(itr->first == "TrackLatestType") { rolledFields.addField("TrackLatestType", "Rolled"); } @@ -797,6 +805,9 @@ bool TraceEvent::init() { detail("Severity", int(severity)); detail("Time", "0.000000"); timeIndex = fields.size() - 1; + if (FLOW_KNOBS->TRACE_DATETIME_ENABLED) { + detail("DateTime", ""); + } detail("Type", type); if(g_network && g_network->isSimulated()) { @@ -997,7 +1008,7 @@ TraceEvent& TraceEvent::GetLastError() { // We're cheating in counting, as in practice, we only use {10,20,30,40}. static_assert(SevMaxUsed / 10 + 1 == 5, "Please bump eventCounts[5] to SevMaxUsed/10+1"); -unsigned long TraceEvent::eventCounts[5] = {0,0,0,0,0}; +unsigned long TraceEvent::eventCounts[5] = { 0, 0, 0, 0, 0 }; unsigned long TraceEvent::CountEventsLoggedAt(Severity sev) { return TraceEvent::eventCounts[sev/10]; @@ -1015,7 +1026,11 @@ void TraceEvent::log() { ++g_allocation_tracing_disabled; try { if (enabled) { - fields.mutate(timeIndex).second = format("%.6f", TraceEvent::getCurrentTime()); + double time = TraceEvent::getCurrentTime(); + fields.mutate(timeIndex).second = format("%.6f", time); + if (FLOW_KNOBS->TRACE_DATETIME_ENABLED) { + fields.mutate(timeIndex + 1).second = TraceEvent::printRealTime(time); + } if (this->severity == SevError) { severity = SevInfo; @@ -1086,6 +1101,15 @@ double TraceEvent::getCurrentTime() { } } +std::string TraceEvent::printRealTime(double time) { + if (g_network != nullptr) { + static RealTimePrinter realTimePrinter; + return realTimePrinter.toString(time); + } else { + return "0"; + } +} + TraceInterval& TraceInterval::begin() { pairID = nondeterministicRandom()->randomUniqueID(); count = 0; @@ -1153,6 +1177,9 @@ void TraceBatch::dump() { TraceBatch::EventInfo::EventInfo(double time, const char *name, uint64_t id, const char *location) { fields.addField("Severity", format("%d", (int)SevInfo)); fields.addField("Time", format("%.6f", time)); + if (FLOW_KNOBS->TRACE_DATETIME_ENABLED) { + fields.addField("DateTime", TraceEvent::printRealTime(time)); + } fields.addField("Type", name); fields.addField("ID", format("%016" PRIx64, id)); fields.addField("Location", location); @@ -1161,6 +1188,9 @@ TraceBatch::EventInfo::EventInfo(double time, const char *name, uint64_t id, con TraceBatch::AttachInfo::AttachInfo(double time, const char *name, uint64_t id, uint64_t to) { fields.addField("Severity", format("%d", (int)SevInfo)); fields.addField("Time", format("%.6f", time)); + if (FLOW_KNOBS->TRACE_DATETIME_ENABLED) { + fields.addField("DateTime", TraceEvent::printRealTime(time)); + } fields.addField("Type", name); fields.addField("ID", format("%016" PRIx64, id)); fields.addField("To", format("%016" PRIx64, to)); @@ -1169,6 +1199,9 @@ TraceBatch::AttachInfo::AttachInfo(double time, const char *name, uint64_t id, u TraceBatch::BuggifyInfo::BuggifyInfo(double time, int activated, int line, std::string file) { fields.addField("Severity", format("%d", (int)SevInfo)); fields.addField("Time", format("%.6f", time)); + if (FLOW_KNOBS->TRACE_DATETIME_ENABLED) { + fields.addField("DateTime", TraceEvent::printRealTime(time)); + } fields.addField("Type", "BuggifySection"); fields.addField("Activated", format("%d", activated)); fields.addField("File", std::move(file)); @@ -1371,3 +1404,27 @@ std::string traceableStringToString(const char* value, size_t S) { return std::string(value, S - 1); // Exclude trailing \0 byte } + +RealTimePrinter::RealTimePrinter() : beginTime(Clock::now()), flowBeginTime(g_network->now()) {} + +// converts the given flow time into a +// string. now has to be larger +// then flowBeginTime. +// %Y-%m-%dT%H:%M:%S +// This only has second-resolution for the simple reason +// that std::put_time does not support higher resolution. +// As we always also log the flow time and this is only for +// human readability, this is good enough for now. +std::string RealTimePrinter::toString(double now) { + time_t n = Clock::to_time_t(beginTime + std::chrono::microseconds(std::lround(1e6 * (now - flowBeginTime)))); + if (g_network->isSimulated()) { + // in simulation, the clock is simulated as well. Therefore, + // actual time might be very different from simulated time. + n = Clock::to_time_t(Clock::now()); + } + std::stringstream ss; + // Use thread-safe localtime_r instead of localtime + struct tm result; + ss << std::put_time(::localtime_r(&n, &result), "%Y-%m-%dT%H:%M:%S"); + return ss.str(); +} diff --git a/flow/Trace.h b/flow/Trace.h index baabcceded..4c90b78236 100644 --- a/flow/Trace.h +++ b/flow/Trace.h @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include "flow/IRandom.h" @@ -374,6 +375,16 @@ struct SpecialTraceMetricType TRACE_METRIC_TYPE(double, double); +struct RealTimePrinter { + using Clock = std::chrono::system_clock; + + Clock::time_point beginTime; + double flowBeginTime; + + RealTimePrinter(); + std::string toString(double now); +}; + struct TraceEvent { TraceEvent(); TraceEvent( const char* type, UID id = UID() ); // Assumes SevInfo severity @@ -388,6 +399,7 @@ struct TraceEvent { static bool isNetworkThread(); static double getCurrentTime(); + static std::string printRealTime(double time); //Must be called directly after constructing the trace event TraceEvent& error(const class Error& e, bool includeCancelled=false) { @@ -501,6 +513,7 @@ private: static unsigned long eventCounts[5]; static thread_local bool networkThread; + static thread_local RealTimePrinter realTimePrinter; bool init(); bool init( struct TraceInterval& ); From 490fe61032f3b21faa72929a210fd431cbd4b5ab Mon Sep 17 00:00:00 2001 From: David Youngworth Date: Wed, 4 Nov 2020 11:55:39 -0800 Subject: [PATCH 096/317] Fix bug in rolled Trace code --- flow/Trace.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flow/Trace.cpp b/flow/Trace.cpp index a70e48f5f0..1d63e822df 100644 --- a/flow/Trace.cpp +++ b/flow/Trace.cpp @@ -436,7 +436,7 @@ public: rolledFields.addField("Time", format("%.6f", time)); rolledFields.addField("OriginalTime", itr->second); } - if (itr->first == "DateTime") { + else if (itr->first == "DateTime") { UNSTOPPABLE_ASSERT(time > 0); // "Time" field should always come first rolledFields.addField("DateTime", TraceEvent::printRealTime(time)); rolledFields.addField("OriginalDateTime", itr->second); From 5ade54f7671afeecf11ae0f9232ebf0b3c44cc40 Mon Sep 17 00:00:00 2001 From: David Youngworth Date: Thu, 5 Nov 2020 11:31:14 -0800 Subject: [PATCH 097/317] Fix windows build, DateTime to use UTC --- flow/Trace.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/flow/Trace.cpp b/flow/Trace.cpp index 1d63e822df..56cf273a03 100644 --- a/flow/Trace.cpp +++ b/flow/Trace.cpp @@ -1410,7 +1410,7 @@ RealTimePrinter::RealTimePrinter() : beginTime(Clock::now()), flowBeginTime(g_ne // converts the given flow time into a // string. now has to be larger // then flowBeginTime. -// %Y-%m-%dT%H:%M:%S +// %Y-%m-%dT%H:%M:%SZ // This only has second-resolution for the simple reason // that std::put_time does not support higher resolution. // As we always also log the flow time and this is only for @@ -1423,8 +1423,14 @@ std::string RealTimePrinter::toString(double now) { n = Clock::to_time_t(Clock::now()); } std::stringstream ss; - // Use thread-safe localtime_r instead of localtime + +#ifdef _WIN32 + // MSVC gmtime is threadsafe + ss << std::put_time(::gmtime(&n), "%Y-%m-%dT%H:%M:%SZ"); +#else + // use threadsafe gmt struct tm result; - ss << std::put_time(::localtime_r(&n, &result), "%Y-%m-%dT%H:%M:%S"); + ss << std::put_time(::gmtime_r(&n, &result), "%Y-%m-%dT%H:%M:%SZ"); +#endif return ss.str(); } From b1256b5dcd22ad58aa5eede436b89f4133a650d2 Mon Sep 17 00:00:00 2001 From: David Youngworth Date: Wed, 18 Nov 2020 16:45:37 -0800 Subject: [PATCH 098/317] Address review comments, simplify DateTime --- flow/Trace.cpp | 56 +++++++++++++++++++------------------------------- flow/Trace.h | 11 ---------- 2 files changed, 21 insertions(+), 46 deletions(-) diff --git a/flow/Trace.cpp b/flow/Trace.cpp index 56cf273a03..a2a1b3b458 100644 --- a/flow/Trace.cpp +++ b/flow/Trace.cpp @@ -1101,13 +1101,29 @@ double TraceEvent::getCurrentTime() { } } +// converts the given flow time into a string +// with format: %Y-%m-%dT%H:%M:%S +// This only has second-resolution for the simple reason +// that std::put_time does not support higher resolution. +// This is fine since we always log the flow time as well. std::string TraceEvent::printRealTime(double time) { - if (g_network != nullptr) { - static RealTimePrinter realTimePrinter; - return realTimePrinter.toString(time); - } else { - return "0"; + using Clock = std::chrono::system_clock; + time_t ts = Clock::to_time_t(Clock::time_point( + std::chrono::duration_cast(std::chrono::duration>(time)))); + if (g_network && g_network->isSimulated()) { + // The clock is simulated, so return the real time + ts = Clock::to_time_t(Clock::now()); } + std::stringstream ss; +#ifdef _WIN32 + // MSVC gmtime is threadsafe + ss << std::put_time(::gmtime(&ts), "%Y-%m-%dT%H:%M:%SZ"); +#else + // use threadsafe gmt + struct tm result; + ss << std::put_time(::gmtime_r(&ts, &result), "%Y-%m-%dT%H:%M:%SZ"); +#endif + return ss.str(); } TraceInterval& TraceInterval::begin() { @@ -1404,33 +1420,3 @@ std::string traceableStringToString(const char* value, size_t S) { return std::string(value, S - 1); // Exclude trailing \0 byte } - -RealTimePrinter::RealTimePrinter() : beginTime(Clock::now()), flowBeginTime(g_network->now()) {} - -// converts the given flow time into a -// string. now has to be larger -// then flowBeginTime. -// %Y-%m-%dT%H:%M:%SZ -// This only has second-resolution for the simple reason -// that std::put_time does not support higher resolution. -// As we always also log the flow time and this is only for -// human readability, this is good enough for now. -std::string RealTimePrinter::toString(double now) { - time_t n = Clock::to_time_t(beginTime + std::chrono::microseconds(std::lround(1e6 * (now - flowBeginTime)))); - if (g_network->isSimulated()) { - // in simulation, the clock is simulated as well. Therefore, - // actual time might be very different from simulated time. - n = Clock::to_time_t(Clock::now()); - } - std::stringstream ss; - -#ifdef _WIN32 - // MSVC gmtime is threadsafe - ss << std::put_time(::gmtime(&n), "%Y-%m-%dT%H:%M:%SZ"); -#else - // use threadsafe gmt - struct tm result; - ss << std::put_time(::gmtime_r(&n, &result), "%Y-%m-%dT%H:%M:%SZ"); -#endif - return ss.str(); -} diff --git a/flow/Trace.h b/flow/Trace.h index 4c90b78236..7193e7b89b 100644 --- a/flow/Trace.h +++ b/flow/Trace.h @@ -375,16 +375,6 @@ struct SpecialTraceMetricType TRACE_METRIC_TYPE(double, double); -struct RealTimePrinter { - using Clock = std::chrono::system_clock; - - Clock::time_point beginTime; - double flowBeginTime; - - RealTimePrinter(); - std::string toString(double now); -}; - struct TraceEvent { TraceEvent(); TraceEvent( const char* type, UID id = UID() ); // Assumes SevInfo severity @@ -513,7 +503,6 @@ private: static unsigned long eventCounts[5]; static thread_local bool networkThread; - static thread_local RealTimePrinter realTimePrinter; bool init(); bool init( struct TraceInterval& ); From 6a328fcc18ab261489c606f583d529e84ccad7eb Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Fri, 20 Nov 2020 12:31:49 -0800 Subject: [PATCH 099/317] Add 6.2.29 release notes --- .../sphinx/source/release-notes/release-notes-620.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/documentation/sphinx/source/release-notes/release-notes-620.rst b/documentation/sphinx/source/release-notes/release-notes-620.rst index 71bac7d5bb..1d74690caf 100644 --- a/documentation/sphinx/source/release-notes/release-notes-620.rst +++ b/documentation/sphinx/source/release-notes/release-notes-620.rst @@ -4,12 +4,16 @@ Release Notes ############# +6.2.29 +====== +* Fix invalid memory access on data distributor when snapshotting large clusters. `(PR #4076) `_ +* Add human-readable DateTime to trace events `(PR #4087) `_ + 6.2.28 ====== * Log detailed team collection information when median available space ratio of all teams is too low. `(PR #3912) `_ * Bug fix, blob client did not support authentication key sizes over 64 bytes. `(PR #3964) `_ - 6.2.27 ====== * For clusters with a large number of shards, avoid slow tasks in the data distributor by adding yields to the shard map destruction. `(PR #3834) `_ From 7eed0a7dba2c0628ba10ad2fe208376fd57bf3cc Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Sun, 22 Nov 2020 16:10:58 -0800 Subject: [PATCH 100/317] Documentation:Read and Write Path --- .../FDB_multiple_txn_swimlane_diagram.png | Bin 0 -> 2636523 bytes .../sphinx/source/images/FDB_read_path.png | Bin 0 -> 459742 bytes .../sphinx/source/images/FDB_write_path.png | Bin 0 -> 478073 bytes .../sphinx/source/read-write-path.rst | 235 ++++++++++++++++++ 4 files changed, 235 insertions(+) create mode 100644 documentation/sphinx/source/images/FDB_multiple_txn_swimlane_diagram.png create mode 100644 documentation/sphinx/source/images/FDB_read_path.png create mode 100644 documentation/sphinx/source/images/FDB_write_path.png create mode 100644 documentation/sphinx/source/read-write-path.rst diff --git a/documentation/sphinx/source/images/FDB_multiple_txn_swimlane_diagram.png b/documentation/sphinx/source/images/FDB_multiple_txn_swimlane_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..910aba5524c8ac8f2b86ae3f3512652ac1373b16 GIT binary patch literal 2636523 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

RCA&!eY*zKUHmbhG$sNw;nwhId% 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 eZQ$!g3*GsVCu78RQnU`OQ&58b|x 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%0D0L9ll6zMoJ5km6U;KlUI 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

  • WQ7?f^C_ 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

    14@U`Kxo4C8A4 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

    q{GU*2I1^f>#XA%_-V4-1 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%0A=}3*kQWvExHvu9tSgNn#Dwfhk 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%0D%uSL0 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

    ^9axsZ|xsl@b* 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%0Dlqp6)vrOXXD0B_MwPf@0^JPhYy0+sFaAe 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

    b1c*i?FJH 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

    ~dSHx@ps;}y)>qEn+e(UpiK@IL!`1^Zr0rjdr zj2#zm#6HWQ7GzBd&#D?41ED#C5rN@C`ob>z*gn__V{Aje)_>D zHjS{gn*%@>W6VeRIFJ-jk}LA{1eka3>p)UDJMvwQkGj8%ML8U1B`EmV;aCaAEIHX% zVJNr^z^tAuzk5WkDXSooaU}v0oHxGpWIM!&cxT)uhVB63%vlqe5ZeG{AMNe8x@H;Q zsVhTR5l#uPgu%&dYK*8v4<8^fEdaJ`aG^s6iV}peCcs)PL{IAKChBVofJ|zLtZJWp zG-5-8L)MNF?oa;oDn=s&v-vIi*}EUw?MEwi@%#n5a{4$<`jlTqsF_%|n?nHf5TqhF z;R;A9;6X!8tzA0zoM$GKO>3NtuAkibgy^U92u~RV;ackg*x7+_T0^9x${N6(YCbkD zcj04^s6Y1=fp_W=Ab|zIW*LP3N^5JxV1z_>l!&lR4W&dAqK^=;l;IG+Ukof}$mV32 z9JOn|yyg+ZPxT)sgXBvXAu(8SUXgyWk9k%|Fr)z5CT((j-075zl#008+FC`{WE?># zuW_Smlr>V%n4Bh?>4y)=f`!ph^a6(vq4*+LA4N;l;}Ha}I1a;cjJ^cI z@kiiO0ZEmSG|L!>vM=F5ap=gg=6ZYi;u!;bV&&XS@AStABz2k!O_tNN)*py0v|AsX zJ|xYmojG?HNGf1@!zzjejE$!_#aJml#K`}<^ zF~B`{nYU#`)9v=GwS7HB0I|)!_cwookvKz?;TkuDDvPnA6uLTJY?+M*e6tg&hqaqCE*?k=988WDGL`^$lmtVXBy^7e(?1D{A&9Yx*F38EL%1&|q#q-T% zank(G+Th5L-5VW2sk2WMwoSk{#dh(+CF{YcSX7a>4n_?>UPjS{TZrWdj}5{v){9RnmqW-F9{0wV}W+H<7U z&YwSnftU9G`=8mPrFA=jQs%|;C+tXjwJMnFu0WK89Uu(YRXb2*eu~>#=9n+Zmbz7ih@q$4y=z9T3`owwt z*R|c}oeSGryi@^5`gtw%`NzKQKvFHba>fhzx1wU}TB`#5w)$;cUlj!Fs2a_#Gf))Hs#KEHW?v!fyvPb#Gf=YR7M0SN(; zX7_ij5n6m4Wd50BUDig1%j=&`+K&K|Dgt8)K0)um;^P54YRK3rQ2aJP(DW`rIZCT> zuxfN5sSFa^+w0cdT4tyEI|vMLngAP7yED9P*FL>#@ttM+AO7uIcC?Bt^Hk-XU*5C- z@Iye9&~`Zu$*E~~6AQrZI+-go_UboYw60@EY;pnqa&pPW9?jV%v{)-ETn%d!G&RaE z^#w9oRzXmBM}3GK;xeA1ZE9_nBhfy}|D3WC5>!G?vc^R?S!!e*}`(xu3!7aGo@C-Gaev&?X%v?$+HBWyADv+ z)fX-rfgbJt&^-L;5Z;|>d;6tV>}V?iSg88VTeJ4JKmP?0@5x9ICHg6YL{4Jm#box3 zvQD2pVZFzXlj#8i!{`b;DpCIl<|2M*Cx&CS# z7l5R{zTtf8i_qaLi5(W63z-?Vr9+^O~jLLCa24OjI z>z@KEDWFnLAZr<@peF*9X8A6VXYiYnOsqJ8k7PvL z92_dy!|R5zQx5*n4}nM(Fb3l8`Y$p3azb^WCyx9I)+8P=4wEXUFU{fu^hW~l>$?E` zOlasB^@8r{{baP2Lu(KzS@%*a2l^xdM`Hr&0vs1074pYDf}lz&CIclE;$8tyE9cl8 z_o^Zo63PYwG6jyHqC<~2-Tv|B6o|*=_m7Y3Oa7P$8QW8rh3EVXCI1<|IbZCH?-*}| zjHE&HNq?#But8SeL)~l$){vg503;3Ctnjzc0)-YRv_PQ+zMK}2-bQQA*8)h2Jn7&^ z-bW5nMetJMog@)xrRB8CoGz`w3W-%hRPzle5`p;k_@sTG#t@U@gJ{N91n-LrUj?A5 zDzZ>iMQ{W}R|_i^NQB}Q(Tl?W73m=^1ETB3xh}UK=qfVE)oJv+QL<;0V%*W%u614Q z9s(bgX;XoHWvi{gXi-+G04V`DNjyQ2#U8$z@5(->?0B{ChovRhupAf$cgVZzl~hJ; z5!yFpvy}~3&kF!Tl6Ql0Dl2=a%Bqa&7S>OCd7TS4mDPAT%(EOmr+VqRx<=0o$CiG} z#;o7Ehrp%U>p7tvS@+R#y}zC-zFQx+4af5Be;qTbQJLtH#Z3){2P0_rX4eFFQR^gU?B>2K|y-qeS( zK}&9QeUWrV-pRq(lbskhYqvS>aYz>GWo()w1Tg!A43=X=NQ+mHy#(i5Bu(9o`vepP zVUXX!h|%Z?K8!l#bRT_gkJk6YwbJ#vCb*C9xrdj?+piJuf+LURyeGc{DjED%KskMi z$rPh`CV6-lu%7}-DFbGr6ksTG#)0tAo-zzonq|BAk0?-ZG+JsYjI9y&rOcZILDVwn zP?r~`Y1$<7DURcI19Q8?mR96=TLEoURwD(jB0yAT!y0RGel8E__xi@ZEpK4os%b`L z$+LNmK&}FlrZAN6;ZQCbkRZU6vXe^A-bHVb;dmv)TJ?)UQ&P~sZ9Zy~7>0S(wX8w` z`p^NQe^BO{T@1u3ulb*q^D{a+58ezday_Z$JME_?6ipVWQ#L69Mdbq{u)YA83Fw`& zYz8!#Q3AaX2vhcBT_-T7g0rjMrF<9Nk>84Fw8&Q(J~rBv4QD5$tJI+uK)W)Eu4D8T zz*O0m^j#m(Z_!!ZJ4wo&9ok9bsEMes2_hgYlZ8p6Cc*njKOx#Boz8*k#kG?E9gt6* zcuB5=ZbHvQhZP(^AXa4>QX6S~m7kE>P_|vseFeliV2nkvZ)$DTJ15X{D0r_xr27gU z##k!jyg>M}qiYNcxU0Gfh+55>CLpPvA<(S=mi`RUf9iaI&PnZCtn~%`kpd)YEmUpQ zuIg8PSKu(MG1A-0E~viI8WQ>i@nCtnXdwpZYS5R5uN#!i)Zcl(K>6QYr!-y>sfmb1SF-+Xis?v1an{1rLcV+THvs4 zRO3-|Li4ErBrO0*zYgQO@D7C*_#!QEm@bMY>bK;%0+95JwC0z64ZIWfvweKIVCL}| z04NIAgZN@IxE|aao98oQQ`p&KWi|LO5MTs`Pj)|-JH)_h6O+sqW=0HoDrcQs7J*MX z3?!wvOUI!c#9l{qPrsAj7amQILEiF&4EQLNm%|I(&d$9`&VziVpq=8*#iEj zDW8V8})v-pBu<&-zdF<5Qt*qww0WqiGy)^{f(-q@aR9HUM-; zGd!BwwQJX|+X4Ys%HdP1;JvQ^U>xWnAPVdhdr z745^@CwK9gIA!NA*Wxp1Hjf|g4}Wyqrk0WyxTx(|U-R@XN?0mf_JxNIl-!2xg^2M^C6N5DhZR+G2}-c^7? zB`3Lek0cbg9*~`M-Ezg1RszU!hv2_a0>8-5H-pVIo8HFG%XmtYjTGO91`@1vcH!T6 zw4J~)!M*0WnT86kz^+LH%WBIUoSvMpdBCEZ$pt%g?5O+yN>*CMr{wOPyEZ&NOa@W2 zx88os+S;q^Hi<7D3{HB6*@N6JzRNY%(?gb75{{t8@pb`cY_l|&WT%!Uba{G7o}J_s zZ`>TU_wj2f#n#<`4ZO3X*-oE2>iWJF0<|N0xLlKFueizb)5ew2+vyPi*ar_D63Bf5 zd8O2P@qauHF{>1%SOwPt=9;bv%Ss~QBl$^s1tw1xJ%O^;N{);p=ccxpC>eqs zVK*<0>{(?T+dOvk7f$!s#ZzS0 z{AzU$AD2v`?J@4fZ{PzfxG+z1RjvRe4Vt9zx6lI5N(+c@E&xfNmEQOr>+!4uNu}hK zvzxLODso^9#jjQwfkUOt6>vkKQYp9eU1{E>h>cQS4sYV}LL;YEDk+Y&WVu<4g+^th zs8>cdDZ`z~$+zj@MN5aYP8~iL{tox~%Y3I};ihZCGFtRPrCcE+Y1l$v)xCOE9~tjL z!>f#UQr-t=4!@a3o_{#0?1^$P#kvp-D#nEykCEnb7@U-2B(0k;cxKlR?8e}@4UySy zdL5$)QBx1da`me~QpPp+lq0=o&5(hR-yZFlu`Lj36b4+NQZelboC7j|2pcQo_WITH z*47N`Pn8tySOTbok9CBX1%RwWgZC{?Hqy&y`w&zxV9AM=EL*!oMc&-naYxz`3_)#e z34~3Az0Di~({20Y?jQnc8AkF_fU4C9D9s2tEr7p>AHy@&*0(T{?Go{aD3}QJRS3F@ zpj}x-8xRp_f#{xhhsNyzQKVux(7ydVf?{7afINiN(M9{<)MraJKNW9tqo)*MIhtVZ4Ja<67U_Vu&lhA2+#9?Wh52-lA$b$v={~98o?>#fcFZ)YKj_u zz?g^w4iMNxngT`i5pW^SGa4}3o#<$@3nx2V&`eMd31feZKvJK?%s)AwOZap;PG3lQ zsE_(Z$3@eFbp>S(j^-`ZamIO*9Vfdc$!Lj|H4B(|97WMOiUI(;B~{kmafGN`z1G?u zvpcuO?D{A7SlcQYC%x7Upb|VW5yevWqaXeNr4v~~9Y{*FW#~l(ij|jNec38&6L$0N zq>W9@dbZODj_g#4E=}9Xu67g{J=WWmFmTZJSAX+kn^|177YDlSTi?7))>{-r%%Puu zaGmUQx2&2B!HQB}jKh3dPUkWh1C&XTK~33<5{X*g74sqEEQg{)KvGPej59=h8b*%! z<%uek4{dh-xr^4`9&up#_~^QQ^ve&(2)t+mCwuLs*Isr-#tdmv@7%g)4@c*?H^9s8 zUOV02Yp1$di%~>992_PS+^~(!k_DOZyh#+X>XHh3`^~rQ*qI}So!&kkTD1T8*MDmr z%}vw?qbu+JXW#x)Yix|#_3Ps{GBr-dRgC-4Iyp*3`F!K@6+3pKUAiTrCui*E@4ase z^h*>aMFIs}9T{XhnrrPc;24qLAO7UJ4b#4@%*hJ_z1DxM%Nm%TgO8H-F72jB@B(62 zpzsn+Eh{TWQCDv#pSx`Jt;J+aP1=p&Y1&Q3XB>%SJiny)ezJ4jiC2YyFo zyfdl8;Vm!(b3`4j4W(uQNJ`&Ij4&$=tO5&=pd%p~o{AAUk+&8(#WlkVY=87-;wY?O!?KF9qYn!dVWxc7s<<)6=9 z>%aAfN(o4cA|5Tc)uV7eQd`QJe%!iGmnh>gUJyOM2Hq$|B=^!B5!`DMcIiC9KHBTaM!IeH#^;G(xrq@1 zV+ie{;0$uU%)!e_PRg+!Wu!#r^`uOWz~98kA}t3gITgwHkj0vk!|62w-x%lp^@$Qt zCCErxfzlozX=#z&fM*ntbQ!+Qfu!)5Wl{R} z;4x%?G!Z@pB-OgCHjv~YBNc+Iw;d<=4^QaEE!v3xPk^Kvdm7U;DF5Z>=Ri_F5|pJy z;S~X@p`?$H9agf02dTlxbAaKil46ZGv%P$7zy^BB62R{S#pGn!hU6{4;d_-)0Nz^m*6lT)6T5x4m_E>95-dk7wL6 zE~A>?lD*-H4;Yh0(CcIHyv<~Xh`^LCFV5NM$S~6((CxS`NqizT%j_vb27EjXE4erV zjS@h!2$~{`s+?&h#6`s40!S}{X6@iqcYs4`G5mf5Spe)n6Tdhrku%jVN$BDdf-><= z{2t{3jjO#eV9Ci&JbQ}y5(W7hL2j1wd<=kT0ve)-t|`Ft2RL0uB!fY-V;Gnvh)ZuJ z=R)!ITid)Jk!j1S>Y#tDD>zWfQB#4UigEZW@^=j8z6OulLV7LFph+7^zLT7np-veE zI3P-JPC!!XPhKcmB)nFJyMS(pCl!da82T$G+2jURQl2AVZUyu_ic_T8tcKu9C0MTI zd^$TdX*1JPR#j8u=cGfRCbX&O(C76m74YMqH(K(?@^s|s%bza)*wFuZkN7f<(Psr9 zY0!|N0q-#Vc9{kpljwZNi%Ui>07<`$!B@CPp#=&pP-uZd3xqA8bw+E>*9AzbV7OwK z1sn;1q&gs;N4i1B|NTUI;S$B6Ow>sho7mkdZx}hD3ojT zOkFFPS^-w{UFB3pU|OA*Go6m>yE6W%oa(K2Q(MZ$ES}r>VRRM;w3!@0^^7?7C6~>p zTL2`b3wV~CPrbi6i@0E5#<0t6VLKz>7hp74edkRb0EBa01>n&-GLKXPL@Ob9jr8-< z3rIh$X9pP&{a{chZ+_ZB&q8w17?Wh_pfgof?c`_FOTmX-VSA=pK%FQ%wC0m$l=_h| z$|v~kyT|<(07*5$MLqbaW7#y0bI8MJ&uoX&0+LD}2WhdX*_8d_;~Vy1e#1&C>j_4L zy$O1uF)PrUBuO8?{%pSb7K|oWFsW`1C{OC-bo~W}>f+ z$E(meq5z~0dpN0PG6FR+M+u-BM-Qgikj)Cf3BWv74h@vf0LwGw_Q-~kh^MfliGHCU z-Xl<7rqs%-8j<}8E{Fc01o>G(rP2T|)4Krj34~RO{Y_v}={4lUoT1*bu`~4?@Tt1# z%>|~{8X@qg0}N%z;yKEinnHhB1zi=r-zPh&?js#)3AzRazEvAYUn=mauJxXQ9(nL# zwI2df<*KK|Y+r+yNM)yIo~q}0O$dQ+zuea#8?JJJ^~ zi>^l-ivGXE7)|6w(v+;mSU_A zqWnDE12LAOuS%}3SPQ!9*RDQ~gL#<;3zYx5C`1HZdok@5ldjC?emMVi|HAfFZ-J1X z()u6rG#c*(AZYh58p-;ET4vVY+x&4lMvlzi5koS=Z%x8Eoe{d;s>~x#Xjo zgFlDsv?UxgCKmPxd_8HmhNlP`QtdXiG&cD#kgW4etanfBN#Zku`#yC{{8JHpBR0s8 z*K)Z9fyM1zc{#?pE$*jHcYz&-#mm9l?jS{w<(>dfvSDTcDlX$=`mf%2*e#=e|H26K2m$Gi>TwYp)cO;8vO`X*@x57I& zdZH5nML+rErcKYxI!CAgE|)Hzx09X4mgG6}b7^!(8lJgZhK_KOo3<6tHKXoj=p-@3^$IL$U?@`^Fz3 z@*&q`2;35>K>jGkw{E~roK9F0-`VlWZM$`M*p@a@$PEc(1>_R>a^QogKqaNfQ3>pu zr;m4A|M6b*MkK016uJ9g(&m>}J&^5YGKt?|9SI`(NDxEtAK2*0$t3dXf~^4#mCr~e z@?bpx%Xa)tFx%pfxnuVLPfkwFSy355&5&nTNme0wSwK?Rlyk^_QDqg~-^I5v22l36 zwI6ABzhU`ExH^@>tVaMm>^?pv zpV$z-B8^04dF}OYT1#6sK;0$4x6|k|w~$q~NGO7z^4T-^G74zSb0(5x1D(KE7$7OS zog?k7)(o(<9!C{KG<;g-?46JAx(p=$?CztjcJ}lU*Yzzf$q#x98ES_BWGQ4)0szss z&*9_S+JN5@^&NURXFnrZk>rrp`WkC%pnp%DAlMHe;(M!hm-(V`xK2`&6#ZF@UyuOU zyBNLW3T}*?B)uS=#{icM!d?T1kIN|jou7Ic-t+E+`ZXB~e@Gyy zFAC12`>^uGsU3p45H`H;F6xK3Y$}p!0xLP=5oYW0uJau4(I{^j}YF!bg z>oGFOSQsuqx{nNzIxmHCARsYUZ|8S07=6Z z`YP{bLXg>2JuJ34V0QH@IO2zW+-MxYHajmZflN-BLFN&T$zZ`4l{4@@R{H}O=Y7Vd zSn*Yc_5>k{Zati|8*(BCuyqh6>NAGCEQUN6g7dRS4xtf&0|h3PfQpeyhBb|CMcYwE z63rbXHIF!{OfIc8CH61gylh7SmuXu7yEr+W0U)}I0FtzI9PX#*X6#gZjeYy|i=HuX z6F}?S(wdD-Oxw`txYxJ6t<{uGvlAhv4uNlSVi6%^knDeJ)VJ8W5W=26KLD5$gA>o0 zT-mkjH$Js{_a6XYthI~hF50o4E}{o1tLZKRBf<{`sB12`Y~An_Yh92tILsLb}$Oz;0_q|+poQ4jmfP6I=x)9)|56Ct(WW!^lw0G1_cK6x~=Z-rF zK*4Yx4o%yghxah<113#x5UsY%UjOE+*4f$SJ@RmP!an%uBY+qg2e6(YQ>p-C^K*0d z=_h2Fot>q=WkjA5VBidyRQr95%&u(NrypOV{qEA2IiiVISa(;Soj7q0!L7!Sd5KO$ zG$v4j8)RKfBlt#e`W5YS`o|awB8y|J0<83U;Aw%VHDlCXfdU6wTST@o%@OVw2(*Di#nUy< z*FQX{%7jEae@t{c6j)?<4YFfPD5a>*A*gB-FuNA8%8}+Olq%gsj$-akB^j$jI9ShP zgh^uzu0`Ej?dmI6t*Sm@_sE1cHaU$FiaADvDE(8!+&+NP$B3TQ(_Kk4WwZbKkMG(tbNSTK zCeJ?H*IPxDCbM7Mn6)4L;+g|s1rn(OR9;O+r%IyhDr4OqT9~b!j7Pf{5K>W-E6UXt z8P859dZVUF;oXuVgPo#}z4^_z>^K?9WL6xX+_9g%^J8emjGa5vZ?C=ex+x<5JPuDE zzWSxBg8pV57z5e^#Li!?_vb3~h_wV1gci(;2 zhKGmk)TvYU-S2+a_u{2|ZIg!f3v7pXbyh%qp^neU72+Rb^pKKO{XA~HM$C6kqq zIY1erQ#e}1a2}HLQ2-=`3gs2h0%^%%H42T8V_Xpih#~>Xc!t2FF?a&yR>B}G3%-d<;yeExM5+gbgOTg9 zIQ=PrNe%#G5$j)!Kq+clkj7+Y+_nZB;yRm}?8>R*)_(*?IPO!zN4#PINSbfre`ZH> zNlN3N`hsyx9~6M3|8%3Ny_^qWTo#daBLd$go>b9El`%h?Ar}|nIGP1mDWmc(PWU^}>NL)cE}sJ;jTaFBhVfqsU8+J> zlio>&PnpS5I6Q6=7Iq!W=;n3`=TpW%b25(1<&K#=PxHtH8=fzIP1%Ry@U?q9YY+KM zb2mo>+~O?JXzQvl=p<_%k`RaDnIs9zcGCD+RcT}-_aav;YURZiq3 zID5&#Qd7SenJ~e}Fi!50;dp6f&DPQcc_EXEGz6j*(OjB)00L(|mjP}qfV{VBuDU7AUkpp#=&p0N(8JFX#A%4HSSO8SpkXl)a9CL>zQ}S>PD#KniTsgnU~?u)Gq2110#xI2Qm( z#Rnq0Aq&TZT=cuL(;Xx)!i!3;pzLp2=LN_TZ^+eN#P^gC_)oX-NDL4_#Eb<(59a7uLjI>%(A4R{N5rGa6<^$=XaZ}GU&MF)JMKbw~pP)J)~ zBUTN9vQO>>KkM>wc#q(EuM4^m>0ed$@D|#Qbv(2KNLQ;j3vI|@d6jkG63@^%@zpL5 z!$Z2_R|WM*`doF?y9(eHgXezI-)_n9enlifFM_TKnMTfh3f!vTHA!q%0$U|qcO$I< zfed+86}F-}0^L-ggV9?^&#X*`0u3sAU@>(H-k91`CpEpsTaov>yV^0f1g6s4seS1a zEw;_fQP`fL7EmWjiy%s&Ij6b##1`!b^MAY_>2xIF{CH&Vohly-zGJJEK5Sb- zheU@YK635sa?XD8-bZ$8deus*8_=66d!wv_6u@y>&kMh6JOwjP^%1SsUeC$z^Jh88 z#xwp2AZb8%f;;Ix!AI8w$AYIk`R+lJodzWGphE>*N+IuO$o>Q96I!vgwdD@CF=S?C z@{KaMOVJPPV#7+O$X-%fhdu#)0Bw{^u0gZ5kc-LkgI!O7Q+EgeyuXi(9m7y9OSbfo z$k;grt;+!H&hjCwplH)UHo-@Mlq)F){0<$Z?6jf>lHZl(QaT3dFO*4?>B+V9Bk!QO zDWK~fp1z_x0(Ht~glWn1rBlHA#t(g0@N{hnY~Q+<^sH_Vl@38*N9ghvL5XE+QkfD0 zI}7wK8YUp8`d!&RMT?ZZQ?yy2PG!{8wE~l>PX!cJR?ThNa36hbIf3N%0I@0qXF0%i z0nG%0lucAXQ~`SRe93}~*t|Ee!7DSV#;0hX0v(9v|9|YgSCd`mm8Q8)dhfkMS|k$Q zlc1*zB~g@GJsmN9F;^XRF+X5B=3*lHFVqjHh`E`FnV626>1ma!q>?C7AV>m)BTT}j zK_b2P-ko#idDlKW^AMsONk|~-Y+&c!XPa+-{#)){YnO8BU42vE*1V=j%UM{3r}NA< zphb5GOZ^1SxsXZIc3FTgC96<(5Rg>BP02o$2YplEQPB#T+tv13w^Sz0%ZjkNC4D%@ zOhBROfID}XBe%(m>OtvdQtwgf!`q4cYO+)mXYDFq7W1w08$=f+B5R_ZJQ68oloMwJ zAe_nxa;E{(RQ+p)B}wX*yi@+5&(Nm6wooPkNu3_hr+LsHR!avXTt{8o9|xTK zGoC1S)uA-F!|@ortG~%<=&l1vDZl!S0HV2o9G2#1tiCYIe)!!tthojdE^leXr}JDI z@;5~!&7fa%g`IEt&LOpZ>uVrcH>&ZY@st9R(#IK_(TOSh=l}a3?SudAf3?cj-?8`p zm;c$0y?hPOegvM!VOVvQC2A6ZZ{22^OGO7G_(1+YjTyF}oI2sC*dyDSAwkwfVS z0bBw~Dwu;qnkt~D0=q(zV3XF5@9Y6dgR4#hIUmFtu?Hj#=r5n;p_N36MFc)2f1B`8ao}uBo%8=2pOnUGN(OKIkEs#SLs|l5L>$qj79b zI_=EaMk}Ve7mDHMmc65R9LdGxcsIJaj2+1?pv@9{<>i;Hs*0c%bfm}Fw%oeg2M}hIWj>C*Z>^m@ zeVjlbh3H!iUMFVvyFUl~J4!&2T6^`imwaU(9o|Ggdff&_2Cy+M^GKytHD%a-E>Hz9!2)zBXhZUcG}ID10cktJwu**o4T5Io350H3E{#*^PKO@m>M1uaP7H zq>dVs8ZR0JA-zLK7D41h5l63`@Sc7;N5Tp86TDF%TL_*Ld!xIuZWYk5MB>f~ki-1UG2~E^^_E;tZGYn$2wOcoDm!ZFFWZu@C(CgCSx}g_|tOWv>&;uEOrDCzMaUn%Yt|kg9<%uL04`DIn>W*Uh)?>R%m5>hrLa zR*9+-Rp6Tlj&KdoIg>Oqu>|N67|+ek;x(hk0a(REJCH}i62LCf4A6J6m3Pg%J7ceInKYdcdZe4T6kPPjA-!tUDgR|goxIl#0!r$RBysl$d zDxHVv>ZtsLLb()>RJHSM-vZ(y_#2S7YWr{xOQ*K?_Scb{Vj|H_IPsm1;eHxQ1Z^^w zm)GGKjBSj*0x53bs%#F1?;4SmJ|KEw4#a#cvw-_3y8y|B;8l$&5$yqx6h)FV)F`{@ z<09xYQJ`eG@v5R8;qiyaC#%Z~R$Y*0@4bVfpjL`Un54l?4BH>$p-5m(lqkGAGe2)H zb=KKWesEemu=Vx!5v6m{#%Jbj4hC!og_bj5D7s!cebi2zXvUycK+IXY3b0}n&qeiB z<@Wl^rvRDeGmgjIyV3{(*(KhWIYb4~Rw~QN@G4Ye?QL~V`HvD7^x7>L(*7~4z&*|n zUpjAx+bf)z?14G{rw>21Eev+c%keH{@*28^0zJ!q_M@M`{6%a4AZho5M|S;D4^hH) z><2HOw>MvFK`2h%hF9(8of|eWH-+JDAyH9LmcdA7q8NGYwKs^mRcy1=d;gO;y9cAa zieRF>zR_Mi-QmpQ*wBV`ci*vl{g3bj3m6oIOLiW>Fa!fqpcUXgNf8UjQJ@KYaPIUO zJAM9)f$0F4uwkEm{4oI40lX#Q0SYfeM~@t}lYk2qiFV-eup2?^-IAgr7;G6NdC|UtY=_D}XGRO!bI?E&O4h(WeHUx7T^CJR` zEc$^*tf5aFZ*8_?9c|W5Unr3bgnAMTQ%23t3P`GcuY3zgDrKQOXp2qU1CmYwB>ml| z)-#Rb%7LW$?hW~w14)%H`nAT7=4vS^ox$a|gK9Lc=ym&Ecga73mQ0k$`B_o>?(1g( zq@>yKbkrU`#5-5dVnzQXt~P(E{AP=d>R1+V-Vx+BHUuN)>T?-L#;J6 zq}%i)f|d8L;6ZD}s*4da5Ha^OQN-$M((Nw7oGU~Il{Ygi*{!Cs2mw@sl~)mE2xIY_ z{7jVTar@-rWsgwYNz~AmmKxTu4ZC;urcF$Y0zxH1DSd7o@RXvbzW0Oo?9h=0);fe# z!^?K%>ZbtFhXIQous6T^wiTj$U0`1MO~4rr-djPl=l^$h?_wak(L*+-&w@uN>15T6e{Q9~rFe2l9K(3GCQ8<-US zpWS$9PevJo0I$y-@4ypS4aPc*DY^ndg>9gJ-1>VT+U&#-{UZYC=d@jT?F8ota1c0M zy8%d;h@?5$d2}5qk2R=7cQ7=WSEVS{E+L^5%pPS5p|tvx=Ip1pK)A`(@E+sx>jO#g zIK8xJ2MTiRM?{S6Xecx=u$IF(3|1v6m$edU4j^AHlF@4R?6zcKeF{kW?CSZeru@PI zNmUWPcybK8wvHm!{04`;2XyYSJOCacIK}V^63rkLtPh0w)$Sgf1N^_Z9>tR+!cH82 zWDrf+!9NI|q;%T*h>{P#$LU|RJ^il#)*sDo5MQiAnMBhoVm>QiA%FGMaU5Y3GUu<@ zM*vB8F&tdRI&qyc$RzS$OT8UA+y)&6pTcmTXT2R67{=S>6AV;W0Y;^JwDcn#I4NkW zwK^0H%d0W_&81sJZJq+GidV{(3Omx-%Gy$j1BhL_35_-loj5%+3;uAGxjh&9qS1~Y zYDHOr!5X>z?WcqG!Hq}IUCevbjf}c-G5Xqu9$8{ua=H>>wSzvHd*p~i20C%_t@T+T z$_(~Q_(chpfw(TirPHctG^lxD}L^05aRQ^MFOqpFCnFlzG#u5}PF}s5!lA)0?BCam74h05GO?4G^{>)KpXbK!Ie0pojetG#Jb_n?Z zScxKo@N#x)9D0+r`s87&Z76kP(o0t#S@-ZPMo0O8m;u2OkyOTE9(_>#69XrwS;%Y9 zJ+$)C!MrcigSB2D6b-h3=hlOJKvI7RUYNQRyiw8XV-b{IfJw75Nd($4ju*)2=9<+O zmiYn%=Ip*S?erVL& zR)M$L!-qQUU`IW47&9X@V@N)UoYC-yO>%|uJkEjeD`JzA3pR->*L8Udg4V4l$+9-+ z;%1bk1j+FCVF&#vMXkmcdQCjtqOctpa!`C;E>VLq0%eMFLq)ZkqFspYljEp#_|`3W zQjOOy+>h)fGFgQaw3z>fym-G`wCyC?9I7&Sf z7v@_-T{U~HAr><*wag39aLoO=?AxRFLA-;19O6<%luUp*#fe>)6a%<7v|KNSA zudQW{$|J%wX}Gg1(X&)QV$*cwywu(`zY@$-zjrOTw|CjoNIb7({KgmW`Xk@u9|-mo zkTj^!P=S{`f9qV=HP4423>n#^fTZ7KCrqW4s)1Auq-r2l16pUa=6tJxq1CvMkpZ5b)24ee4qRB;vUx%#ECcY-x-8?sEOZ1h zton+O^HmUWpu7})0tMVlC8IJ@gB1fQCS7?D9cZb+XX5D@fi zetvO$Ed)mTxm6s4y zDmjkoRtBr#b9z_Tm7Z_B@1QZ93<{hiT>{mId>DE-k+xR^`4g=zU>M9c;3D0)Su_6252i;MwfxYRtMD4+sF3Q(%~OGo9e0Pv%}u_<{W1&zluaVo4iF8~QjM{1IP zF%mNnZV5;#pk*{F&|d-Ri0_eZT{b2>%Ci;+P{>hE?)2RD4ziiupgqzUnC{q_JZCe; z1)A3#Ied=pB3na#CoriTL215Flo!bd6eUMM(m7-ja&VP{d^8&e#A=*1Cj3m8^&Irb zn?xN&D1eR-kT3QHihQIwQDayRSsh@>9Hco`^P@)+CF2>`%((L@<^ifPQ9tw`%Aj|( z_V_$bZ98zEXY`z!Rr9FkdF4@?jG=?brGQY8f4G4$4+|(MI~>*j26F zsx@GFX^G!B*PL-Gy!gUuaOrcKgA+ z{nN#(mXW83q|#A|=aDnn(CKMFFDX-^r2;xj5|@zPa_I{<#m`7qpzrD(F-p*$q86PO z(z%E%9XUY5$~m^8rDmaTOVhhJNP%^5dTVQa1!v!f2)NK-1Xe_c8MR9ve{B836ZoIT zF|F)(vGL5~g*RV&1yExS0K*4%_wF5ASXh8ACITb$=Q0kawy*_ksBf_Me)1zLgDfA$ zyzkLN>>i#xLH1LQF0>ucW4Y&gdUA<~r8hmor|g5*;f0E@V{NLh!1my*2S>SfZ5DgH zF}JTM&fCF;uF_7PX}9V5P5b4?S4=jD4dvx_{_GhdgVwrz?B(kZ?X%l=z}r$I(QIp| zZnVzM!`9deeT;7N@+Sj0G{0;0O>NldMcv+5w6h%Hh_=i`FPR=)$ARs#b+*)Do6=>i z%|&kW_p4uDw*HX`Z~%F>h*O&r0Anw_a?~(yMCN5~TX^Tuuw~_zQvFmWyyyDbyuJDA zX*+@auE^?f>{~v>{%>*_`AJ?0@-)dlXfGNoOO9S}QoOM=>zefj0<3)J&DYV98i3qw z>^TSQVeg33`Vs7BcL9Ia)>K#tGMFefHH&jIHZwJbj(5vWAMYe@7d%}#H@<)G0l_PV zthh9rNTsi#Z!O0Lbjf-i4ch4F2>edej$#LV{`@gp#K!kJK;0+Q?2;f$2Am6z+fY?zFP%M0FrGa7=#zVPrMn-SRGcAEpV9PO-0r+bBzM+i47gH>_&sJlgzbn?mUZ*;=B@LN^Qe+(W7yJ zR^gZPaF!M!c+lFy6#ZNLeRgsD%1DYEh8jT7uwpgv+zDGZ0fmLSVmpx7#lM?k2=&z13kf zSBKGDIl!})mKLjTXmBC5h;}VQQiMrx?807z&4KYYWQ~6(s5IpxWCTN{VYmkAiR48~ zzjZJ9TKGFW>X~qRI-T$tl`j;^rGTViZGC%>YF8=mf`95AB3FaHl3c3bPSAg(8=#!bSUy0s?KsMpUA!Y_;YkDU zsRH=8;tAqf08ud$LVU(aU*k&sI~`?_6hrcI8pY#}jKVk9maM)s$KHkbK7cW}zIXrL zjD7UkJ&&v+hLjA#WJT@5kpuS5o1M0~8n-*QZ`u?d8))JaUS>BMnbX5^<1dnu=J3wmb{vrJ}tYK6n6z z^dRMe0iKw*>qLaQgSVc_(lYxIK+vwXVnbJjm!(nr&8Igkf&oJb5vNv{CsE$4S|!}x zPk-=Z7_Eqn!9d^b?goT=7pAJvUO9al#;XDFD(^pfVE20N5w&m`X1R=V0YrxjT|-g- zv!DD7Cc4Fi507E~E`4?dV92_4HMiR9XO0_KSeV5);J^oVzwaRi9SGWK!Wc~0ETCH{ z`781KB*l|F#x9^_IuB!Z{*{xia+#Xhu+Kid>;MA+|D-UIm#DL+I-Ka7~#1M0lMfS99;M4T|^M`8;FYT z1~C{oD36|m7zC+q)7_KU6C!i|;x`{z4?xSjl3LpaRJj|;L1v?9yc#z!3Mfy-9E)KU z(-;bHzE(t1QdSwI2-Ljo1~1AW*FsOXDsPZ)Wn6VG26r8gS}XR>8|Um$R{>ybfZ%gm zMAV(N@v(UXHBl6(QqMlawzL zAx0_9i())C-QH%r^3(1;-av>mWRs-5%NR;Sv7C!?^JqK3%hqbc>6J}l82``zdd;II z2_%`Dwqs`jr?huA*a}AVGmNDLyrHQt6a$8?t|>RB6pz@8EDrBlb9VL0P1ewCJ96}p zM@+?r9Zy+{ZfL)a(pCL!2LyC%H_cjGJMlV<5|aE64?nTTk9Hi@96%#NQrfj6=S z1UYF$np`E{OXO?Erm)^G&W_k?FCDj9BDtwHN2q{t)_)l)lwz=6oL|iM)-bF=aEr3J z0zr&g|L(v9b=XV2N9}bYmX=rK5Gi=v`kwULC;}H6jxK_77NGc#zyB`Y%__WK4UEL? zqf4J6h$6xgLb@CTbR|?!ZFv!qt=iQE?b78(fR4tk6v5h=BW(b4Yw+@g(GrvLB2vk9 z0I~9(mI(kr{jP|)r=~WWIR%evPgd<=-!Rdn7ZLCUbF>?U(T8}{_drq40OXpK;hHP{ znh{CU88>OH8JkNB)&z*^U4&)r4MhMN)K4(<@@}nhrImqsfd1u{CEh}Q>6!cq=N8Q= zDIn=Hsp7Ad=nDlTRZTF*JK>gGE9(2ci3ZXMYk`P29TOu$hJFHYY1arDU&U#_lQG6V zfTHOo=mC@yfc~&hae=E0uH3_TIDVAe-gh|vOSY%q_22r#8mK7afd68wMY&K2#V9T= zoIGxaJBsb`NX%|@KXPE>5(bG_@&GE@b}y6%+nWJPpR?K8kUz%yhiAdVk-eQ}~A58B=UEe@Z4IP7%k19Mn zHaApTBTfuhQVo2mUBNr(EdcpB7+-4cD=#at*0vVs*<_qE$-9cCorWU-R(eh4%(Y~W zU2`rLPO`>vnp)BK3IJsl11!r2*eW_Wi#4+t`mpm*12nJ^C3}I$d~>!;2p5sJ>lg;C z1L)dFfKPJ(?7eaBq#b2_WLd+Z!=^m~3_4GA)J!=DK|0@D+d$NDoVd^dCa2cy)`L5= zc|X>$L^Z9dwWD1};8U9ooG0sR+=fR+ZE9vtB)_jU)d=dF8mj=zVt9p-=+&EpcJcGa z81H1`SR|LcXV}#Es2y*su?sJsu~L9t*d!5=^r77WP?nQhM61e)OyGpTK~CzIsvQ0Y zQCro5iO!Wc-2;;9H+AQCRga<(+5LHbyZ3*D@Nzh^wFPjL^({XiWgFn!=sKP|*H-Kx zj$ux9cG@8vztj<&fucH?6z)ApSF}=M3+MCj_gAGA!}nj5BUR1ZAr~sDGv)@`U=K(d z7LsaI)5J8M{aI*b&ctcz{eOEvQq2O?8eT}HXjHV2hWc87+l_eJMU%)jGCT*6^pQ=B zj{thdGcVDY+nO=%W4zAIZaYn{8kg~?8+S4n$ulw247BRH&BNEu&M(@^;v9-zA`nAJ zpFVX253PYQ-6C``zRj3+VpfP7Trik!@I5icSiXAKrilERi{aoFQ9Hz=$iPrX%_lO* z)N&)5Pe&OjiuP=+E+*v|& zoC(mi9gu5VTeI^MVgs3mP%5f#n3clINii*=cY1c!deJK19h$cl3am&)v8^Q(we{BC z(P5Rf#fC`1m9=Eu`Uu@D0>}))}oi z&m)jjq@8wcA(awpg`8jYyU9;+?l0)*C;mI2Pf0;CZqYyqI!LMNp7ub`$+`e~m0k*`$XcK2buKb>KAxd45%M>Hi^NkM5XVbE7j~BhX%C8GR)TUgM3`4SC@dy!gbc$>z z8#{qW2`+03I1HVGIa$Mbi`rbe!EL}s0>@P$FR3Ui_GqL9$f*?(L-i@TSnVj)q9|}m z#!enYXNP@>w)3ae$HniQk_Po`AMqJRw8eeMDaE^F7 zr$OHc@2dUvo(_x&b~$WQyKi$D{G;E6b+oDZD06ngy26d}T{(Eo$dH~;b1`~VY9_GtQ2oexoLWaZc%2J)Nz_N?VL9j1 z_=@TpbE)#;j-?r&0yAnZ5-42;;(P{Mm_?T%C=#d)%ax%GoTq0XHx!^!fJ_;x=Slg_ zWUjgo0rfdJOO?DrdM4S}s17uLgaA*~r1Gq}O!xGx&J}SpD2sH)dWt+M(==O5b7+EZ zS3Xr28^}o&DOBkSU@6e9HUT;Xc$I8XWz)9>J{7oB&#BFnRu0DD`tA-gX~_blx7Jbl zQGEyytNQ|@Y8}$L;`1wc({-00@I8H3Ha0%DlV5#T*8;}|L0Ng&^Xzjv6J`dBA-&i0 zrZVz%%E&sxa~b;0u70C*9LP_9Q#4b}-HPlgM~I3>s&Xo-=oUIh>5l~}&PIN%&DSig zsXh>c->SDD@@OCv3fGuGSKzNHtBFl*!0YM|qEb&(G-Ndip z`Cz?wASpU@>C$ts56DN}zqP((4JCQ@)+^_&sfwt)q^X`S`xV!FlDyhFwK`A*FW9C& zsZC=_eKw?R76EYo!$16k{r%tnJx#c9k< zSt6!5Pemks5n4D^hExswY z065uREEDM9BO94n0I*l=Jb5uPo7(D1kHA@m{oDBPBzA)f$P|#g$SDo=`nk zH;)1`B;JCJE@0Q&{m}aR`-y~EN1zrQdDoS~FGOv8bObwAZ1iMffsJ2`JjwxieooZh zeEkh;Y^=5ikJi{nuz8&&T4kJ|5OsF^WE(u;w*BhkYXn3=Hwn#q6oDq^&#|=hYugJ7NT#;Ch=Fl{sbWDIJS8C*iUTQiKB<@r3+my$C{a3#y2v0zS+KmOf@X|3Nsdl-e-Km8g`^^UzZF+T=ATVX{Rq#accCxqCGB4Y>-StHe zF3|vh^Hm~_D?;e)Tcg%XaEPhdH3yOkOuU5-H5*$A>2i0_t8T%E#fX%dn;XO4xXWI? z@UoNpW5a6%pXmljI&5VXc|_E{+>QS zk>rW?%mui)zJ@I@;9A+YG&i@l?bGf)c(pQs zq{WPtJZxuhe1x;5bOL0kpNoALok-_qmjo%;gYg)i>t49Sr}?SIjK+=<&|RfL`+HhC zhGR4eXO0(mi@DIjTbjeR@M z)vm!VMbUo$dAj{oI`tNcY&x~s`vJ5vXfByhn!8yFn51zaT;foPL~ z>=ufl<>h5Nd8FM=pFZJ){VWCz|M>s?%ElJf?D*kMJ8`ImahwIX0HDR#6ado&@(n`{ zKb{Scv;bvOXKOw0w>nQh!u^Lt=jeZ{D3ygM1hZ{& zte^6%TN42D@4fyuQL!>@0mIh&-4E<0z}LoxdOO~E&^itPBt;?j_(>l?)^XbaP@4yb zxCuyY7bZ|jpL0Zp>?E&h$AQU3`|rQ}7n{S=)5(rbd->!UYp5x3&zxhp=~d)IMQoiT zYS+4$NFu$cFR0F?RFYzA5 z8}k};FVQO%DRO3N%4Vjg@btQdha~`{yP0^=LSagjvp7n)4VWcG)KOGhfrZt>cCjW& zLm4U{X(Uw6GQWv0lkj5~5a}+AF4ow97t9KY#8`we^Xtct0<@4x)kdQoH-S2oaIC}S=3ASNaPMggY( z8wZlA@sl_Itv^~x_P6jcjed>TI3ALAHUJKvJVa#9Is@knvlF!G;J}&<4NZAjyN=Y` zfjYpTj~49u&3hCh7vWBmHMdj|sf_l=5d6|dmu+-p3Pol%p2Vv7f|S|2_PrkjK+;=1 zs{kEGZIP(HF*?Bx0*7rBxfhOiv1Zm1fmEKi0FwUd8s6jS=Lo3cTZ`7#RBLUlnH7yF zq+!4nIY_$AZ2Ce0{I;U&jm+$NRHsKoAzEK%oTI#MXsom5W}Gze6-*Ki_*9z8+s5LKeR}B=+hpy2N#4N#E$Q3ycpw|*I}%u(J8>GX>^T5SM*!G9 zwyDKgE5yn_Mjx9Zvgl8L_+vYEuu7sv8=Nrv9iHj75Mqh$Sip;zqS198Y_^lf>tx$w z?|=BndY_D7)StoJaR5(j%|y6LBWm*o(T-=ShkE9lG^?b{>IdM+03wh!k(eJ3PY|_q z%K^EHTIf;`dPpcNQ9laLL&1rzC9enk_`;?)e4`G0lWcq_a+J03>c=4t zU10KUcxKD4T)%DCaCA{rR*6@Cyx}vFMB8XbeyTof?XtOjQzn)lIJ5M6u6hM?i@^-Un8p0hOQkTL}4#}2kyCqT-=@?ibO z;iWtN&>Rkq6tF&Y1#`>T=$3Uq?6Zmabz8)_f+90V;m4ZltL@xN&48w442z?H+v9eZ z=W_B2Pzo^D(M+PzWQ3IgPZ@=v+CiBR!|#Jhs{h)+Va9IbLR$;u{-V9(PKDb&|F7ep(E$<2odF*)kIQN zBo|01z@DrFLj%x}lYqyjp&wZ%5w0I@??CZ!)GF!%rwG$5bc>+RWOP>wDof7$H8(FU zM{Sh4>v=K>jk`$OMXV57v;b?+iHR|La6nqr#fP8ZRAp$!3W`cyDG*bC zq62x95tIXNT;xhDE%aJBbyxkBkE!pf%c&vM=QwEdTdWxlCgr!5mTl@Xi;w0OLYuBF zVvx3CMa39+2}p|bna$N@JJnQYucB;d!f`_hU7P>DUIbrN%Bk&7)qt7+vlLN{&`$iL z9UMsd)QenB0ZFM7)t6{&(fhW$N}nU@FbvG$F2IbPmGGbjcodqrAEn&rs7K;Cf&#Jw z-m1DP9i{1t-M;;~(}O!0LGCghBX}c*nL@#a5|BL#-xSFJ00~pOwz6o|W!ZMHwH8mo z)mF%`nrGY(4KG34jxsKGt**A-T5wKM0j<3O4SenDBudN?2a!sd6%)M#-6S4eMv>yd zW!UdBAb7+a#+l~U*H5ky?lFB7FHCv?=qM zBATwxV<>nQPrdETI~c7~hu!z*nU~-@FqCXEVrnJI)$fWeUy=J8W~U<3WN|EVur?& zGRW6W8Ls;L6#VfP=a0XqW3cTnnwr0!zMFXHn>(=Rq#}|A)fp=A0>yD~P3O8Ux;+IX z{pPw|Dy38nq-r2l1F0JLVhw1W(VFwT0!fo|8&E2e^odY$VkL1*oVzTK^YB*qvcIT5 z`?OAQE4&8L$UCAZqtGYP9YvtA#P&(Pxd{?%X=NQJmdiK_Ll+d{`hJ(T4)uNFvS?LH78o^WayQ z*RTx9zr$<6YvLQfcx5lSZ{>;T+kH7EWutIG`KXz_s^Ua-PQ^=S?fM()RbXJ$NI18N z5@BN<-O@5nZq{g5XlU9k0(fc-J-C2l$KZV$aG=BE+}+y~Hd0PHoRu4WRL*t<+lD)OJC;?q5mV;X>H5e$-={ zKe!&~64YC?2fameiR`T>QM8QBq3=W|+lPnXZJfF8!Yd0bmx=eGEF33o6Io^pBjz3C zYK6r(B?8>Iy1c|3g#?rdM!b8_qm(P{K^_BvD(9iDk~@3PIfEBItK%Qq!h1otV2 zUD&2cHFTuJOv-$zh?fExN-rPS#RT#@hCOmyo>4V0*J^BQ6KHfB!G-{%0)Q%lr*_Tv zny*zf2cY|JwU%@{vL4W$D7T*R)Km#yRuM_p{B-|!@SeY%^hb59dJDc2+z6l4yUFL_ zYeDY}QV!Gq@@v5xdWM~LiPJ7R`Z|+HTIXN-9o^?vz>@}RmShS7@k$2ac0W>9Qqi)< z(KP{Q)h<*VG7_b%?@~tJ^%=^l0isP6u7m$08QzzUKh)vv^*-7^NQY;VmsP_v;N9F*9}X?qtv!HRsbB}*jRw(y_H98lGH5J6x+6FE);T@#g2B z+Z>*zGqHV`M+Q(`S#E~_Yc@C4<2(vpfaJxgXv6drJ`39l)S1#dvP@YH`Z~luHa@YA zJ>Gq6F2-=u-D(}}ZA3K9x3Q5KqE+@_x4UW!*!aP^5pV?=5kV!E=7;U4@BRRrkv0Rb zO2o`z>+kEa>e6&O)Y)W*4ik}dZry%+<&KSvV~~r$q6Yi>bEl8nfffLduuelmgLdQE zRa?eB@ko28z4hHUj6jiq9-r9s!m`a0abaZ*r!0UHGqIbHQyK9-yMRX{*r#U1s3$7p za9bng#%{14TNMlgKe+gbJsF>JOn{t$A3M@zXU?<;TWF($*bDdc1N25_aPf(5fHaf9LeUqXT&hS}T+2ZBY;!*nqqrIlw1KxrzR&T$00j>U^&NB@#hFq`Q3*Cn@Q|tPxvPP&ZNsB7s8;{7E%|z=hfV=W zzpSQG*HSg`eAj^J<`j_h`EH{>J9mFAAgP49G9uGav_#+$QU=Kaw?Vui5tjjy6qEAc zH$x<{fya;S)~#Fi;K3t^um}JZJVeUKj7^>;m6SX+*5WOsk!TdBFlw!=-uQ^_mi)Mzr*9x&xXJCPWVg;NE+74i*Z!D zY7Yr~oqyS;KH$4Q5GVqqND8*_7_z|u8SZKzZV6Nee?(NyIs5qD6Tq80HjmfTttblR ztb7#97yY6tAWNYG&Z&NQU)_J}Pd)jWfxCj1Cw|&crI3$u1y+0~Pu9V1UD|8KweCxB<;R##F6(5lH=8k?+&h@*N}AWlUCb;FINbsHxH=MIcoM;H@4IY;$w7)dHr&hTrQ|ksVi- zS8R2474PEPFvu%JT3yClFibb|p(2thvk_&OIgX?-5LSaA@Br>AkFCtUi8)WoW&|J- zT+pk;EXU{rGDfZg<)MhA2OA13hklnszQC7?&HKW<$IowcQ#992jELO>FoxCwxeAyZ zOGF$UUf8sM{KanqAZbMaBn9R`dGQ|W3?~Af=LJa0m{xsmtjrT7sMeYQv}935b@>geOg>t#&b7+F)+l1eLnHw89!bXN${=DZT*liN&oL+#i3oT0#2IVtIOsazNrXZ7@AvQx z=nmRvg}jy(WLjfwg|##v@UeFr&vm1W=Sn>Hzl30nZ@$ZMDn}-TYoewYJF$YW-V2u@i>Z$*Uy{=@FQT4 z1pILX#2?!fg5&b)YNtPT6rGOsr4D69Q$5kLaWF!l3s*)6=%nhA6O2`WL`(CdMC_Yo z?O8_A5f22))J=Y5(}mDgRW(*p*KS3XfDzG42xJ&4JRnnzson+w=s)Niu$8Tdt)X4; zs40}^@WB>)^X(RlR8aVgGuPgE3=KF!R8HtEXc{>z(F7iVCz>In!tZ@shR5dn3{H zT5=t>N)_F&}Y0v zux;N}jxAnXoY=N8JV*|Yj@S}TSvFBt2-uoSKd3-(T~l3Ul{gwGslm~Sz_YxknNyn- zHnY>4Hp;sK<4!GND24%BA#1UmzwF`(ehCA-H(7IDf33}F#>azr+I%!%gD7vZNiZt< zi0`Qr$eVnG2BHZlpp;mwHwh!RK%lR6g54bo_$zxAp?CHol6v3gIsT=gtw={xwYg11 zQXI78AgoVC!n0lg06+jqL_t)GK_jcIL?k^&6vWq|X$2%Lrhc`;g{vH=sqN3G0X0_& zNcv|~RN@iUm-=&>2-4jZE5YMMD@xTS=(W8Iptw^66TQL-hC<8MK*fncK?bTBNJUcOprH?Nz z#;qUkt`kfeOUro6h2AcNU#zLFapfvLl?+_E_4Uo#)mz=X&4dPB4uQ>oMO@B;wxI+v z9EZlq$RdIeKv)6z+fabjRTS9j+$517wg7%s;A(5H=fFK((Sv&N*eR8lC zY~kV-9M$&wTX>H*{l*vX?mzbpow2^8fTTfPh6+5Fjf^ zUn-eY4Ww!yRRgIS@EXuMqc!Jw1d=L)$<#3Tartx!QU@qh`54Gc6D{zR*}y}q1m!BiJFGdo}$R* zVr^JhknPTv@Z*W|l^`q96~$qoGmx=oP}c%I@jtQg;egrXw=y1NUiX3K@Js)+>4k8A z`gbBRC8ekMlenS>ztx-92=y;9W&lh|DjOFS^+LL5ZLSv=T}(YomMiIv^dFMF&&;7C z!@=nmmZ51F>&XaEyIw6XFGo*QZAJO;Ff_aBPCla4GZMXnw0Vyd1rL=TaIdYDv2gQ7 z^%mg!fdQ=E5^t3Bl*@0F?u*h!Vewy-V=(4|7E{~(p_X!akGE{_lpb~CS-na>ge&tt zsNUjzk)w=N7gly`3J=B)@WA<5&xl1c3*nLBR1sz=BB@8SK^YpQ^J>q+L2eM0Qjs;0 z(J`?EJu2*nB&=;u-b(KZ&y^RSUwAfP@chv~{b#?&hW#|0iS%xe1C=|tEAXwxM4*c& zcK}2!4&N`?nGas+K9DsyNR;vHV}*Po&lNy4aMG*v&{XkETzkS%n-_t(Hp1>BlJPA^ zQgUD=y}WdS83O9d=7l+20DXQBzSyiGI%h3|v~QIcU+UPeFcsv?tE@)8?vV$Ls<$L~!D~3qUjt z19~|fmLB;~Taz`T6D>!M&**SDb~?|?KwCi4OnGRe$9ds{+S^Y)b@r{TfpBbwvYix= zG!>EbTicma8Bf)~H&g@3^I{4}`VCd;HikCXA|Z)reST|m znpcU74syMFaPBmhXd)-U_~k?(v=cUQxRgZ>!*`(9Gubg5v{z0XL0?(zPO8TVIC10V z4fJ)`aG+zHonNqe`2C~kGh3T0-RbMxEP)CrXFv~%421WBDUkd?PPgUIXA7|7I`)BM zV`JFOE@P9}OvbCngk&F2xrloIM$Z@fxstZJ&JC1XLH8>-FrX49<z161C{e66sXr?$Bicxn3(1J%g+pU>kFjTuuqGP;t@dNzu>|ob% z2nXS3Y-ugVJ9h{Gu}L&hWK`Gy#&P7EnUza@qbsDYqXOFQu2C-=PLm#PZM3eg4uZiH zxh=%|A6&8Cp;77&+ZyB{#{rU_J%5B}vFD(i5AQu7fW|W5$5OYu+$PA*+VTv5({?+0 z;skooBG+}k|KSZAl80_0(kd!yI(P!f#C9?8kZv_b0E`j>EVN<|^44o7Jm|{JTa(s5 zFoumEb`eyxO#3pi@r=V)h>w%&H7XFAS~i&*L>6rX9D0_1lZlh#6%QaYJV8X#@?3lE zjn}NUt{mX&f<3|pbarOSjvQ`AUwr@@%RGRwaR=dw$J4hqXv-b9e*uJyEvDlqklDCnuKd{YzJ{ z$K0}FfTR`0`S$Yp^Hx)vZJ&HLU{|~QsUvKpvEwRgxfUoM8LcF;PF1Lv|PH0O;Z|UJc1+S zbZkqr7>nO0+U)T|b#Awq%eS%^Q{q!3yUe8Q;*V3?^H&3j9^o8qn7gpW!{6aC`Ff~_ zP60{7+DRQ#HSq1J0nsWcAnCWKz5ZxU{~AEjAOpb?5Q0f%L>CG_-GB@uq+G>~hj`e) z(`sK|A0goH0!UeMAb~(sg@mXnDk|i;T$=|tGJ&yRd3l-tE+MMUg$u7(b4x3PV6F?+ zwK7Qv7Ve@;66A|#$rmv4;r}4M!v)Q6`jg>VaMb?0#(f5c}nUPa$ zJ1D;7&nS-Zx)?{Lm#YXT(98k_hyfNz+l9g0cdy5IqY)Du!6+-nsJ-Mz4o=Ff_nmy%_7*azJC9O_fAUDFTc}p5S{4=!CHXMxhj5jH~jhG712o zUEn|&vwn8#K8naR>+EQ?SI)MI7q?%(f601BF?3DC%VkkHhO~fTVM-<@Catrv%>Lca z&SDf{_ONfBh@?XfB+Z5yc=zQq0gx0yz`)?F-F(=Ox1>qF3jhK`+#DFXJd|^%4j;Fw z3ZfGeBBrmm*Y4cA&)iWA5cY_jA`)aCx(`K%@P51RZJy}qk~9!z=a6n-y{s7fznXy3T!Vho(vbFc=3rz z(FkZTi#-ExyK75CRxHZ0LoEmFWLvW}R{+>24Vh7^O#FYQ+b-o6kT#9Ns{bgDyX1A3 z4j>OzqxALv`tx7e!`U4xsca+yTo92IuAhFd+`(K@re_|JRJA}`DUVNYVc(aaD27MZ zosDJM4=`|19&G{;lYb60S^+S!&e)|~6;*{+0w8k~Fv=wTB{!#nzE=X+l69^)124n? zhDS#b9LVcyA)bkgINzW@%~@q_m1XDW+al}Y2K_dQ5Gw=Ypcn&DK++1(j^%`o%f(yN zG6pG65Ex~#E*4_6o`rB`i~Oyut=ksS@^S&Ml$C4jXwD!y+|q)r0wk4DNnTzN(a`cK z6LZi8d0zuWvb~G~c89#?0QxKetXe`8XwCjVlunMoQ^r&t(NTTdl>+MHK|g2MGR`#C znBOI>X5-BN0e#_!0|fRBgsZd6@mD{;Z`b?AESvcpF(+$QaG!-5+AM_IDbc-8c$$CF zpQqpT-~1t;F@&tU%;mXQ7-sT&9#4m_5^enKd7{n%Y7|E3w;$Xh+V?^bu~{D`I|1E@ zf`dGk6_!{_LxVNcX8AkFi4kL7}BF5rIB<`Wx$tQJsy%+3OyBue}A!iuef&|G&QDKjziR9D*pd-b)02&Vy( zju_q=`|Qc+B(zpJ^&9|>AY=o&){lbfLk2-VRI-lMRaX)vx(F|XTF<;`eY)gPpMqWR z535O2xL3uQ*%(o=0dx)yQob1?m}WD_=i?-x*lH@Oh(OJ{41JeQL_UE@(Mi}MQPO8| z7BT~%Y#tE)4ij!VNV8m&5E-n&5s;@6bQV{XT5TiI01wo#P6lVhwa4Se2)tI+2{9&O1f#wVg^`0V-zIr225)5 zz!=Eqdx4f^5T|*XjvGP9uHG5|Nx76feS3GI;aM{rOse1N2dv#O*0pT}^>Jv#NZPj3 zSc=w~iIGu+Ha>$l%U7k80Z3Xz<0{$Yr1_cJ{zMIE$bKo1R5xgcaHDxr5lN|xpjt%l z%el#t)e$Z9lhv9VMFPBah%AC4Ui4M2^BwwYK5Bgz?wkKW`s?@Ehhv zyx_XwCJxF#x@TsK-a{$L*bS$Ee)^rWcC;nkU<2{qJ7`yLccX-aXJiaU z8Rt6?df9+PUw!GkwI3`o*hlMo60=|Y_Cshv#uZApI39P?@OUgBsYXd4{-PW(SlP_c zxpIV*Njh=70VkB8?}x7% zY=hnEp0M8Dej-HAFu!HHqE!mV=-RBc0tS8S&9?}qQeeF}GU|UkXlskJM4ZUS$x}Pd zT`KKi|B!X}4deI-+L>}eHlvK*vg)EtYilUO8PZAkkbJv)zZWMq@V7X*Sw<0@Q&5ai zdySogMy{z{T!NaA5vH76iN=?qtmr;H7i{4G z*rR$A*L4W*ai)YkH65SP25pc6k_L4fD)7{1;pXxst;MuoDk5oEE2(3u22wSUs)1Au zeA6|cbw+E>^A054Um^E(KKrza6E0K@M-hbDbl88%Fa6#h2_u}hgHDnt0yFpm(D?a{%SB88_+Sibxt`0;DWHi$?IQROjzn@c=~<+=3UxdxLIeY4Js0R{fOv{eV)tmyjB6bQER8bPiZ7Pa zbOCVXSXbqe;jn|wsmn-0cC0jl=sCz=G2+cY$1A>T2j|h!`%8|hx(n-Cwf@EJ>EFqB z|Jc36b79+1X1IAS{(g%jr})*+$%}(=5!QOWD{tBpeJ4!Vv+RHNa}qwvQE~^#KgGK$ za*mwW>ze9bAkzSF8rVq$>GPLQc#5JmbgoY(=5$}K!}QfBXdB)3{vOt~cbG5@^#Q%F zXE^L9uD8Chc{*VlekZy0g1f;BL4uy{Ua7;k_veBjDdmq3`#i6=m3f|3*=RpG_m&P_ z#@RBUkK(L26Pn`tub#0}M?0+?*%D$cCkirYd+l;uNLQyG!<9#AYENx1LJf$1(H6>f zQb5uakn~09*Qqk3YT)bCK=Qnp0+N26n*65U4d@{!Qc(QMo(lpmaCQS7j+0}W!ndCGwN8wLVM{9e*fFAeZb#7<=9RciEw;Oi?Z~G6=$-Fa3!udNBWvjV z25fp_%xaK1v;ibN(9(({@fG{{MnB)7Y}o(Bkz3SP5s0C!!P>iuakjf-zx&|VR*o%X zM_ao)vYnh=v=6V|wk2$AWxu?GLmq(?<%r1nPXRKqbCj(CuCu70O>9#eJR<1Qx&cjA|ja#p&4O#b8nwW+(0BvBP%k6b^6e zs1K_A{SUkC(cmOy&!FrCP?0W}GISQ>DhB+zPSBY#w~th?5ZQWeY^-}k+YH$))8<*Z1muVlZ4^E0 zx+03AfNrR*v?EjoR(6h(S7lHKl3#_6ketzhCk}W| z9W^ckK7NlqaMCj5i8MHp`4i5?Pwnw4+*Xecc@^<1j2GD%MR96gK=7c-;ynA_g;RE< z5#6}HMo=I*&o8Dd+34x_Hy?=mKT~Ia^BVB3KrX_gGW3U9DfxP+hYoBC!URYqOvw9B z!1JdeH^t!DF8=)I_Vd5{PnL7=i2dZh{AWA=_L~*~Q-q;&AiF|p>io2#Ehrt$^VmR^ z;R2Fs;+Jqrn-q{+B770>78VxzadB~xsED`i;>C+D=v`UCLmtn!wzOC!#%_54Q3N9G z?(POOn&k#)y7ry#e8)QQdQt-LO+b}!LYMGVU-LXDAG(uR55i}{JS8rB-kx3u!e{-a z(qs2@6UXqnj!&l(KCABp!fb@FFennjib?TJ^+Y{{Alr(Haw~EWGhl<6Fe)WGfg3Q)7TiU>t`r5za> zK+(Nu%S6bG;6(^kb)w(KYMG8dHm#mIlzE8LvL?ymbTy+U&!Nx9m0` z(5a6vDYDnjy$q1F$mZvEC{M3_{-EEgYU=FVv14|uGY4i2 zVD9h|Ak_ypvouE(SB!jV5yTD-2HSvXTSwVnQdI?5VjBb7e#(#yIIsvqdISJGD{nwD zq!1uMHpt^3`;g5oEZMoUXY8d{+C9R|$nb{Uy>kbk>8yV{ z3xFz3?7|8eKMRC6__)tK9JRE!*>~Q&VBl+Q2IhBc7BK1bmOX~S9O3~Y1I<@1%NcU=|iGlhj16(I@4RAgj z2uQqC{=7=Ke~ocY9iKfw}Z>E5x&#s=oYRWGrkTjsf-HUiaIHa+u zJrELUu7$2**Q$kTfq6p;0oEc`%MIp#Bp`;;_{BHPLd1PGg03y=fDkduWF3NySgl;jwQd!WRc|@d_=SLYQ?Z`>OE|HdF>%tyFo63<1-(c>| zk^$7tDjv;oZh$~L7Qs_tUMV0{fTn;EsOPxircZWv-FalXV;`Xe}uuzlv74NhA=h85y)! zHneOynwtpE%jrdwx`~Uv^7WTBmvufJt&sASCQvME>n0A7V&o@_HYh+?DOx5%J#Rtd z?y`>O=48P8%25HtXikY`;KEY|qRY?&8M_;H<^)Qm!$c9pal!p3F$Db|131N)lr=jh z<%rh@jleg8h@|p@$!`ae(kI~ww7H=ded5c3q&!c*2|%QJmuhCt&4jktl~-3B&16DT zXJ$c<5NSO^pMna(^Jtm_NzZk4SseEY%PW}0lHJ~Az0+Rm8YTA21^p)sN z0ZF5q3xFf@?1%5XWcd&)L*p@ffG64qDEYEcoXVPsfwyw@L zD}e93eC>{1x%ZfSky;jvAQ{|%HjI$38sr2&dgpDcs;;oU!Ex(-JZydN$=v%6p-{8^uJV+sTxStK&l2( zHQ+U%bw+E>^9m&WVl#=-5v>v&gL~n5;z)VEeEYKNP(8>Jf}Q&k`aWi@L*Ux^L zbWJo;p#N2!Q7iOe>44LO$l<@*Wgh;2a%!4rvJlbSle}mfS-PA%N`^0oFEw>FIEf@Z zsvUKo@8Ut!HZow^KT7f}89nVH=3f0Q(MJ3AtZ%dXTl5?FCcPyZJ1ock-Tm_Hzn?mL z9%?{sCE38H_m?x06egi?3FM4#Q-My`mgEDKqZ5^*DJmz|PGm@hw7>g+xz@Sq=c zNk*uNc_sOIJ^qC)xS%42w-Uwu!c)PI@QLsiPa;1H@}qBuKvHRg`945W?Q$R(XJE;x zQ&1TASoC3f)n#wYvIxh-+M~C^rh{>-+-Tm^uIDt@szlP)xC1593wS7G$;c(OYi!Dx zTFy~rA0jz{z@d_5$VsVWpUSPAE^P~7&JO|1W$-QsOpcsmD)>Ms`(Ba54^yVFrm>fxj`biS94@}9_C z03=N$u2;Tv)5A(I@zUNi;qSyq_n-UM_8tr0OXMlYpMLm-;4$h%M&)vbD;;JU&ShiR zQtVbKiXHDxEeO%+h$HxBGQ)l1q8c@4x^RWZn zk^+*ZfTZ8<9-Yd4ss_G(4J6NtDIn?Bug`BT1+7=w#pl8|IG+pEg060xwQO5@H)uUs zrD0NNPq5E?_;?f@)`YF1?~7#RV^0g81FfmR42ovzPEJK1@_rm_;wi1#D6y)dOT(;Uy5|y+V@6Gq`_E>)}5k*(f(eY_ThZo-vh1QgOAq(3L*=C4; z*g$^3BSg9^13cJit*xcl9hwdF_1TRZw`_4e9Y@wR9)uwhUn59F299ShSbbxy-MT$Y z@Pq*zfiGE8Ep~7R4-hr8&Bmuz?bjc7Q|q~6e{3C_;CyTo+uG~x!W#!1^m*yx#~#uC zKw~4izAT(}PuTCSciXxg@nF{&PeYJ_{#Ck0I(eYbf5^i zmDvX$T(_agX>_m!4vaiPdCr`wmzLG0aa4Zs{a<5W++#IW)yTADdjW_N0OpyKr>*N~ z8#WDQ6W9>{?$S-`AH&{)e3Vw!Vh;jz6}ydei1u{sqhmN!i4oAFtT5ZY_x5W9_(;Q< z@QC&H^$^fyiU1q}suJlFdlv-?k(2l|^)uR1lDDkvC{B9YaKL-WIoZL1UAy%;_S-}K z$Z_)RJKufV>gtOKDzofPikFw>t%-m=2dUo{K(h;rG3&l_&&EbZaRj$+`2@oepD0X# zfTXfFNzcq7U`B=mNyT$lloexZU2i9jHNo#t#t*O96b|FlDRdNF^ezhTxa@3-b8y<; zWT#Fwfv4EC|NhJ0y4{XIqzyGy^uwd*%+s+G>bKA6XS>*$%kDOvpeC~0iKENLJch0n z=x>90G2jQqJ8K*U$8cP7Nt-&Mcp;tot>E1GC~ofYDO}d=U<7fMF)dq5+1F+yoZhS~ z%-VtSeC%Wn+R?T~Yb;H3US$Wp{_@5EPc+|P(|3YzB`%~6&p{2SjkSeGo&TX$ zO1>WIq4#hvo&bNsgft=YL(ipvq^i}_ma2j0rv|iMq=2N)PkVf=ocy(cq?+V4@ypoA z1-NvkEka4isIQm^Fk;MR0ft?>_L=?f|HnUCds8(anoOeq)!SKl$N<=-4mdwQXG4R7 z_ITj2J%nH^#0XB_Jq{l}N~m}Qp8~P*EniDiL!1ksDS@#B%=+&_eAXI7z54lkTk@i% zn|dbsTKGFWCMS@bUa*`6@2bp!A~6LdO|GwR>$%$5_oN0-?jv3aAa6cSNzTV8zx@`6#wfDw}6d|+IFfS>-R zey&KByHNewGhsAk*RMFI3k%a$Ul6hX=|6nOBRKW;E!cyeC-!J?#y#DL36~;9k)95> z*4pt7nC;b=_4VAhM|}e}Iltl&OXVq9;4^`#HrH2dVSXA$w+Mh*3BW&r4blO2mf5@C zdkI5*y!v#H0)!j~1iI|e`yzPC$%P@SBy3YlQx%c_80Xa2#PpOs92mBN@mT-@S@wf- zC#|!!9PdKgL|GiQ2N<-j;(02D0%U`zD}{OK)(qhKb%3O0B{?=Sx^5482kp@iOkYKf z9q;VK3r`vVJsG-AV-$SXM(3x9_?c&lcq-kPK%}!oDqMvrYi?;K@?)+oVNe_>|6tOI z%qYS%Lv@=a;RHeo00C8`(ZRRRo;vIvJP96U4<3x#<BmG^XBFSU2z?c!dVr2ky$yDSegbM+qN4WvnC?cr<%!-C9K?ch(=Lqj8 zTUvy)HTDn`Y;P=*Mifv}Hf_v&rE;>xiH@X*#RAhR`mR#jLZGtkieaMb(#P}YD=|e; z0>!DZ8pFaS4wzN~3XRoF>PSK&0c9iH%O>)i1Z{5cpt%bGZ>FNJ0hZZ9=p=A%ZeckF z5-6R?cXes59me3kr8O5o!4{s_?vr=K8VCa80DmN`QoXG(?$kFk05ha{+h{baC4xN^ znCN$SegB#l_YeNj8@{QbwW+NrpUY*`k+}Tl14$8n(KiJoRYcMjLao00*6Y@mh)9}4 za+(7ixItSuy(Ehe-&K}pxB1#f^7>{9Nc!yR`KzY`EI6CH12Vbzx8#Sc)<4)dKN$Gg!* z@TFk!(?`F`rYRu#-M!!9amWj^WG3^R+aF6&4Z={Dd2vkS!lQ>#r* zt`OaB+9u}~`4*fSbHCOxfldVmlb1pX?c>l*0+MRi8YwzLbEO3B+Vnl~mb)k^{K#)r zekPW&^6HpFxwBYX(gFVS7;Et^e5uk?TeIe|&PGTpPX2ePiwHZ*AnS^VC6rV0yg`0M z$7Rs|>Fk=rcBrE*@}sp%w4GKwNJflwsVg)uBHJiX01%aGK=n*I4OOLf{&btwRdFB1 z$=%N+xKmv!Xrtjy%K%eU~!F@fry&5p)kSN`wAkAgSt+UC3aH zp=Cr~IRzSCTU)feLg+~rgI$y=@>HKkJGS8Q@?;C%ETK&+^5{2|L+`0LsqN3N0S(y{ zkn}I9FZwApCeURhx?~-7h4#+(&NvBt=kBES03scqoJHYR#^`45V}KnLkhGWK&Zs);rK| z_Z|=7nH7Z<&XE{)%v;co%$X;TbXi+ly_N8tp%caz3>>(fj9DAv#Zxv?ALFdBBHWnBKUkC9~l7| zBLk2$=qHpBgp-Vq@b1)Fl))+R#%dc3EUSNgm+>teEB#`lp7a10$#t{^wFd>@iV+-W zcKWt`>%ah+Xm=U7Uqh{dG=p5nyqiGw6W8yPm^)Z%WMs?^M?X=}AR%b3(Rb+Ev_71p zX=K0)@&LtT(Y}tWT~~mlfhLu|6$(@+P@zDD0{5Q+nrAfUJp4e?a=v7ZqX`r#JID9j zdnrF2?ZX=gSVN{eXBVU+MQ=%nepbn$T<50*A(Zq_&>>dDc^uxz#z92V+hmfMC3xWq zkxnG*rK<_r$f}?wHP}!DC~d)hf@#PXe=K_{rb^+m9_L``bd*(`8#)o>Yi-3>E6h{S zB(b)C*$>CP zHTW4_p%x;M%G)Hr^{fnSR>uWOlr~fvGufa|UYoN2@YWHVSVEdfV(-D$n3t0&!;fqx zaqK^`K`N`R+OUGK#dwCxyLxg|0510*UPM}}%XHCJ2W4~6Tkrm|a2tQicftpGJ6`+d zuor##UDx~lT;Y8|SJLj$nUQLhXVE|Pe!f^hQjMzx`fWjWHfiw~e?8MEeOivKF?3=a z;5Kv!$jl1Ds&A8>I8MLTkSza`EY~Nn6RAIIkxnoVP}KF66jQR3*8$gsz)GS4BPs8e zElIjh$&?yT1SZuysBEM#eAsU9jUZRygMmi?8{$Bo+-tWi!;hfX^ z!X=^Emi9|T56{u#w5P24b|2?=ApduA(nj(Z0Ngpu>{h zMgZrKne>hVR(^bqDWHC#CDQH4ZlZBZi5`COi(lB!fBtj((T{#)KmF-XZQs6q*v}b< z6lvrUS)v}K*+*k-obe;gn4yU-4~XPffAw$e)qnl3tmDP+*^mC^zp%Z}JcSaFKnetI zcV7?9C#6;W&ilJ)Lnl^0_WoDahr{@CXAjrqm8C*~3I!e>3Y3qF8WWudW8AxN;e!3_ zXFsz;hYtCe_>-Uf1W?#U9~aAY{m8yk*$7aWXt$ST=XZ#kg7ss$3J|@^K?`qJWcn{0mR)CunUG!KO(Ta&-cL=f^fWHH*o=9?>cU z(5@j6>F;Ux$73dwY>h%+8U-WlMLLwY4*Cer{VjnCZb2+WiAt|7E0uX5uJ~Rh0c5d#qox66BNiX1${BD&DX9;lZTd)7#E(~4*4BH0H@%_M$qk#Y5GfzHi zJ9ceBzk-eS`mCKebJ?Z{u$HQ6#9y!0>w9H+$?1|po=X7mU0IyAdVF5K^Udc7;FUse zmbc57&)e~{r?{Sb@$IRrYr&@6jn1qU8)4FBrY5P6>-g17+BR&$2M-?bW-xrcU?+|p z$M^X%pxtWw?svaKlAda^z0TU{lNW6QpI-q?cT>i_dwZ}k7VY?vck)T$LZ0O^N&u1y zKpVraHjd9_hM@INZSTVd`vAW{K)*QtP1s-gwpM&q6tI1Mdctkp!h(b#H{toEQdBk% z2?ffU!fJ_BQ}JZ@lp~3|x~vwtv6v*}IQOD_fnx5|ih1 ziO8mRdl{HeN)wHQJ1La4L;|66dw!&RFC5TqJQ7xWCj`T|QySoQuzACnXASr;)Zqf<;^FRNl zA(xP4WX?{VxoBsu-Nqrd%d@gfPE1;=I%UuABQxf68{MdI9iZv4<0k=l67{96-NBbx z3<@0`ZB|XTq5>h6M3)tu9p(`HW&mF{kR9gxFF(&UaT_DMO#27+m)-=?VV$%ab!&*Tp{31 zk60Vh#Mb_PdwSmibh&~cM-#120=yw7-X{=1jQl-m1V{)Wt)lvR?8w_j||_iI_Umi z{FA@1t=+Y5bUkr$#D4S2s|a%A2%<09i!UFbj?9K{Rl97)y}b~J7_$L zWNc)4N?|;##?d@RTgsv&SeyrFyo}*6N%lBEr|wkX*+t20OIr$HQf>Ko2d)T+lx7u( zMU>D9&KChA@%#e!cm#V!9~oPeZ8fH7X6(C@HY&aZC}!bvGSsQsgr1WJ+^zIZ$~LYH zMzdsHb&x6Fs`*q7^VJyCGm9&Hy0RogN0fC%#vEgmX3NC=9jA=;} zYjSvyp{Tkl#Wl>!fE1MNNuaMZ&h*PGQfg(byQ9%|?bvF4n}|ww$?WaJXZUV`Ul+(w zH}48#wYfPm>TZML-kiDRo5-*ZP4^+n8-7TSP2{P^Se!{N^h zBxMleTLt`LESsISzWQqW;Wxj5(vJ+aJcr>EaF|LQ)UQDqu0g>E27mp7`ctl~uK-CO z6qUdHb00+@DJp$+CsyVPWpiZfgNM2mtK;nCP(*)VB!zhD7mQWj9{>|F)D;PGKtfWx zHnwah$fSAX9GTl0yAyRy0DwZ~Hh);D-+OoF*OeX0 zEHl0ecq_O~y1s?^j3}Y=WU+_;=hcv<*El}7;4q}6h-6#gD$gn$d0bM($6V}Apg zP1EoPi!&3uNbBO*@4jd-o`TgKps*U&PtEjrJR4=$*TWzPqK>+Q}4pZD_?# zpE`n!xq z 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�eiswdk}N9xIn7w*;}wWSf5=D1PCx%m zqaS(35H(yzY9FKfM0hi{2R4=TVIha}_7v?FySTSUKo_yWLGEFP-*9}isL!mhmoJ*y z;vKGAR)EZB=tccH5Wm>JKR?P|70~7mnnY!{lYkH}9wDYX$JKg?wyLRh2s8g^K+-WG z2NpXhEiOM(rjY35Gi1U)|1Y^=q(9`6nUMzK&{w&Q^OK0DZ%Ms>QUwEaOcEhTP9X{2o+=>lM8Sci~pu?kgxrDyiyKg+7 z2;o+>(PjdjP{f4{H>m?l2vlBqwQ!dki7)m#2}l?`Dxdd5Z9hstoz~9iYR|=?%%>6o ztU3x-moU;D)-1Pf%*rB9=w|}=N>r;oiuV83cgcT1d$d(BAhn=OX-%tm62i`B#uiCN z6sl(R-V&r_VKY53k5Kv>+@Fr%RW(}{}v|LCm?jtw{MQY~wvv38+0MXAc)G9rJ1w`TyOcc?y3{4uPjzrMN)C%NMflL zGo?Iik8;Ic`ZfnxR23egj9M|*+_>#@GuI*(P>*d?(Ps7UYwN?v_QokEBUk>;g@VMf zJC#=!dT!!hUtb`fT*! z6b^cH&I&*j-KNCm{pf_@p*`c-QBnq-mEMBSwSG-1+$*#RIxD6wo~ADw{?EFrIxnsP zM{;a9%*a>&aB*b;JVICst5<&~CTuHhh>>z^BP(xe_eQ-#&S|+c-a3^{JUuN3+SQRN zo4nIjM^7O^GFD}ZUS4=}&k{?d!ii)U(eCFV=ZcQ`)k>Q8+Rbms?st_H!60R_eS*|4oZ!%f2LCtV^16Y`u7pXY0@#l*zln zrjW?r7k&Xct770M@L5fwh6s&ElrN&jg$VbF9r2dD!$&0-s1Uu*-^#J~&?rV3K_a?m zGvyhABKMJ*@o;AkE~BNF&wPk{Ff5-zdQXpv&TKkJVrt9jrSzC8f4v+=)F7in!Jk^F z8&PVXc}qv6QU~}xcBm5&o&{Ig(`>n2s6*^0`TtSBuJ6<{!eGhIDi2fKp-pCDey^p2 z8H32qV^MvxC}b)B30V`-5rPDs$X9oEhozqk9{l=W;JcX~&z=uK{db`8jhEP$VzU4! zV&wo&;20q_fv1YmHaTg_UO6TD|D9=SbZQ4`0OCKf^R0b43q1{`*}CpWnjKFO)<W~C(AcJT%BEUa}r2} ze7Rc<%@9W33{h~`htgq2n$Um;>P?0{hu@}vSmaE8=2?J#+n5He#d2GcLeD&2X-Ykg zS)I;VyQnGWWG`Amp=mDXe%3y6EjE+BDxG@K4%p}WAvlMriL&W9++Tg_M%E60$|=@D z?@3Uxt*XDPVy6sNa5G?Aqkmt02htBe3gx z!S(cV#I?mb5qsB^*U|NfX@kC`NE^7G*-(5dMaX=A@$Zy_*cY0G4CroUD>2V;V0F1e zPi+SlcY`v|MOu=o$~64CZgyuvAfvvk8RHM(-2-}fLmn8CBZqAtZadcPX%x&)FM5~4 z1Y}%%GjfN#D}b8f>43ts!(~SlFBrdcR)X{c=hbg3%Jn4+r5UyvzNHDBPvuCEdwVAo zdaX(pB#;&$CJIo}MTIr1IUd=8EY`5XeG75fe|54MhNfxnT` z49iERFnOcGgX!>z^vam~2a(wkwfN)jheBE`YAv*y*TZJmmWzfCkAx9qIpoXu#f7SAnH>)_r(7As_x0Q(a_leXN4d2wyoz4`j(g6c|K zH*B#eBf7M3FSbB&WM8yU-1)}zr-dD=Nb#LZ$dq9jn*H&YH&X19Z6EfzMjRsqh(Jf? zc?Y(cm7e%)T9HFQFcm%1SoHu?`z)me~TLWbF(S*_RT&80fRF2;qBrIVF?(QCpx zqW|@%`t|NCausGgRom|rBM82uOe1LB>nP5s*zYh|dM8oV)C`KQ^lgTejKt%E?QSf; zTkue!I7_a%7MHx4_hZ4RbN%cZt~e#R7j{aKkQY{7zDDWQN4hJAQl>pQD0JFvcHITc8n9ExTW z1k1CEdljs)7A9bYnUfne*feiw?J?vr8Zv*O^rgDFxwVw=vlyC^xZCg`I6qkWeRmF! zISWzz8&7v*k?Lh(IH41R5Au{;q&zj+6vZxx;zHfF6;}PqwP#kZZ@=7#`w}x`<7&|v zVQp1JtfLgt8W89GkALFneRjiz>qQ~X$2EMsg=EN=Nyw7e4_lMgihPvV`Tq1jUT(7` zb1^prHGK~<%Zz99fjx}07?U53^1UtpzMJ2u^^lnbpn zY|!K?!n4y*;K_d8LvFf0-*1dwfO9Agz?Ch%O%mxd$UI5!!jsM_YJ)Mr8Z3z3H-0(m zcQ=8<{nYumGexy~b4<0%tj@ertd7ZZ>95<3s1S8>zWO_s5o@AK(z;7G)wl>U_TPcd6;N22m)-;vFLY`XBAX+dNch>F43 z68cL*K)B7cuv5hHd)Gr)Kw!t?uPbSSl7Bj{4ajd^S0V97DpzqeiVl)spi(_>q`l_}L+uzQe`{k(ss z`Ysy8vD|&k@8rSJFgd+w1ij|uTb-KxrJ(%M*o*<8u;atL`lK=SigBD(Y0Ak1UvX4v zKG_{IercF^Jnu_l*|(7xY9!`|4JMccscpDYhlI^=Zs;O@SL7RTU#Eq$r)tRd!Tvjl z^mG`ki>$Y3q;u)6Rc)=4pWrB@#l8AENYDStR%D9hN5V#5Z3Ca>^3Bwt!(-6p+O4gb zRF21S!g%~myY-yU%k;Car#orbGJ|e>`+l^UE)VsPF=hA(TMj=3*iJK1WSeBm891_? z)n{BjWm$3~g4yJ8t#$wI+S#JX_wO^E2HfDaMJPy)a5?NUahesM5G?A&lyPpYF!SEQ2iUFusyD)-g#jAcS&u*MHT9UcUn!$2B5t~h*vUKgWc7P!=K9Rp22(RpsHN_kCUt#EaLh-7b z%y(0c-@1^?pNwFa!k3j%R^-5Bk)Gm7pA*`r-QP$~nYvfkW%+zf*@=CG;d^LV$fv|F zTsb_eziH`pZkx-E7Adm?2jjYDp={v7nag<3ktXZwMB*v{pRgpLliwRyn8Tg zXO|Ev%~dFF8BrSkVQrsO02p05qrzmb3F5k(MAwk3wm*qo)@s4Tc$GDYS-^s-{0&Y2 zRk45`q{(JIzPFikVJ#d|*%QfE#<`R@x@wB~9xzILHz&W$>3!4vb6p-#MH^I?p-~&s zPNCeSkP4h2)Q@JKp0RPvaE5Xq8>A;OSClQqRx-?;Tu!devvK6+<7Ir z42dK>!UG$bRKnxizvN0&-CC2pcBVY8w@~Nht^W?Ib(aEqJ9P|Qz653FnB2QdBOI|> z5c_dU$W-hbW%f7ihw?0ru_5$_VMk1977vKz=W#*$Wpo#(|8~Nz2#2b|e*Z_#DT71e znyA+4Pd9~s9^Ra_{Fr5B?J@ro=$dTku%}Omg*+*>;!RbKGTJ2r7p;(ER1*1^F1%rv&{Ebzl&MsnMRV7)&5 zE#8d$z0YoCHF8Z?jE0Lj&~b=848{Q4OFbKsvpXmc`$*DRmoWB6``vuUS@KY-AL9|& z_?W)UDfz=w>C;7B=H*mFSa0wXB3nb?WM&U_VNcxS4UZ!YSy)_5?`xxM=yC;Jy*0k& z2}vFEkfoirRBT!Jug!m*%U)|Cn?0q)~w1UPM|e+w=4fO981DaJCId^&;l|N zIj9$UuZQT+8JpKOjvM-4Q*{AcXMk8I!Q1pHt$9r6|3s1I&i1F)0gfv{1j#h4p#*%^jDowH>k1pp?6`W$Oz^KRxQ45$&zqC!-Dy*)+$H zpT0PE-qqeU9+;|+;h1l~j`>Ufyo=bzy!@Pem}qw+`x7{t5xYLx%+u--L%@PA)hXsU z-n&drLD53xOB$P@!F}-O=Ho=_l|0{#Fc#uw$ME`wK@qTrSc8yPVsbPn7M9T$N>UAfe_c9}{DxU6Bu zaHBpaxjg(jz9e%R=QaeoQS!_hH4ai;4Jb6@t&h^@W-@1wertty+_UR$EDc0vb zB~SY7?S+d?)?cMOTvUl8^m&7vr*= zmsRMOc(Fb)lzny4@P!KW>jK$1GIh^i5lVhOC}At5E6vv~9w_pd7d!aKWic|b+C0y7 z6AE+63ItL(EJPtXw=jzG9OM!2+4R#UI_4<|P-4T& zD!i`)rdkvuMpMnFmfme4%iQwgD)v95e0R?4-~Uy1N!d0(|kRZX`9R>)lK?4B>cXx;265KVx-8Bplg1ZdvPH=a3ciYMHyzlq> zcDJ@_|Jbdr0%qpsmg(-(=UnGHS5K!QwzE|o>;hh-3Lk?Q*TCH5Os-oS|8d!BF zY@G6DhlaG95U<9|bV`8k@79AQY0?zlu{-%N1nuD0XRpiRT$+FvXYRT6coS<(NB+$U`XC?3W1u}PFsx087;Ff2xEu?sMW%qR z;qT`Zf9UpMPK!@LWv=ZjTjv${X>FCSxS%0>CaU%xu zQEQ?OT_*JpuTG0L)kz`wXgV8Wt?cfA;|#MYTyBN^HLVKBnJnm&IN!u_2HBP${|&=Ft0*8IoU!j6i1nb^>?4fFka0?a|{9L2aT=r;t#eLMP#J> zd*Ac>Y~+4p79rvt%v_h0SP>MOPqO@GIPr88SAH0U?r4BpBypd-pN+=EFwp2O zDGVYbt-UqdUre&q>{V#K%`Kd_&e&1%i4^6W%9johKptw%f+WEGLH<2Sz{i}|ZnEUJ z=ZaUeCZyPFnRbNO>$m3}jxp zd4Et*q2?(wRkz29Nrtf}ox!MVO#R7Rjy8?Wo>B<)P>u72@6!6MIv( z(C%I=wP$t=&uuj3f69Mqe$}Q1X)BACzjm+(F zs?7e(%iyN_=44Hw=HaMh~Tih%fN44Op>J~rKwj+Rq%)(hv3(3@~!0xML(yY>LoERl~F7bw*?orySkUvOQ zlqUAN9ftZPru_*FB_#~0(*0ZvsiHscRP69@c^B`?TI;u8ObQ!MN)?xw=+??MzRJfP z{G{^1^L&59nI7Md4nHAg{wG?|MBmYUM=YB_B$^=8X)Ol{WGP8={oj|8$AkZ@Bnkl+ zi{IYZ>S8ToVZy!v`+d#Zg>D3+@BDol%zz^Bh5fV^hm#@+t@!5yFw(w(DXa z>k`3K_-Tm3ZMuH`hwt<`xwkN|(E%5TWS6+~EYsv`UDV=pV*YS3zRJwfe(Ty)->k&l znCXoPFGG_n*I@|23il?F-hYo{HB;3>YUp-b1#{RE{BA^p>GaIwF?M3*b9;{a8QqA| zf_ti?Ads+AsDn^jD()!^O6uDg?zEVo`bcsV&rv5i^)j!Wv+0%#nYjjmIS=>j7WbZyl+Ry@_V&fc@WkhgLZosLeOdtl@RSnYTW~X32czZbqj{ ztEls2&&}`TTT_H)Bxdt7)xklIQQ*V9+!!TUvX)|KDdBr|OTNDa2A0_OmC79tz<2R& zIR(N(k{<3?SSGio1WcN6zcA{&g^x0p{6*$s$(x77wSY7`$@e4z48@~@sGoW4T<8Jv ztOrn10n)PxO>;M8-+FG2Y2)9`&1!&UQWAj;D(Eo%+V1|>N>CtwAl~ktC<9=4%U||` zMq9AOXJYGq53Zb4`Q> zbhbRkn59+?g%LYQdU6*wykDQrOXJjs0eTYD&|)elB|M?XpG%J1GZ28>JCHA;d^e`~ zjgkV#qwv1m1I2ANY@zEVolv8$?Z4@@;u9 zebRSEn@=h|`3u)!0o`oY0bW>=fISMy;>@D!l_;55XK$|tL?uWlvFNF%R@SWsLqDk= zSI%EGOaV1c8gEu~*DwUr)v~hpvOg7*5+iiw?s0h;QvGXNMTb5GX^g7%8~5S2x8c5a zjw${}{>O)kU6d)erj+v+hf!}r0QyNxq>p9*DEUX-vg8j?LS~ID6(4>vkr^8K0U5-s z*u(rSIwk`iGQ~R%va$5x5I$K7tEO)T4|nQI4bO&xWL2VIijw}Vty8cDWO=utWy=Ra17Far`E<+ZuKz41>zx5;+`Ww(cLt=_# zW!ncxsY^D@SU$vTxDyJpm*W5*#cm}8NbwQknPAtl`ghx3}m35k~~%&rnj<3mOt7zJfq!xj7!Bu)`WGkv~>;)j0vhM)3L} zfYeZ0w}zqVRoAr7Ob2kFX#G~tI)SV0naiHu1t&YF3a0Vn6u7QNcmz?Tci9jf=esZb zqmRA}{-ASuIOi-(%|gR~@2b}D&1*}xsJsm+9OBSVj3rrh+srsP)ILSNDHLaeI5)6aD@p8EU#V$fZxTXO3mb3ePpk5CV|SK$_at_in}cWki(R!1Mbw|P+`STSBX9i) zAA7h(Bd^=00$5K9l-4Ie{xiY>p!Aw>g-gossv-v)lQc&Kszaq;`s{ry6}>o_F8-Dw zBTAgs@vH(^S}zkWFBS9|?JKGZ5My1itn!w?-_97QGhjqlOdOl2QZp@J91gBgCWG8-)0Sezh&I^X)}k=V9R;{beoL!g3Oznv--cj)DW@+fmNVpZbXf ztTd&W{nBm$U2j&Y2*(^ZvSJWFQA3B}Sz^iF-tbh60dtP~Zq+5qqZu=jF13vy-@Lhk zd(6vvnsNoI0K3>|p3=G^(smo9j*RpJ^$QD-y449AQu!98k9$boKY&FdPV=qyV*h)! z@E?7M`!i$xWDBwKyyDpVcM<=vwhRBm+J*r9aX&@I{8f0aBu4{ds$ zw_>vY3a&~pbZ9}vn=4%-5Fix1f_)!dAp#b{Ol=qEFL#kt-32;r88O$8a$Bh+2$Sev zA?tsC5`#qkVeFwz?sB$3=v6OCfgNMb3pCCueQ|f$!@JbO`A2Z0)hsZ?EAtHY?QZ!@ z+3msCk;Ug!sn=Q71-jrSb-OZqL>d&@VV#mA;Kx?ARnNVZ%USSQhd19tLS*FcM zGTh6;BEsfqb~Td4GepJQ{AT*b=<{SZpW;$GD^ibNbw-~cX+XS_q^5(b~fop6Il6Bpg>4OQO$E~ z^K!jqx82$poV@qA>X6*XIuu;B@IxPbwmVf>8|ND~6bw?A z@CT<)cY$0ckRl#w=%c!)gg~kM==^?eT$WRExL8%Z#Z?Cc|Gxa~alI3G8`&x{tNRa> z%9H!l87kaZTjH#Mc&W9I6)m^s4<#x3A6Z%+UHRNLs+=B%On}5$TU}Rz{yRrFKvZ@M zR$D`I*DtM2RRowad$^6N_$T<9d}Q8hWBZlaWOj`9 z5w|X}_4&n?nScIcN)rl1`9>d70k}JOdAx-;Y<8-WYc_Ks^J8iH3flhWQ-^@Tz6B_a z2rjxv1rlPhZa?r5$erNZaLdZ)zT=u@;cMu zF?~k$xDuvR3|u@C`3fY7QKLe%n8Jzl2V{a`@xAD;2(&uYe^c6oaHlaaP1Eu#n$g-q zWM*UlEXZ=VYCuq{7zK021D7cY84XWzH(1hV?&N@sG-4>(s)w`1gIZ~7xykA!6a#)nPctF_CreRf!#5AExj-Z{X*>VKx?efaVyd@M&$h-{rkQ5p`|xb zfz*>9Q_EtP1HMew)g>81y+{3RG-CA2ekDNjZgWtRI6BIkb4p5)9Dm6$L*-LA&sY&5 zTeTY5Oj`-P>W7OCl?0$dEVLC`A!@22-rnBOC8P|+_koyPnfkY)cwo}3rH5%u29fIQ zvLN*|{QF-zk@Cu`2|aYF)2csLmFSMW`U60E%Fv46hP41podrtKoiKGE;WzFnCXKj`&9_>pdhr~SUy z>0nu$TEF`i>Fy2{u7SUoH(1^>w62VuJo~_wcO-4T<-TZ*;qCO!uf64RRG8WC?Cw?T z;py$1ERk_sPzOl_onYWdOjm2Ph7v@|XC?gaT!+l|5SVC=Xg+Ie>m9V$b+o|Z7i5Eb z(TA+Hhpfwz_Qw)4E2|%Dh0$UbI~n7bZtk74%ttB&0koP4427(7-GM!gcl6n1Coi$U z=BB!Lv9(^TXRLFIzcV)6(u7f9zlWptLfmmmJSILV2ea0e7S-L|!)%$-;xxua^IONo z*cgs@P3wfV*V+mOI--Yc=DzaZXD<&*k2VmBLcT2Yk()KzG@2R#!cvl1)@{r9v%yHzg+JAfu>dHc+%8EYPX4i*?5(t=wOUD?+jg!LZy)7W z6zPD|5m7n|J~7-y`B={$|84r3*sEZ>>os>+Y&(wgC&?40kN7vP{vl#@3&qY0&flQh zpzRZ*o(uAWHNY_&gf0@^%e0)|+)z5hjae7v$S^xnWmj%(QIZpL<1*=^-vOeC;{?T@ zCPzfn>>Tzw?<~-jlZRYOH+dS>pOdA)rNPS0g1)VDySK-a7zLxx|J(gdi%844QZ|t0PoAu;oncg z41$PQHOrDd+U?||88FEVUv)BUp1iUfA~GaxD8DjLB|=YKKU!nVo{DkVp-Nyk0Wv-* zA;D%zLBBQ`;veEE;-YooqT&))Xv5VoW}7Y(owElO^ky+l@lQu(K?KsG8GOX8Y7>C; z;*Us=s8A+PYIC`(#LV<{qCh!m_}1vO!F$85^3wX2Tv>3jL;yHXWOf65@s#VU-RiA~ zlx=f=SHfKD=}^5hAJYmg^)zj{`!9uBBH%6orrZRww7r1trHTrAN#iM$7hC_`B^a1U`uzD#k{m|0tw*f<0vKX!HL^7;7^Wcvv~52WQ} zd@wAAsqxm8dubEwIDG;5Whnb>7HKW>=e@I<7zizt96bkY7dp4gSa9BL)cLL zQv4)!WbFm@6gmN@S)?B$=Nz`fTy=F+S5mfrr&f#eukJ3e$#3Ni(*3%oJ$b&lyB&(r ze~|Ln=p{>PSoJI^eMgw1!>fUt%#zr7ENTR1%oc<}HQ)Vi67Or2@f?SBr#XnMBneN# z;!SHiVic3Ha5Iy6)LuL#6;N*ZlSzR*tUF$~7?yopmG?8K%3#>c|H(hcZ6Rf41uk>< zmC37qwh#K7OZo?67Gz@C(-bXcW9`%|W(B=g&1{d&s>@}Slpzxt9FarK`i5TokXqaF z=l(O*G+OWJE1=u`x3mbzQ!Ya^ML0C?ydfk{$S~5hN)LmO*X92+h+8U`_Wsu(#{Xv! zBa+k^3l0gfOTt1NLF3+ON;_=#U;hqbv?LIjuIb-F{1Jf-p?C|v<~pGu=`ULK=>Cs} z{*&t0|JAqu_Av(BWH)}A%jj>g@Yu}ehI5B!dN2;q3E1n-+SblD#wvvt;Pe+(BR1H zYe}5L!>K5Jq|rJrh3o#wXE@eejcicr?NGzojYO{2CdP`1;YkE_Fm_A3gT{d|si|un z%J@yZ?-R`@YO1VnztJdfL{!Z&rr31f#fyF~JdJ>vC|cGS@Ip&G*<2N?M?XV=TdipR zbJ+Q$l+G0eaeUt_SCqg01BpP~Wne%vvmK@snlc22bWR>%hF6~Z9qsaY_BYsT_bCauWYsh=#&75t$YM%TjJG>n zAl@hN6G?l*oz_Z)Bhs7xQ%ak}_rd zRbhfm&qkV9m9?MU2 zXj+5tlMz!R%@gURJ+vSWdpkmx3ts5Li=lkF$ftMcQ}h~#J=0A7Tg6ZbL$Z4Y3|a@6 zUl=S(kEXmQ*9P1|38y%oOlD7Rx+S4Yx}J(pHF?&?M`~+P6?11o-fi=8ut1E2d3d!C z@Lz2+DoNQU0^g2Z`x$JFlR=7(5*C?|Av$Xh2CIeHAf`sVISetQ_oCMS+(Y~-#ivpwAt!`tuy>iPdR7k9bD-}un+@U z5!&d}KXZfR&j{6PQ_D|IowU-PlIs%?p*9naWeBEk@s*{luIi8Gu?r6NX$M?zp4`@S z7%SQ@%pVqx?2~!cn$%Zyv{?ADf~xtU9THo|KY)?~(;26nudZnmpc%NB!ExUKgj@&V zi!~(u!hBK(QFVZ@vs>q8dc&meLk{r^lyM2=Fntx+lP5QI?9hfT>7CY?#re+(^-o>W zRNn-M60ahzcDkBEoa}t-b#=Ar6@*^#$tMr02i$pN1oSBfT|sMgM9+-SoP+5kO*~GQLJ3$=Fyu!aSfjyrex;ViRE|Ya! z_z;lE;j}A>JvF;Ol4!)G57$bm-xM9u5Z$g^t_X^<GZ;Y34vPrj>Q{en64D zf5U6^yi)u6=!23bnA5VM+d(__|Ii{k4N*_$IonxJ6_?`_OJvHhjt z%^ckvVWJ>|h^RCG;rPc0C5|I3^^BOTWSIin!m;|ACT(hBVl#jdx_|m}2BDa|LsR?@ z2ZXsvlg=e;h!-yjoo->HU_NHWIDs1a-Nuz*iulvX$J=yENtnIH*Ad*hVSE2xHZR2N zlTmKlr&aR=Y+jEAiy)cK9vhS10xKAKjRu*A!Ep#~)^aWFfq__H4^hqX463g6Zj-Iq zJ1DR^{n;na;K3DnApzrxyF#kDt%Y#;KDk!KsKg@seIhC()Cz05Y55S<-^+D9O>nx+ zbLEt3hwYY7gtDaIwLIoFv(i)4?sefu*PfQb)>@NcR)?Qp9qbdHM>< zRV!lIg(oAtU($bTDY|FG70@|8M5az>M=@A%XRR7^d)$ zP)l>>DR-ghFHxqsjWlCHfk9G-raI-!eNgy9I1oc|U&`q0cmY>GbZtYv)>g9(;rIg2UEgl>*dtm;}Yk_482&sd>OCz#s!q=7 zM0k66jA8ZC9`Y7fBEC!*Cxee&WqwBeG7=Ro9gAKTwlqj!A)Eh^*Jw~qs;%?;_Hu35 zCywt9eShB3OqOR0?e%+#<+D){pYHWoqa`YVoAP2dP;E=;;CMAfF;Fp zI2o;G@Buz__eTxQy=6bu4ikUZC3Q4UHb^fmhJH)GlX$ge43Ur@rHI#bjyyzfMJ^HJ zs7-^drnKT1G<8oF`KNVg%J{!1`?g<2flNLg+;rx&ev#EiQSm}S>#u-na!MOFQpAAI z*Xek_*KNeuT@`%zYBsFCSU0C{vi5fBcG8JJR;yz0!oYv|ovPFglhYym0c#v_&VY?a z)QqF@yvhzAGi-vJYU6zdv>iVNTaa+$vd*1KPzjH;I7M{90bXe|wO2JPw>+YQuTnyk zgXfAQ&RrVQaaRInv5mPC`juK{%;C{dzg&0=Mb&WbCyRHD;)w|BRdv^!=U{zK%X&$M zR8(V1=MOl;Y@Is|DS_b=<$YpilNQOPl@=*XH5SRt4HhY7)deN+#~AcUt8e>T^`7WU zuYdYH+zCA{vNlF56{$m5WPKdvad^w8HEMnGe#@2I^u00=cMfFG_R>YR1Q$7UnQc0B zTJ|@xMXv)QeF--HkZny=ux|AGHitkqe+rS&4A0pFWICiV2%(g8;fy}kZ*el{1+sl~ znnD$Fb2-P_weqU6w>Sj(W`r(DSd6Fc^2Er8WsIwO*A%Yb9uqXiC63ExlJL=lhctY1 z%eSq>xyci{!*#CrZ6xOz!NiOD&U5B^@osPmzGe^;KM$7kZnzmFXe}^ueNdEBkId5Y zN9f{*!u*6JnXN^pW9Ui!lASLQ;jT!Iy1RZnY^~VtTJC8++hM2^-LCg_b*|k=qxDXZ z`%RpsDu2x<`K0-6^$$#rv0%cycGGR25MvutErpmJd&&k6^EJzjtI>N5N@@xVei?EZ z!(|}3FN?YOq@xNGAB7gozl|sjcKTiN=r+$098Zu}a;J#bb~WXJggT;=6AvF^C0Q1Z z6dkatL7lqSRA6_(i?wq+gkS#ti7~r|yq6P*{ti;2TcPmz5CPX*$y;eu>1$370?dWwwgT1(^%t@UI8u`OpNO#>VC!fJSsi58 zw*tF%`5vQt15)hEgGZ?*d3U=2TP5mcU7v2DTINLp#eJBU-Nc|{m&jho32fp~zJ_%B zasa|GZ{9IPcHtWd#`@#Znknzl@evdm1tZgDRLY}VSP67?YF++xphf&~}~HMRPq&4>npll|yJU_vO^U-i2rv>2k5gHlU9t1iZpL|?Mz z%}UhK3}t^jLboRt0sF&DF74K9P8EM7_H7tq%Lu~W+h66t2k!pjGu?`XIuhm9g27UP z@x+twX^Aq+hIF5%G|$x-=D5Kej61xXWQC^udqREs}Yq@nvR00CEz%b#RL>jQ*- zog{GP7ReobAED*t;Ce4MTFFlbH3SW!aepvSD*s#G#s3sm)VI0kN_bga> z>kzx0YhST1$yJnuBb_Ym>=wkyCLFWgaOClA=0ym-lf&B`b5{XPB1>{_$-?ACN9p~1 zrj5s_LAxpvO6fS9>Z`=XOc_^Q4rF(pMbTmPD;KWGV?z?;%!uU1HoxfRDJHr};fcB2 z53=)x&5K=m_b4=Sqe3ym$Z?Bare8;BL0j7CR@MKQ2U?sV1KeD2B+4asyr<4>GMJqy z1!|W8A64k%nFqo_RKL^+xMU2sl0}~NN5VlwZd$w37Ko<*G#g$-%Xy{@fEBl{E&Sbd zQ0F2;ysHt@YLY$mibE24f6Jhh|5TaZ(~^(xIo)1p!;&4pZgOMYI9Fv%E89t3pFs6E zsl8LkFO)gPc-I9nG{ImMUyb?g!2~@=?5iVR(!W9Q9fWqE3btPov)udJ;hl4a@14eK;TjLU)2UF)a zMHxxejW(Ud93aE+e{V!Ju=5ogl(aZf#p@n7Ga5@IZp%jCVuflI?AT!E+am zRL;}#o~M9-ZHm=kIH+zBn=$^c_>1eZWB)=R9CDyBmD^osaIb~k4S_4~u(HIZ>6@BE z@>S03HQm#Ry`Q!7-dLTAg5Zq#XgW=N)aowl_sLkwV$f%+36ktDaf#qB?)mW9q(ez) z{7>!!<4f<&20qXvviQGy_s(A|4PCnMbA31<*IgFM=nFh5*B0?0X9inJ2W!74De{RT zYA5PzE|4%D0}pYfXLbu84rbb!$iQR^)1o4po(naq=A7DnQkI-0@Ok49%IX^HNfEVe%xi!;L=I$K(= ze}1sF>qP&3*<?P++tygsGviNtjov482=7H?xWtoRwCVls-R$Q=jSz6t4n zEb9+SXdgci@NrPVchYs`n}*lRk%9fwDY!x|N2v7~RW4CLVcEOVZxq3qO!08CG0A## z#kX5ck-8urC8^8OonDy-+v>i_pxGs@Lg($Yp}lID}Cl4Kit900KXp4H4VA(F% zLV*7~FZ#>%10{F+`BYRBlmEO3UkT37-d9Bb`*mey4JN%0<4~kyC8+B-fx}zGLhps| zN`o`xwx<2bsF*f4PND_fe*uS512JH1)6|W+ew<+E7_kX&ASrBIBP*Pmb6ZWab{S7G z=o)nudASV%mK3`dR+w)@m_ z6fv1^G-JiFSX?vC6yLSCK82H^Vx@zrABkQi<8{Rk~aI@}c2A_}808i=gxE-oDO zx-u;X`Z7!_V;GESNR|5;ERCWamLPWI=~mq^y%juG;R=ZHM< zn-aFQ8t=P8Nl|#>UqOo0g10O7%=XkL*}-jvWXb5-zwM}RG$i6wzGLeQH4?qbv6F2&L;K7+)hPx84qGR@ooE~fV1xxkX8*CNhOLH8msxLn zG8UigRis{FIHuazuxd40DdM}iM}!!P;pBytyJeFSpR1|`su+Q{pAxgfmv#SpFTVp%dc%`F2YU|LLZ5G!7G_k|TXJ5dQHN%H~9 z5W)8nlMB364mZCc%4gDl&ZYJ zIvA>fza4%XQX1k%%_Xes9<6bbKB$1zV7o{F@{FHCC$k` z)L26rkg(*7T!&;{r|o(xuyi+iynh=a+2ha>FPu0`IXtN7JpVqHcL>3n(&)r4XI%)4 z32kK-mS1G^8(chB{<|NE-u|LIkHvJXzWdt96kwp_V$K>SPItM4rz(dbr;upQ5u zcMW6ws>fbdn^7!J$Z74Ad^GV@crhZK0b#FP>N!rkWw!UFlm_{Sa8Sc$-&EGKgtDC? zXv2s>Z^DRVbH^w)YFuw!(i?~8$vEF`wwg(R>y4)ts2&RS^dE}{KSaVl!C}v^FE^d-EhpZXAe2+!l`5hXa z`oilu>ZI2X?=O-KC`%y5_)ERWs^W%)pT2zZndlgUuA%qE#1a3g=7n3Ma$$E-yQMM=}}cf z>y8cob7i;f>Gi^Xg`pP{k4I1^;VSd?%h$_LO2E2LYD|67JJ)`)@`ecE8?xIJgXbYs zzkZ#Q`K_3m(Rv+N@yUbZ>8*^eS9H?CEQM!^;5oU>iutnhdHocJiJ|C+=sNyr4p)s{ zF!RRGB)wk0QbWhgDlkLaH$=R$V}@4~xQMOD6}5{pnMO-9jSDhHO=64V@^E{-E^$V1 z_?u?uCa;N`n)eYVv-X18b3YPpKLNO8Qzzv-SbdFPjEG6EdAjX!reg77FUKCjVg=i; zFI(jJNQ)~+2YgphX`)q6n#ITMCjpxfH_g%L)>ijA`^^7y1E>GoK)f)tx22*!6USpj zojEEoAFVmtC)y``%>;9g>ZSAfErmrgHhY(s8^21TiuP4fzh^f7-Tjn>P6QHD9s9bv z(Jl!JK!{Tt2=6L#r8f$+ttbD(U*i{J9$9xIZ%)^Dup^@}4?3bXr<&pz_+FiAo^x9v(A!je1bg4YcKeLU`>xnNh zw}eZuP7L7+)ZxfyNK7Sk?%kxGa4mlcH!i{iBuOD&Nu%qk(wZ&NelN>MGx68IUh76N zo525bx7X1Qh!s=1nG2lbBgd-JFgv;lF}T#2N~dZf?PwFrbDI&623w_3&rF zyp)*z8Vb>~WZG}kTtM2eb}ec2lDF&9V&>{9GX0{&Kc6tA!gofv4E^Ce=^I8}eNhBj z5^w_d+@X)xJAfKxUY3QR+V zk?keskVqk4oEqmzSBWJoR+&ww3RurQeC>zu-!I2r9Iw8WZnnwHE@5T*2qq z?O1*zkkLL-k6iH+L$;d`cKb7{_p?Xvlt2|N09B?&%U(LHMxa&sf_WT z2|V3Y_}Lca_%^p*CRJP$CFA$;T}00+V8cqtHo^< zMsmD=*S>Tsv@LR!&ejcaEnK%Gln+0B`^;AxL6^W5km(nQdB92=)>Wzs1Wa`-tT1N> zj$H68_p%b78VVp@f^LD^Ns~h?q{U_D3}BLS$XHO({QLBPc7}F$kSk8P;fVtd^Rv3^ z-#5$L8D#~ObvD#o`E?=PSXk-W2$^xd#bnp%20#yP63TVf zC&=;(QIdY@)FG4mf_JOdj2dM8O za^ZOW{jA)yzWdXPyd9<{1m~UfbU%=r*0&@%>{oR&_?*+rH0yinH5)r{Sysm`q*!)P zCcU(v`q+_+Zp$wMKH}*RSo~k&qaz)d5{w4Ax(MA8z`ANq`#oS`+_F?TzOHbvI=Z|*v(k7*1sau zpw4>lq~hB&k-r-J>aqX8k@$K~!TlVYW%9{meZx13fZo6&l9l&+XH<-xsEEVf+6R^Z z#V_-){ex13$ymc^^s|0LeuOowab99Jv3-dC z{hhMqc;r7gMk+q$x?4clhsw3W*CwYz-}Lq4qnC9A;Yz>Pb>SuI<@dLDXYMJjutaDU z3K=2xn7i?g-SbfQWu4lYWbx1vVqzs_2rpNpkp#_oKu;oUF`>7dH#5JNm9yhNHDk3V z(fqSGQsAchu&9VXif|bC_gdcj5zhH!bGM1V{&AK62IjK#i04aPXCoZr0$bsr%!qY4 zkVV$FcP6eMkSepEExIaL%HOgh%@K1 z^iY%799hj1nfH7fyqU4xwqDTatAg-NqHVi-)yYGkV6LoZrEUEV?(K+4%md=wRH2-+ z{DQ{dt0 zP`(XGNCuYTMhv~<(yvjHDj(P#xq7V4xKvl;`AkD^SL~BNGlx(nn9ri`7fJQ$W4g8m z8Rz2)=DQChCSvOnfi;v?6qy&6dAXYE3=I?V#)Dp^l=PUTo&)wN7QZU-g_oc@RVjB) z@>djFP>1pzYHqE4>tv~lVM0{ptgdu=>o*0EUn{F2sAn83Z%#fRN%=t)%c$=Shk~#P zo}PD{&+AoA!#gyAKXV7J5TDdZu5Qjgj!a2)3!Cp6dE%v~?Gv$7C45-ZrePfEn2z9M z#&})#s(15A;~gnCr&;`sLPm7kA$F};Z7(oR)wcZ>cWaR?H`aOI zp!#FYjClf0EDftZO-B;~K^xXV4!c=+jIc*8&YeW2`{s{Z$d=Q~_4CHa#QV!cw_Czs@sY5;Y;+d$?KV^ZNx;SqcVj^6YRKdjnx1?bwnv7?losv>z6$%Y5@d z;S~tlWPCMh!=KqxAu#~WB%HWdE8ceP+!cdd(RvS+9L0tmuv0JL9x8R zAr@yP-p@){A>_jQ?h}J-32Sc31-AQTkt^IDCiOCA?5B>U1^e#;eU1%7R8yHCma)FV z#Qs8$C^G`YB7l$sVOKc&_W|oMZX?nWc82pF@EC0a>W~s=-2gJ4d&F)i@XigEL|5_fZtj4PD{tku6C zU_8w)#Me_YPaOV1zE!IwAACi65$H^o2DNAfA{89ZS(4{DWc$m&O%mBPLOjuNk1=PP z_Ltk5-UvMY4<6E52|nbvUXAO6awhBoszGPOsQRSch3tL3jRawv8-+dXuQwH><3VUb z`_D~$7iX`hXEqO)JK5ZQRB+17q^zV21L0^}D(w*-MnX-o=(Jpk=}6#^=e{leFr=L2 z7O9Y>hSn3?HcNKC%l$NZ6oOZn8uWygC+WV{&;YKLrbeuyn4&ViYsl=LEl z*>@SWLc(ghJ`-LDXFmv%kT*?tt*_**pA6$*a;i~AI82vA5h4tapmZpHfp4zd`I65~ zmNTQsphtl-qg&Dio1oX5XjQy94^-*4K`GfJ?*3F{8KQ+ln|jPUJ3UGq95(L~mN`r- zw837b!@5vBVl2FJA(qaoD_{&piCO#|)*u~>|En`e7Tf>XU%!*49j1b!R6_mWYnTDv zn2QF8PA-TN6XJaGR}oqMY$WPhWVL~OLfSjkQBMi+;fO4?p$IK0U%wdz$J8k`NmwZ+ zN=N)XdM>n(V9m8xu49PL zdM27C8TWka)o}v^SVc8-rkv#KS!&CL8lrY)bmvL@{0sP%7w48#gZf1Qd=^S{5<8c@ z8xFd{wGASYDl!g0P(Eq9-D=*bpD_$p0(04cX;zZ!z2J)XLs- zDnl27@3p1)wYd@MGAUp(#`AyGs$s%^L{uf_d2^;s)C%`E+eRWU%gDzC?SvYS-5^}Ri6Ju zb;%rTYirmm{bqM}d5(w~5g?Pd>o_sfLfVjj9|Nls6pY9Ff`sh4Kk5Ja=RPPypmHZ9w-aP)S#oZ!S5g!DSjIIg46{fbI*|?5;z(6jSU1HY z$5=@lhIv#Bq>+WAySE60+~A356Mu4!02q`IR(+GofvhV2;1 zR3+&sD=n#QUhhvZhgNu3df*+Y4wBY7qCjshZKHe+X#ATe75z~lFP-sHtJI^eW)8@< z-dqc9NE)T1pHXQH8jGn(Kd)Dm&D&mo!{M{Ga3VdT!5+@vSdmg~eKU<9_C=`j?VR|t z8Z3#cwjobUg>zcFB0*opA@4@>_MWfr;}up&N@X}FpQY}08~~9vTc>d=n*Z2@>`Bvu z3KHvjbjRPOC7y{xoQu@Xvs}m%(iErZX++}y%>;i99BpbglSea2rQAfm@}f`cS=Mt~7RICKIe*C#^KNxkfg#Bt;VLv;a@K8YWd- zjWl!%AKt@mH>V$cHS7Hay;WawNC^(b(N&XEXZ7)V>4KF*_2+x@zCNmCwSz#S%yl^` zao3UU4O09p)%j~rX!YY12x+64cHIe%=Q2EZR=1*Y*wZa>i9a?$HEvs-{d{4G>>nb# z(U7LUVEH?F9tIFT8iSO63xa0RWP+6aL@J)u_+?K%nO^1te%g1)ZC;(fU$e@1uI*OS zW$x#FlFF2u=hqZa21nEGIqJ4MbHFm%=L} zsJZAYm?g3CtGa?4%ix%*`$BIiZGwdJ*3<50dBR0zbV&$SbQ3$zbW2 zY1c`K*lNb{51O7o-;#c{Dc$Mdk{CGspB(GoziybIZ*_S6-@gp&=a}yGxvau_{zdBI z_e!;DhF+1Mcp!<<%idwH)24n%dPYm9(IL+^M$Y(ZceJL+;R(t^IW575l)=*pYeQYf zRxKNTkjXO#`Gt}pcGdf8w49Z}dsVd)PPs5*2oxFS?ZHU9rB!Jd&_C|L5X0=@ipbsO z=7p~?k;dn2PSD;{d~Z3$+8$~D6Q3bI+j)%7^{A|25xjcC?6t$FZ*{dhUUKXVk1@S1 zLI7lTDajd1_%V~90;5tu193R%kjU)AT8FqBC`SzUn0>NCv+D={g zckj1sxOYEKVD#U`egXCB*0yOK-=7mDwu><&|0fcW1tOmNvp}xpw(3z2Nr}%BSY&R5 zgQkiU?)b70(+&_*0lsa;oXzk)@C*sJ>#^UnHysc|50qvfJi=B1kND;dt4kNve$UbTIBD?-ORF zch*u8aE8Ls^??qOzD)7IHqe}jDD3{=vMOpR3CZEP=DT84E3o@Ppw)jCH^10y=71wVYjv$EVz5H1a}F9f#B{CoZv2D(BSSa!3pk!;1b+5 zxCdt#++7FB>AZXIPpZz3^Xt@9K>^(}boXOxt?RxY+3ioxfw_nt##^?iV5V=cGfnz8 zxL!Y?BZ`@GJEP{cUS#J?TshiZ_o8z&_&=oi*Z!*{uHO%WmalUE`WTTZImu8S+~{P;4xd-}De<9N+#=?Z&sfqp#Gj+Zn%3p1g>qrH-- zvI)F5#$W|hO{a4@=HsYHx0C;ckaG$FUpF+*_$hxrPsamUu=Y!Nfyd+elkFsxMu7dO z65MXjQMk1Lj{NUR@G_n;cDgk0n(LZ5Jau7B1~n6G3DHYCgC@0mxNF+cS-A!I>nNY= zjGy1qj@tvN)zUUauIqdj535-!b9ns&|EMIc~7OB><7LHyO8QJsv&1D%|VZgIotY_Uj8N z3d1F66R(19`$+U>b)_7bf_swRFY%wrq}yXG&EDvwRfAzaO{yZO6(JIDm-JafCUQRX zz1FI(87CV1W!D%;ZKL{HBWDA3^g>CW6`R@O96>LqQ_xV)P+9xGd*eSGsyie#z<$@< zNb)yk>;HHGgxX`hUA#MBvRAV54@HO?Wp5j+8p4!}CSr5m`LtQ9(iiSR?s$GXL&|O0 z4CHNPT7C?3wnoYnt1$bY){U}Hgh%}dsh=DW#!n%vZarjf+s&}mhb9MSG*|b(;BP@+ zOAT_npXztHCYPSeo46v`3+BB)dU-rMYf8ZjM=MzsRq1>BhW#9s=5)Tah-o2r^$7X9 zPMlbF|L}6x1u?vc(!PKD>Ai8Mjd@$?dAZ=6N=gtLu!E0?7Hu}Sl`;bM#WJHErQKL5 z34f>{LA?rU@>dOV+XqBKKc6N3pis^b;_U&(u^}Atuegd|S_!4&mcTlw9^W00REV*$ zO^45!&}z@;pWq~38iYc#=B$H7jO$VBTD%^am)Q!x^b={~z9y&Y;r`57d5$1`F?t6c z`t6#$#N9(%Bm7fLRfr*dn_kP!Stwm+XZQ^J(eAi!;Q4d!l89wjny>vW!a>(%xc0J) z@U5ygEx?AXga1>l&f%SfwZg!!p54}^zkH(I>0zy4=?hztg*!8h>=emand)l47ZJ9& zd%o1Zo$2y#qwwy%;HA3C<8`g8yd@T`zPVHGl|l2hec!zWsk%|Upx2t-UHz}F5aW${ zuGbe1$)!_BT?BTk(R}`Csb^lT|Bwe5Jg`x#}L* zpkoP_2OrV}g<$#dw;PPkpf$u^M+2|n#A3HACD77B=j{h_@w?{np$w)`nA{ljCUB^2 z{XyBg2mQ9Ym1%E%(Ov9s5ok4lk|c=ug;Yc-qJZQp^0z*XJ+uZybsF4dBnFI-HqTz) zq9Dq9Fw`$fS?yU;0#ZWszpU15!>nSAAm_IqkEUNT*HuZMWok31?Li7xWIYCFBNsY1f_ z{BTsP@%8Z;DaX*$>}5>ZtPtKI@EruNIJ{*8=gP4=&|%7g%R2&`GHq4ovw8oTqq5uDo!Xn2hQAL9N7Kd|X>%j2U&$*})-hLi{4c9*NPuoQ9^1)m^sn3>YgFZcZl70 z_B*d@W>@{zglF|hG?`pmzS-;t*9=$arl8M!-xOI?k+9`1%msA&)y?dbB*0NtcUqka zo);?y>XBo1@h)y4+Q%^qr=)C4f8L7W5g7LfQES+KR#*Ju1DZ5SRFR4>)O67_n$5@P zgHV6uU0RGgzlD_A>Xgf!kQ(g=@EA6b1VqfIw(+7lc*9P;VR4d_v18le@tLSTR7bV5mwtCIe2gU3WQ_h>M_rY7%}X?l#KY1b-OjxqBQ59beQ0F({*G1i{!j4cfM5s>EZrz3Ev(dpi3&Pv zKcH?R54uoa*Ayhk1#kW?s+m&}?6uY%ND0%taH7A*?PAVB8}+Ohma9uqv{1-tP}eym z#QxiDKq-{F64ROGbYWQphr6lKQsgQ6RqTb*^>-AXB}OUmmqM_#6?-g++H<-cR|ybM!&vo3lu zC4o(96EAeDvtm=44SsogupmFyuFW0rVDGqAdjwL0;1&C}%5aw0_U{d!1=~ZD!~HpP zfF;+M8^qUL02+c1E~Rj<<6mqa3`M+YnG;FED~EmA=|*`UVL{X;#67L@Mp|T4)GcKB zm2H?rMnbX~MQ%a4$C~TH60*p>*yC*Oi}~40xcdq!he!{h+&oq6EFEZPOeV~JL=o5~ zxD&MM82o(d-t|=qI;$+ewkoSj^Z7`S8N0z|=7~k$Ci=vZr$4gK)LlquOP!uGe`loV zQX-Fi_KkGp`0Z9QS`ub+c&JXlTw}ci&Ti-GZz`V$cL{}no#_wluhmo2E4It7!1#u; z1ML|((m@p3~on!l< z;AXRgp-(e5q~*>KkUqbmJ5!uIqQ@}_hnYPP^7D!Lb?RIjl& zw3@SbhltIjw@^+(<{lL2mSX}x)&ByA5Z(rAiL1} zuv*BdF#ltV&;H)Q@m`L9m8-<(>u~_3d76^2yPf;|2b~VR%NOIh%Y@PGoSSg7XYrMb z&|-xZi`G)*KmOs-|7Gp8;}Xq#Nu&!BCnNIprEw))DKiLN;qzd}Cyab*CQvr8cuZN~ zG3qy6Coue!a+z%8(GbdFh=wmXkZ`6a?m);nQdI~b1<+14E+3G?l{Vx*3liYFF_I`jg}BpKP{5@t4e2Tj;dV=n9# z3s4_}U<$TLQIcHWK)rg_xA^Y(4vv@Eq0LKb8Wij(lFWy3fM}h?d1*b*J}ahX>`krK zvHK^FHSiw)HHa{t%4V>8c+ z5>nrLC;Y)0d1A4A2);PKF;=>wlLve#%}2beg`KA2t82R;@wkJ;m@nUMIfu2ci(*ZJ zX0>zxhM}BUUod6Rjc=3X$2+8P&uE$DwrVxl=!|sAI5YSf{2HV zPEUR+R(7;Nlb1neA%!14!{&b+cM;{-&f$aqHW*F$bWCJR7GCP}^o(sQvnx>G%y|8z zHKx9q@HpIoPWGwoHB_gtIUU94z8$Wn3*NuXT&p`9N92j|BkB5I$14S%ZL}g6b(?YA zo?z=$qR~Q(S2PMwA;+)NmIa;Wzo06tX?kp`=!cH7!3bm=2NGt02R?`n+=~G=7!THe zu7-t;%TTjH;cB;VuOR>s2oV_>8AW=DYt4YsY zt<$^sqyuJQ@6`bP8xY9{==Ass;-P4TY&3!o7A%y*3FnJ!{)C;znvM4**If2dg@V87 z?YWzJP5t=eZ!AE6c7D|5vla50=~)zC;$~Z$di4UrhNWJ72Phi*f6jB`_S$^U8W+#` zU?woAw01e0`pzyzRkuHruU5}*dhk9-bE#M1;9%0Tf@)HZvKG8w61gM$H;h$gu)Yo5}yd4`Q-E9&1rimNh>ru^|uXsP{!&20ZYoZ2&sV3^hb=@0|?juQm4TM&`7QIvdyg=L{P7Ewk&P;MDdpqR=Lt$sIZn-OjJbTP+d~-NiyFUn zsSQQfvWRw&SLvF`*z9*KRvnQ(0a1!8u8TQoHd zA;p+Oi$e~p+_&%iP>Zebxu6JmEQ!uDv56!k7*Rz}Z+~8V3i`S?HW*vP{cc@s#S{v^ z@+PY2!Z;OQMTn0}EPAKN;-N-x&I5!C-343zudp9LGr3XE-BfN>T}2Vj- zbyY%n{s+ zdK{;mA9m7K+`AqPGC$Zh-sO@^ctlVo8uSuJqP_R$Ys9>ynkFf%8a?u&o5p;k zMIKzUi`n0-&gf|a8{%T5{(LncLobVCpVY^e*3Q{VCwu(rGnZSa7gc2N>BVF8vqNnf zc^H{ozU&Cu(33!r3Shxqm*Jt=qi@CWIQ?$|M?Q{&7+K}MY%`otG6Hs3QZx957tWbY z9=HT@PK=n?A3~^Y+}-_^nDa9s+hm_5Myvi;yrKusqE+E2HKXEtsNM)<7w%sxQ_`2T z&`%IwK(i3`B6;p=oc6pniw)N#&yY8e4PKpL*JN%)6_q3VBm+C}`Y|VpBTlmF*@)ct z+?}jIT2|>zs$#F~*BGssfo(nQU=0Uu=VHjqlx=4wE8zOymJ{hQmubg*yIK{mK4yuS ztYFs?$h&jnFFKVBs$=n}A{hocb$=P8>8t<8o@-nkU8!N(S>s|_W0Kr}S$w(hTX(`w zuBxb+H=^J?!1NwToELb#yZ50i2;9(_;Mvc3kEIhkJqy*D|^Cs z{EvY5kvWIgboBABYTrsBfJC{vQNEp|SEI^gOWaGrgi06MuUbO-ZX^75&uQY9;yXRd zo?*|#OUDv!HGPmv-4%;2A*X^1f}B^`UOK0qi|LzWgTuV;E(sG*<>72b4z859S30#paRU9xG z0_G`D3~VtA)ik6%Auy^aBEbK>a4N&8BNu&Xl8TtLV4~GO;9!a|uqRN=`#c{x*1Kyd z+|tMs+8Y`hK?Z03Z?K8NymnvnZK~A&wY;~S>w^c-0Os1A7~YOw1XBoGL>EE>aU2+T z%AHU`C&)h7R?qeBB<1)dFiX05lm*qeVTTAY$xuGDGr`x8kUy!F=kQ=}tc*7Qnbz5D^?jk*w*)Si4%4>(SOjb!` zB`A-HFI+Muu=x88uQC?yV^jOh^m+QvB>uWCU0PTO#tU9XTv01)3TmiXyxH>D-xWWk z^gcFW$nhv(Gi+bnvZ9K?o-G)U{+O@r^V`-8G=^X?OeW_^%>@iNePruXd9w1~@zNS8 zCk3JlaS))}#o;>_Ln1G=$_dG6#mRg9oFbyMGrthXE~S4Q3S) zmf&0S9S^wKTA2;!x6IYU#`__51IY}u8Pf8aX z_R`vECaNeodkc)JuniG`6#Rb}6>+%$2$@i8!ZqaO1o9+30}x8Hw`=YYHK4TnK0{MbfFk~2GFRIx_6l{DoAD^g@uIOA zxnhu~QO@kqMi&*pF8qu4^Tr>k@mp++hOg`NfrOD!&4(y;RtRzdJHx(g1L!TD{I%(k zPTZVQQRaYNo056$t1>3~t@z!<=hl7>KeOf#0&-1{r=cscHSap8 zZ09>$1S>ku+cu9l@-XoRI1CXt&@AEb))DeCe$({d^F_lvI{M@`}S71qil4r8Jzo2SPmK?Q|G zR~b4o)Y!R&43r34WnZZC=42R0epR>Iw+OVsm|(L@;C6anOQ~(32>AyA2-l(pT{mwT zKiuh!Mc4PRM+r)g4LI-P+M(6S&dXFi`-9Wi69$$o4CqJS0vjtyj|nw3Wk~{*}a<$5z=ntB_7uCd(Mipt78z>`0?`v z3Mm$`xs5e+tiEA8><3D5k8I8)v^aK-S$2uDgFe^LO}XM7ZX4RO$BTv(?f+fImpRYf(S z{jt$iTVAAU6W9U0@zA``>iHPUQXKp2B2)77jbzW!wqgPEkQ%i`L* zHdV3m|D0*gWOsO$timmL$)fn^mG|2sI?;`g6)V0o*hZ4c=CIm|yHR+6O(3okjVQdy zxwN6Ii|_=cZ_!HO(c#d$-eHvU&Fzl$VrdsVDAI2u>o0L>$L%7d>pA;2u@AcmseV^a zMTF?2##kow8{7nGusI4y7y}#N3&8pbF7p9vsK5%*e>2H#fl#D|2J+Z-a*rR^6skd+ z%|$Wl^3-_YR%ZylM*mu}=4;$ol47rm2A91c>1Uc8!pt z`}A7Wm**f+ZVi0|O~>i}z-2h>DBGy}vn)?zsjt?Vy=d0(wWkOaD?L|Q%LphsjmAA_ z|9^O+F5?=0qFs0CtJi|Bj?0Z6e)=A7QC;%k)$hxnis7(mdDY0? zW<8-HPD{)}XLtMobjI#>7F=K(lG6Bu$jG6g^8$80nvSvevunmA--3Y5v4ipZuvh;c zbi(!UTOCk(2{K+1%a~UL6Y&kEcwAMxyA{deb!GjGmq;I@= z?To2KC2eGu4%kLisaRJ!xhAG3rw%Kcl=)-S&m_BMyoTA(i&FAKB>Gw?TFZC_Zd92Q z{dT!?YyZVzhA)?CE2Iv5eQw?_fCu(S=G|gEixM-{Yap?1gjX#illa*y+>20(ncuRWxxRnussY0}SJtLBoKMoVI>29AX(i?cc-FM@TyZS*} z^{cXdn5b}$!y|=Ff2q=Orbdg0>2w)J7!JOWdk)eDgcNIN44Af3Nt;!bMozzpa{vE0 z)Skt^C!8pD1=fg;(kvQB@Qg!QEfYS?A$_)AdKK^IvJx0v#n-vut3f-U+cU}Wx61c# z#huRIuT6Dk>vz~dy7+f%O{(Bnw0x`6TQ08$K}a!KILQ^Y+G?;ZdB1) zI^SU;HPe(YrQAV3-;eU+GY0;54wI55X*`iefL4MuoR5}F{Ee%+MV#V{O5znDeNW|S*Djhc&`G8NDn`NX^c*6>-(TWsbN8y+=Q8g< zU#hoSiXm0EyZK4j$WI_g%(h%Yo;-+|bPZ15Y>JHFw&MQJV)ehV>MRA(U{n?QM-Ykm z*Y3AF^0!tVZT*;_Rbyf!pIRY+iQxUZt9V9+tKv&`Y2wdNQjEuFf=uoR?0E$7+c{{~ zz@x*?V952EQJLL&Ey3)2xvQ{ldeM)svIr1JJ0oSs(Q>uFm?^P*n)!2@5>C7RzI>uz zLw>F&oe((TpC7ZE>*$nvT$R-@U=LZ;mv@rjl1)$Rt5DOes^SLbW~ zu{gpt(dPxChZ8kcj46rb|7fBI3laH_9@^~| z7ZtzK{~_5{gJ0*6hBxPCb6wk}bwZn^6hEP=F#9xPj3Hq_?^mC{;48G?W$n`GxK7Tw;6ObRs&YZYSUAmgE^DBYD10ZVFl$9TY+6>U5&#n0MZ=)&vB}sACyPzWj|*F$6*JqZ z5AduHAbxw<>13ZzwpBQC>1? zet=(bjt*UKUfkzPr?czc+rz~7JO58|=6~`)fG#A5wp(d$mG;lLFcyq+2k{kN8Rmfo zZTm(L`f-8`WzS&sL0q3-EbOC`-|yfs`O+f)f8pUsHh?~U{mAU=Eb(p&_;3fxVrr(? zT*}DtaDPCo1-4~Oobe!+f{BK(gQrW`!0T}%dnwgE#U1CN91TG7bddgvmW2ee|60(_ zP~!!~%D=kwcQB1g0M+_FEFatVH_)C$mINRV%G$JR06}Sh+r;e6T;4pUF35bd?lP<7 zN5e!I0K{14nF8+iQH`juEiO%N&_FMz@S7|r!MC8Sr5GC28vW~{VKsidDj=!H#af(V zv@`Ls2J0p->BkJ?&i@7(LjZkC%ZTy*o=GZkF4e8C|9v0Ta+mMn-;J6Dd+%pkBZqLx zOVdmtJ9^l#Si+pEXrYY)d5@{@6FU}0x=?+;{qwWytv_I7bSfiq^=%>R3x~ih$qIP- zkLB!i{Mpbrw!!ne!(z- zPqO*2#|cHO=dy~p0tv?8UwN6gu@UK@5>yK6!|o-fTZFU|I91#UTb0l|?@&8U=qNR&8QNy2am<15Hd z&=ZLey5kHIq7w_;k1E3W4Y)3B$_C8qV}B)Vdix7|vT`{Xj7)^+Li~G^j%Nujw6n%3 z_vH(|uK)0-7?y8l>u6fAqnWC10L+Z}j=1Snxl9cHGuvD>q9jmNUGP(qXfwT7gga*n zPt;;IuxqRowmKk)x5VzUFo6nu{^T<{P_TJa1_Jv3G6(wi)tVjdHcZbg zEi;K1Gm=owA4_V+A@|~AX8ZGm+bZ(9*<&Yw5$1#nKhBluFmz`$D8C!Lu6KVLy}B!t zW&WV{MHH%r5!>&&iH|pNJsaaj3BT|!DeFYb8So(knaXDhNcC}<{~T=$@FU|WJm`hT zyo(1b9=ZJ+2kNJ0x_18Pae?scmAr13=o;}DTIy)a7Jn175XyOm*s5?CHF$j994I5U zJemJ2T2n`)-Yq%9=#P8l-W zFSxIALGz!ZoXkK=1g_s$)$y-z4N(;m2#KL`H8l7C8O=)>2E9Oe8DKh(GBEXmh(2x}~Amt23P zomCe~^1$-%$o^8&6T!MBdG&M1H_sSJycC)|c{5oi^cE~FCK2fGTS21lMS6l;ju*s$ z-G#`74FS>Y&}o3?%lp{l+>kzQSVdFy!Xs;l`b8qLjpHXSRA17Z!+XfzXUOfsdY*u@Ce*wnRlyKKv`H|%(s1!(uKpyPxw(N8~~JkNygmP3jC z2JO4HurV$WoUX&&c8D2IMeVCi)f?XU01yAS{Jaw>k8 zNx&rA^sqY)$R8$%Sami`Hlfc;K@28dMPP-cOK)5()q@K%Ifu>%%eLDLTRVDs_huZ4 zoc5)kWsx(de3#V{lnTNwqS7PreX~>p+TEF(@Eo+L7zU?Ls?>7&VX5}w6cfFce8-%Z z1*`C5pL-0h9`(lFN$@enz5^`s9;$|@=s(c92uZi*6uuFo?AUhXoaN*l-o(_QZP239 zNM*gsSd>NTa|`Kut^PLbTgK3eHvbN)2L+SRFOo0pjq^C#K+tK1p`8Ua?xdDPiK2cx zUx2?_C?-6cX5{Pg%O%)hmRI`C`3=#h^YVVS%_?*SW6E7S1|``D8azE&vMU8j9-DQz zpV6ZU%zo6c)cbC-cu$O!L77)$TrYGHeATM-2F99v{qYyu@s3b}ur>{U6mt?tN^o%MoJNEgeGePr&^5vEZD!B5BB(k2sGGmvPy_hXdy-o{oLx1I;mJm)R zt;5Oswg<0bgg$J48%yKm$kUPOb>1UXBkPizCuqL7C87~a+U4(h5ZudAZ?fWLQJ_ds z9z4i6`I?UE0_S9TZa%0fTE_me*d}rJ{Y$`yOTnMnfjRBgixZ0rW+FM*YsWP2?@L9V zBYj~7lN*;)_TKZu)pfyGg1<{{RC=_lk$r7tD~Tc9!q?xue<($9^=^FGYRoho<9C<9 z-7XPXH8%RYNqn5pc3OwvNOpkBAuzKGZkY-zQ4GU6pdAZT?!~n5CDAipCwP|2p)9wt zEWt7*@uZYX8Nv3krWIK-EEP;Fzyh=Gq+jVg3fCy7rO>6B{Wz#N_Rwjv*iS19QjZyM zUzkRNeI$WjHPZacyt!h&Uaon`XwLR9%sz^A>HGkuJ|o`|$XS8v?$AM+`-SgXCYNqk z92`n>yndblbiz)F+eFW~cYip9iONc2USVEnsrI;hgucgYnK!kSnV;zMYTn88!2UBU zc}O&(>RqBm{|8mS$w%0Qoy`3!>=h&*O#6_{_H_V-PkP=MVL6_bp{xh25MD$4tNh)} z{2cH`{GxKjCtZ)Mayq!dp#dBiOnR^vjyfyz#mOwNl#V+@4@311T31?hi zfaN{h_`x3q0}CHThS*E-CS$Jl&ly9U@rg!EdILypTX$cwawD^3wz)C(xYFY5m`{-{ zPuI>ZUo&ey`rx1RDgiP}t$bp(kR43<%Wa7q9>It#NBwt!R1;sFWsE8u_X6+VX^BaG zYdhEz=(O%KCbyh|&ob#bLwxD`<_JZEh-@4rEcDjf_9^7C?$okpQWw<5zFv)Pr2x;l z_mg${_3VNqZg{JzpAd0r8rc4KIpa_8xyh*;i| zg_K{I|e;0pjrLMf1IY_p-bhZgsEtq__8O_ni;R8i?n-W8Qs4V(d$3K(V%Hg^FwI;cv zzK5M3yOTN6`t2ZMl&e6m+?iD#GKw!!(Wu{cDxTXw3@Pwy))u;Ke%_uLJqDe%Em~4F z22o}ABMq4aRNy5nAtRCG+0~jo07hE z`L|@y5~e4SDz#N0MJ{CrS#lLYu3yIHbAikJ(joDy@mU%}<;87=y=kPv%cShl+Ja6= z*P1H7omSmW24`=K=d7q@bp$){GxE-w=ag|O5(n|nHlMpb+!}c0ZsxadH{OAGIvM7= z#=AGt2M*@6Us3KQaEXAMdCm^cd?8gncU?MXf38k`{C!qlIod$5^LS%VGmtY?weEM# z;rN{l1`$GNenNP@V6RZA<~ml{5erLayd>d@pjQS_VN|vGY~kNV!RK;o9YgAoAv?h* z8(36~JB9aHgwLo{O+;r=mqILa@azsYZQUCZE;|A;fr&KFxRh(ICsXRfE`Lzu4L^Kq z{>}J0)}ZKnj=CdKwx+UDy%R`u0s59 z&G)5)ViQ&BVur(gxD?5d1txE399I=_r?kkBZ{i<{f7HO8ZgX-P6Rk?~>lU&#tA z{I~3RXT582#zNtlM`ly?`#0Y=B0dPu^z6q@PDwAC<=UPk3}^0uC*JuP!VB|tX6oj7 z5+$~ofAsUau#1ve8A{JZzl&(2<+c4s;peegUe6ixv!qC3hL?vLBPre17VGW?$NEkC zwv%1?;{57RB#GR)4JgYmrRaW(+(}ShZTxFt&9F=>-S1Oh38Xbl*K>&k0c)dZPMKqj z_s0X$og$A)Z}kN|ffzC_)=TEiX#Ayd=a%pfSpH$@PX~GOFxAEi{CJU<=CvpZyQ+>` zUGlv5E5v5IW8b%$y5sorx4yk?z>R}zP)+FY{UtUZXdJEKH1urYs>I@?QpMXR@H-d+BqrV3y#Ar{&g#J^kq%VfIA6u* z(MgF-y<+epb&sUDpKHHik4JH_o?HU=;>jLhj97ccioJEp>(Tqf{CX05@o(s#$t0t)`$&E(ZR*fESrF`?Jrq3t3X4aw%kO=! zr3uY?HV9%0xt~b`sx1(+_(lmM=X9mMK(F$M_)Z^eqQ9_KCxoSqZ!Ec=$SgWkxU1_m zxP$+vuBuGi?TP4T)$Eyc>)v@q0mR!TfbUJRx^nHB+uC?5S7|ptY1q-DWTp!5mJ&P( zqyPZ``47c%gT7h|*4VwevPg0=Mtmd_+;7JI8lJ_n*$#>Ie@ZfdojA1hTIb#&z}iK` zLe)}z9o#=z>(u&$+I2pNuXvVb$Bba<+5JNLqvupO_l-bqDV}v#?h~k2R?qBG*8r8~ z;4KLJhH;P%$zqd1=2m72`{KeecH9HsM_DDcJAxMH@WUbKsA0iY>vE%lDTx{bWxXUi z6>l)eBsDQl_YvhMPktq$$Hn`AaAdB!Z09Rn&rPQ-+);$gmu@l|ToLQ{_oNBE*0$>@ z75mu9LOT9=?{iqTQxZ6{a9;~<{=xf1SaP1QAut=k@eDW|zWXJm(59&)AUKT{@0YQi(w4Pzyq!yTJNyq>DwE(hNn2zPrN zpr*(ox7L&<*kIs)rW8q$^$x=U!E<_Vd$;!9XD>lXM2@@56~MQE{>T(>N)Y~WG)rOM zvaR<8vo{ymtQ~?bY%@b!F%I4VCCaDSnE}Y6)QrXG$-4L1jk?hzC!F|z+IraVa9(Gp zoG_CSb0YlUFkvU8uSlj+Dg+f5c5_?G1~RIEsok@5N%PTH-QW%_(`CgnXenC*7Tf`z zFm{Gh%gKyDy;j&UH2iF+%(0KxeFE&@lJ(mxxJd0aS>8RDRLGUti1cr4aEeK@a9uuU zc@2C8Rugz znO1t*FuJuhf24L+A5`Q3zgsItC6N?Kc`hB^M{w%(^9QRLJ!K87-$BL5N2i*Kr^DQ%!sHH-U*yRLFMiX+i#uHq zwH=gXj$qn;oC`+#af~o465&$UC19f_!pkvH_m8J)b{uJ_68p%<$=rnSYLbB$M^%>F zUap%OK1DVg8-F{Lln8cEQm$q6O+Gv&0tpTlrQ4&9996o8HtakKW?iV3nC9ngnOhs&b%~%B>VX(=rFXZQZ1(W{&UdM zn1le@6JCdPL2cS%=fnC*;Um)XmuNJnkk4Q4?PI_BRZf3j@Aa5TaEQ(RBDVY_*8ir# zUUBF77>8&>H^lM)KMwitsWkZ_84?F^jmd_CO~f2pu|adXw>e=upuo7VH6Z*GW2CrH z))wWjxWcaAJU&C~wbUDb62z;>8x|>J&+~)WPxL3tV^BCTuAen=h3RRe0D<*l)7ur)AKld5-H7{m=&|*s$L3Bk}Ep6*SMN>RIxk*f~M{kA%&=`qMp~o`I`VM z*FdqW@!dMkP+KZflJAXkyl4OEE)!WXPNb+CexuUtTo}9MLb6N@LCeafOz3QpwW)n* z8=+;^_r>h?pSm^HnY)ZqE^!1R@2ampax}&&&k|d4xh*)^UB~c@+XhbxlRuhfn9T_m z@{-{RyB=!fWKpv9uRqA~2mWVSi&QJ7WUpSM6G0x7yPecDRgD zuEgL$QKzMWQ>`G$McGk{qWj8%$sHXIib{8Mt^MUQGnMdXehTp-+L>J1Kacn;&`sJ*2b}c+#~+_{l5YDp zrb_e1CEQwGJZHy2(C(JPnlJo$4f;m^ReigwMCV7S9%Kkui^-pf=$h zZeSL}d4yE@W@u8<)0{N9bSD-%+qW%Xr)9!Vi#Ja2IL0|O)G>AqpMICw4n@4Z7YYq* zxGxqr#9k>ZUHCp98Xp#}U#=$drhN!Ko@uS|q_YYPCNq^V7!Mm`-3ts&jO_dF}NdN6Dc+MG zr#ZCzN8kn9+w{hn?DU|1_*orCh`00+m`LU3nc*z^ZqURsGskVN*8s@AHU~?hY5lX%-74T-*OC6#q(?1b+JSa} zHcI=|>Zd4*N1fkWujDO$lW}}j-zWYwn_FhYGi@FvT4?{sP`vS`4b`+2F{v%vpyp?T zq#h~C+diA1yx#D_64^r#us0r9pMai_lF^9W8B27x9$s1o zhs8J`H}0EL22u(n&+Z(Q18*}l?C1pGSP~$40H<*+Hyb(t2U{Z6lPcC`&9RRYo7fzP_T^qCa=a=k zSB7cl=xyWvmQ`nbyF0)@heJZou%DKR`j$}rRJ7USk}ze0FB6wio1PBWq@Tt?(FTH)2r;AWERM8Wy3rEBiLvDM9)?yBd=LiR*poYXEv6^(^9zyPJ z4&+9gg&VS~D)em9?Zp67f0{@~hmZEUb}pL6c>e!X8os*H0n7*wAls864UJmgC@gL(lN#QsT! zDv(1G&CL4prCccvB>805RV@LxhNoLCr$5Ox{wGzI-ocEuv(3!%XQn0ZV@Zz%ON{h8 z={}KxXZ!C&IVDbh<>}|Ivfdu#vTes9QkGhY33N8vDUr(WZXhB2ye#JaDDYKI`p{v0 zTh959Cn>4VW1eiS9zN0Z2%PmbjJ~k@Hl4`wgrE7tCk>ra6X~wC>~Y@k?W7(}d{xhH z%`tL*m?wHKmp{SJ1`u_P&B4GS_@-*%A z!ogudPd>$cjdr^rAWB_macGrVoDEagKhy~5B@DHT1El; z0|C~pKQn7lrZqHMQ(Qls%BG%AM`072HF`I?(_Q!`%A8?2T=540-v``RE(EyXuL7KA zY5~Z*Tw9UXQGVXLm@!71J-`*REKF6#A;G7n`YQSGHekNx#JAY=gk6_8@7tr6^3T`s z*gZ03r&cT>8Eb;FGp7W;JIl-W#{~1~Pn^{(?1z5_f%z_^b{3_56Z^>G86O$n$>q?P zKGrx3ee8<&=+|OSwuvH}cQ6HqOWEGC2(qN2^SRqWevQp55$uC_M*77HO-Hjs#FzwS!|RTN}3azn`SO#6W$?uGm4>EY_x8#*@h6oa6xvanZN?Tc*+?wS8m zJPdFw`EEk{kDmw~-?ZZ=9i6gV{85EwVN;rg-4_@vhTr+5oX{0>c8jkQywLN4yp>Rt zL7qyZ=PjK`IbbbIh@M7e?T-e`>wUi2_;be0zSkW+;^)@jAfawzCSB%nX2tqF*io=n zeqb06nF_wuD6f5&N9SnUkch7(&dY|~&96^w9bzk_9JW?1r^^?-u*Z`#ij*cR;qX%L z@gn0Cx82!#)2@Wa1l`0PlS}s&-CP6d)!6gj8R1!Brz~NMtO%oR1f=v>Er%_`E$&yA z^nyCp?c+r}_(O2Ch5DC+8bWg2nr_%_{kZJ0F7;Fw)&GiP3R%8D>4d3VG(SKc)3dRa zS=a$7*Zts$-wVK9luzuBqR^e%P4CWxjbX5t}rhCl^x&Ab^6n7=k@yqI58__Gl%)07+8 zS$?XY-csPD$4?iyuewTxD(|MNdHwTaVYI|kp=YPD&p{iX92?biKa@3$eYsgvy)|)a zSN6ifNn25MO*xD8NMuA)LCd31t$DQcf-JF-o?U10)m(-5kDhWgXJXl8mH5&0x3}6W zT4ZITINDFYehz}I>E$$1Ix}%cx5M`K?sX>~EFvFi<$e<6mf|fx>AU?+DfpQ_=g`n^ zXJH4!cX<+}|8ToWBQRI&=py!4Ev-bk*U&z7*n=&H2$ z?lt%!-%DrsUM%)0o$2t`6E{J9j-7Ul7A}(<^jqhpU3x<9Ijoyy!j@u)@Jp^8i`{4U zyJs@b{xHr5(I$U`>oQ~!<9A4>L2t%^`U}joT9>=9)7)w zKelI!(PshRvjTO$zOXEm_hh5*pP=z@OB`#5mP>nGoCs@~&NZdpPX51x%Z->jaXPP! zrI^XciFAw^c@+W1rG6n7%pUy*~lZ4_~uhJrwYqxv97mnFDh5> zQrN~0s$W^T?svZWR&{G4T$k%%*!QiPnPlGTs}sO)&8p&s_lj*kf=eBm_-oFUsIr6* zG8`lcv1rR&I?N8fab%_!j?91l_niK$g*QC-z-G~i+tiW+fQ&D`8sT_NRAyQ^dG#Cl zmX{6=zC^Whz#)QeJPb#mi;`8-;zSu zaV%X@&0kPH-}v&g2|5EcQ+l<;CA3wyHr+qu-za&d7-F~_$qTXnJymvA8y+yF8j^4Z zk3p6oq>-asb2_(I<%G$DMxWni<-r+?5ZP305iFoS&1_oB^w|bnWU5SfimaWq%rFJ{ znVY&v-=2k~@&5P!tx@<=NbU5vsZ&$Op(H5j+^&ekL<7vFHEb#@7F#t_(y;RIe9^$) z!ePkkQ^rLs(UduGVy~EZn<~P|OTaXg*c*R~JS?$&@vgHY{AV|gXmCx5l*I$D6IS&A zdy)6_Yfs#6DqgbUyeD}rg*ia>I~;G0OHEYRjDXnUCZZ&IZ)KqsMt3vm8Zq!*;A=sQz!Zw?epyV*Pn9Hf6qS3a`4_)aV z>YWSywZ4xDE$q6Y?_9Qvf*)&zkiF5mt5W`>vzuLEv`j+`PV}mW@R{{s+2hU6qffD* z*g}H z2jUwm@ebZT%H$q>Qb|noHA+@u6*qWr(|_=Zu`$Gcl-n#WYMlR?xbuy;*1dQ$~ThC{$XF(hF)~)T)(z_yQ&m7!GlDV7T zgBvy(8s2q=fwYNL5+}molRVY_*lzzS+|rh==<{XQot0On4)_=YdxB>IC*7PC1f#+u zAy$!NiPm>7GjXuOeQ8io3?4I1*pF8cGF8tcsaiXpj$Vty#s7S`wOw2}SkX=-J=^;+ zGDNW{zs4|lT=p=%^UJzf~nW)D=(W&abQ-soJ8%SJv z&8O&>1>2oVd{X4ky5cn#1if7K=;w^e&gAlwZONFTSrNXfwYH-rydHZ z_P3hJsdd=sSY($om^RT3uw0~~=gP8pV%GO1)E`J> zljK4wrrh)tBn3?nyf~;Aftj`NkpTHM84wyZ){XY@s6cL6Bb0G-S&U$zbZV2T$ObF3 zaH+F)=+=@j)h=mgqfqV0il{7ccIUZ%TBNr~6+FlJdq+&1_DjwA1=YJt_Y#U3ll3|t z@u`t)glz$XvYXtB}BxJ@0zNS~~!W>Sy!bT~P>abeD)^=w?n9mr;!Dt`RTipP|e zsIbxy4&x^w0NE;Ahcu%TCZ_;jk1t`nRL_9~51P|5L5^kCC|RXxcI9lMEskSrMMh{` ze$6|QWF|J4uJ5ME(I#FI>t1LaK164*w}7_>bWgqe()0@(#Yng>*ZKQ}$H}@E9o@8~ zr@T#ja^@IuAC%965ldW`1?#$*NRzqW^Dm_zZN0uszZVE58LVkTb)wS2Vt^EgJ~Tzz zza`#_HjUj$GvTZ?*Vyv3q3`@Sn7s%R4G|O0<;)*yQw!N$sCxBJKDC=wg~!lB z9T0XYsu(y;H(zcswZ`50^;?|LHmrwK5PmxHc+FiVZ$pv2C@A=-VR(5-f}#t0R+)uZ zFg_8Um_pd2B(LV&KOU`}R<0V7;zxt&Ct3+?XrjfLY=tDIoE-XcH6thyUBBG(L*bPE zixKW9b$^S}x<7o|36m{d?lT@vBr5q3W}=C2HRe3rxdGCxHE-`loR`LUy0gF9UT&mD zQf+ndXpwob`|(7lM?b+F8hmG9<=YL(Oy)$BH-%P>`!Q$kMRy%A_kUnU4u2m~?Pz#-)RL<3HLQcgS7PLS zwS0(G+Bt=Gw2uVIggxOVU$%|vQY%oAkRu4!)-%l?sTGPNwK_xlZY-zbSgQ9X#b_PI+J87uc1=sV5qj6Ub9UVsdE52lM|vW}Xc23L*mYpa1@XGt{?Pzy}~SvW2} zz0XZ8&Ub3Fx^(iS6KK3TDSqxp2A8svuPgaOe^i`FMQWCwRd*5;OMEm6Dj?3CPqw=$ zsYMe-*NU!B`LNAX!qjKbYa8L}6$NdjO>KfP4MBfBTMmgY7%XTJL==okkJm7umd6@l zdERz?6GibCRJCo*+VclnBCF^6s+EZnrEgT@>=4bG%aa}QZQq=^mPE}Q)}Eg_CYET= zYxQ=OxT@OL#Od|*BgYf`#!dwH!Q#LykxjW38o@7qM2a>@SS}(~kv1k)8Ir^p16HG^ z8Z2=XesXfkUXIznHSUTM&BRXXH%#o8#2y+gbc4qFRYj2}JftePip<#k+Ez%i83Sk| zBDzwq+3Zo1g2HG$u}U>K%t#=IFI?L`?#opys|F(z7rx%Xw-;cH=nchz?|n+LBIGUf z(GMr{9yZSlQY))fo)=HM5-qY8D>2dR(k_v1#hj}i-$ZJ93rTnN| z>HFSq-N!1aP%09bvEc2>a{oyaP#oYifgn=QJw24Za=n%@*k?6k%7sW&m`r=v&l8nB zw=m{xEilcmBNqpaMtp<%D9dWPg5)P{su=z^rv+LWKb##zB}(2M`oPcZBC6gmH4bP( z?W`u1@TV8MPZ7&_3w=Y7VmYmdYRk`obkCk=RWKm72lx%kgRjc<*L#Y_6+zAOQQ_s&(nDRT@4wTKm;rngUMmxIsxuNpco zpDT<;TT2d^V#|rbz}^XheXrA`Oa+`O7~(3}otHnf_z~Yu`4#fn&#eJ5A0w(Ts+8p! zF<(-nr0KT|Pw%k`Mtv+~IV$r+wP9qiV|28;$QhIc@vy>E>CM-A2>txuM#=d@6 z@GwB0keCjYCYn%pA95!04Jv!mz&6(eb+ZdP5&Y@f?_VNgiRO|cY=<%LEQ1;PE@DFH zp;K$vht_~IY5A;XKMjC_Cr7Xio2VSHwa(^Q*rW8DI|<6JDuFWyur^u0FD z<(z)Y9e37V)S#O9Oh+e)Q>POl@Ch2_i$_+jB z#EV?7i z_51LcH;LUq6f$3mGKI)3ozNhep79rPK;QaZITSQa-1&3GRMI{wp zsp(yBs%mO!F%Hn&@`&g~Ao}gOu5n+-zRJeP^iHj>i7V$^r}#AQlU>?&#^YDTv@t|DPZ4 zMAJ4n%$i*s@NZ1xSyP|d*pJ~NU9K4-zJjHL@=?Xz*M786Gx_l+RA4KYKIdDH#oAc-c+4RjZ3kP}mTS5}U zDE#WG95W07LbAg5O5OiTw9!amR4*KSmO9xy;XY&SRJmay#BQSB{Ov3rDY}8(#HsFj zdv8=m@j;WP>;c=~mEmhu1{oiD>L7ZB(IF_h(vke$78tPC6Blo84Q&aOt!Amxq*5gF?WBT)2yannf@IQ)l{>-D*jfWq1L8ii@8t47GJ1-UsURb z@d%%R5`oux+InhuDXqix#d%!;l4D8n4P3U!p__(O!bnu{w=aSIZ56*=-WAElT(ULj(^mQ-y$10_qsRfWp?ou6e^S| z^B}NFhIww-QtxsdNXpIfA239xJC&XdXCdM&qXp6?tlG~?MmD>``Dl&hhX}Bv$C^WF z@LEXQT8z}KPw=8fXTpQHKm`Q+yZPr}i{ZnOeXhwxzaA>;g{8u9H{cX6kwGkjit++A z6_snSD`;`Yl>nY2i&FpxAOmdJRNF`)r@~Bbdjy2Ol>dq$(YaY_TG_>rTmcJyA*OZr z?p?vx`S-*(HFBceBT@$t`+XI4i<;)2)ZeSptI**7j1RAYx@z=HOSNjIInmqBsD+0I z_s)Bk`~J~3zh&r0Z|v2Zqsa{1uq*Aq>dw>CtXI!b4E|Q$$h_R|6TPeIwHRtf$IjQ+ zcZ0n)|Ktzt5dGE}XvfA`1XkpC+O4XW_O_|6x}x7ItZMlbDNubLTO%Y9Eeb2*>DJ${ z`yEMHtLxs}B(EgdYI-Vn7YgSHNyPl$S69rENS|(=9`{i`-Gls280z%8K)5J0AWmYx z()b%KB_U%8LyBWGhhQRf^@HjTsR(wYZ{HfoM3fs185*Zkmblm-B*~{UjU{XqipEWV z_Br=gfck8nf=oKN&YgLIgFOOUzBDGT$5*VoYSV3*N4sS#=|v)a;q45vFBUl-9LL8u zSU&yx`TGCwd854JwRCIRU-_P^@=EJ+-mf^V$Mh>vQ9|_Xa8BcKHq~B55!v)nOv$-3 z%^D=Geird$G;(#bSGLrrqC|_}TM4@gCyMJN8#j4cxMd%OJ~T7ljj(fDx1{g?@`Br_ ze2G7eYjln4YL93qhLX+#i0J?~#GKtYIpGVV;iKn8YJTTE|K$Yz&5PZKnY?Y(joDsb zKl&M1I4roasQ)Yfba2pwUB>e&^V*cB0eU<^@%S zhlRzy8cz-O011^dgw)A*nVLY(7Vg1FdJ*Oe@;3K=v%Y< zodoMYM+)TbI6c28Uz!l7G+%`2e)3+dw(aXiV!dr4?KOYDA);&#a!9vTC!_{^kaSX{ zNG;EPcQ{aP1qIW4z3eDednLt-k|r?#-gwY=ZrK^(3S1hztWdMGufE3f{-6rG-wDV> zOm{ft8VGtqB1O{r*C$;mycz$>(a(i~k@F2IUhFaXf}jqm2hLtsVLgRv&osS`mlX9+ zsw=w1O4QoHX5n|9Oa>B@e{x~F6(07%RPrXZZK2md62r&+OQ^Le4m~#Pig)=&s!6q z=Ca2T@Mf$#X7nT2yOcXE^C%V{u+;O<_!S5)yn_x$F&{q{uA=xDlT&Q6Kv&;Uc=^bx zgZ@`ki1KS9My4Ec1lcllga?ha% z9jjGjcLcR(h*_Guz-<5i=FVhanvJO3gy%jJ-KD2WSq->P>gljN1KeeZ2mo??t_>?A zDEUf~*!pzQfbQ#AbhEG;%p^hDcQ6>3Jxom#r5-Ipk(RS1XT=kyM3Y+7Nt1Y-Mhy-> z-!#<)c$^^9LEOOVKY%tLR-4l-9~jWe0#L+bKF2?_mtbBdlyE-5pEqlqWToa#{QlD2`9)>k<-7>blWNyjGL@w{fg3xzUtzS=AG?KixPbkb0U!dh!y2b)P`{>f_{r0Ic)y&!<>Ly_yJL2sfsez@blYK zOSCJAivQtA>GVJ@rjm5Xr)bCjB-`*$aXZzF0LNT1^;i1hUaNWuH{~H2>A2rAxKrTJ z=m_XDv9fSa(({*(iCXJw_Hyz5^9>S_iNB+3%%aWIp`vr1&P;wMvF=T7Bt)%34$Wm1 zO)iKLbpQTVFJC@2pCg<|dNewjcL|t7-zjyI^j?Z1prTO8Q=}U(W=D(4i2YGTi3>#4 zaT~B!ZIx$;Qchx%pt~og1fY#;f#}R=-t!&6TCx`4796K0SL9DdjCp9TC0Z%!Cy->7 zg+4R&>RW^SRuJv?N?4xU1-6d;B_)G4Sd$%$sVS4*xt*SeaM3x6q;>*U6_mWJ>?!Hr zRA-4KK^Cyp(g>wSB1C9H1`q+vWN2MA6wcB_BMrQ1xs#R)#;z_|k1QK`GuE{z@@C>| z*fO}?Sri&Hc?hgD0Q-Dg-3?R*u)0MUMaUklchsn-r6Zh)4A!#Tc{5w_^}dl9-Sqd4 zFI6tQ-=?A#7<(aZfQQTZI1yiUR?`*JM1yB`^MO37TplI`R4s+{_2uuKF{%87^R26HdB+X=??!sh!?}YONzY*h>C0y!QqOdiV+m! ztP3pB@!5fUM#lxv?O zgQF?M?T%GDLKVYl*OsjA`*$O&c;aqxNlAGXtbcX|6$BkY7!p*Dn_d&EId^0|^GW)Z zDr$mztH!4G^o)J3eK|%b6#jFUm0)8zFRIr#=zmL*{D(KIm+U4ZCL|8Nud|H9_@X1! z)hvd0bEQs|KD;EQaE$QF;G)Ow`Q88d{p1TgDHemL17zc5PvGYnjVwxQG zVM@0=8WZ_chsQ z0(@53dKTJ@eqUNyf6gtmwfWA(PoET>nhK8(X)w}B>SyWy_iq<`l&O*>Rx!A}O@Fya zpAPm;IP-k2}}?X~AiXi-{*MOfmjoX~BzuJvqA9CGLNeOaGYk zeagEZq7(`3Y&;txpWgMYnC^O<(zpQnDk1TcKY=?;^rxXC)?lhPAuU=FOfK!?zde?W z&;BheuIq~z!r#sZVo}76u4lGaV={a z+(=Zc7ELWr@5E~B;wdt}kATykv8BDgaNR+!wf;g&FKIwN&)cf)&~CyC^@S}o8lFy| z5O0oNiGl}0Bll<4>ky!i-F<)I{StV4JmC>2txcs(Dekz6I&}4_iF*@)<@kyaa(fmzpeD0b}_0iECV;3?>36ZR-KvZwWN96=>PzKEpRRddx@Da zss=Y0Qm6=fsZDW%Yy+h}oSm0_z89~5%lpj6!uPvM{C0EA%FjJEMjU-?@inID&_l{iO03Mmr`Q`RoVUK^a!X} z$qWu)JCDyLUE%o*-VfwfY+4Q&I2E+2Y-+`fqK!B>6`k{!r%KNfpZI5b8XmnMS0{+` z@+NNkO16%S`bD>SP;;oho-k?Rk>Lk~Egp^wUmfsWjp{8J1L1pHx%-UZ38P(~(B#l} zLPukd-UL+n0EvBwaXm8!KsZ$k)U3bMr$7bPank<|*5B2(I@L`#p)=l*X*nl(_QiRa zO6yndfO6-7CGM=VfqVh*q`klIuK12;C}0RxoJZ2u{e?i#*1Va*?T3ZPJN<}N!9Gq~ z0I7ix#~uk8Fk{c8eS3E)V~>cW&q#cJZJAmgQaoQk+1EO3H?^#3lvS0p!A;|Oev zNoen7;AK3(+WkruL<1C?ao)N=IA%SVbk{-WxyJb3sZGkleCeIk69F6Ej1r>`el@c9 z4{e_XR*Z59OIHj)&vsBVNdIH=G}oySbRi}Sg4=TP1d<~8J5^kaTm`GyQc=DagR;C> zuhC&38`X$hc&L2@WlZNWx!$aFZ{OuF&Yeu~Ceh-+E)KLe1Ac$ib?9JpJN@PGJf;Ox zuQLkB&?YHa)(pSCY!)#8sEC0 zGYme5UP!)3_Pd&OEw(JRp619pDWioBXihL#Iz(ldkb?@2+{X^2+@PnwxNkoz?u zVfGhc{kf@~%bhG_%kriNzJ4OV*+du}PyIAXZbwy^sXrBO`^Ifg%8~f#sWsXi(zO`T z)<-dn4MA#45dP*F*ge{3IcWr!7bv3g5K}DauYP>*H60ZqPJP3>rB~>xG%_+Znl8oMXPf zB;%-!Y@LhdJdlJT=q2m9yl#cOT!bbKH3ENDv=py{<`J-J_azAbK>+ z;@-89Ka=TWi{qmR&CVW=HDJR#U@tNtIHOg3^>(UEo0ohX#;I768TPK1nY%5v>kg%u z#{;D}eSWIX8bi4HvFb>U(S5XY$>H;{>*F#&^{cxki~U6s2!qE+L!>X|t{zB_x(;;V zS_bhO?450udVn?nbJsXDK3NPAk4-4&UsAln(d%+<=na;cebpu49O*2FqnNzDxp{C8 zmrJkYNU8zQYImq)n%d&zJ5Py~y^YtoYtwjU?88p}p(DpoQINAU-4EJ@XQI+nNME1DFE2s>}o?j@`-c zl-GXf7kcL&)jxsLHzew3PBQr01yq^>mDa%y3c)AE3EIe3MySwx<~RRgQP!WCHJHGQ z)g~PX1os)MwuoKy-;&)8kFj`=?04{r3Z@+vXL`LAh~3U13TTM&6G8`q&j4?^p*4kc z=dQ;!sFw3HIb~x7c$yn!!X4Frub2B>94$ZPF;lXY*jyLq!op__6$s-NWt&(0cKJi( zA1~Mt)9XXQV1zMaoGEVvJh^F^d&{%SbteJl-$N)4PzTcaP4G!Qz}UAmz!^}e$1{^s z9@{kmZ+i0`*gEnm1nn|;6-GZg-HxrA%6mkta%|>&T*@~1H4E>B)$Jw8NQ~ea-bZjB zPF9e4tUxII4+)mA5l2Xcd1tr0akphg$o4>je6O&(9BjxKXD6otv`G0EL+nVn)QSf? zq4*Q31_u=!euTz(0wj!?D zUa~^6(9}yKAJzX4{47orQ20`tFJF#p@0n2nC)3T`4OvF#rb7}ZpA*f(z1on0n48+p zJiehAq9e$`q!=6JsA#LEH%CP36V2@}frJ%+{qn3zCO##10-lyuVayZ5dl4L~^V470 zD~g!=mHec7x4WpFDo}n`K8~HQ!QQ+Ryq{w}1xK_e(Y%dtH(D9ZGw_OKVv~M!m@mY- zpmdcqnDVjG#It5^7g&rjKz;y5k0COG+|A17zSU!hA8XkXFL$+G53-=L)>Hc zo0zr38sQz#z`bhn8+3r%R_mnxm(GR_qxl1hjn-$iKGUyW|98W?rs4=OFjSLrk=G%j zp?I`M(s%g-u~~g_>uge|wG*@R_NdEc>2lI&>7T$nuqlt1J?0`(9ieyRy^EuHYYy5z z{6WyBT9x`y1#U^}NXum+-;6vUzwd5A!nWU#s94J~kN?P0Zz5$(1VU(Q!YTWL%aZ@0 zqP@P)Bx5%0f6?tfbxqz@&?;t-lw zg!`YRSn$3^!YckK?krh1Qn?$<|8FtmE`YOccx^N4cWtSAZR$B(Pb9G?Gudf(9^~$3 z;9lh`MLTuk#!dm5xKQSC5jt6SVT&_`{tU54M?_cawV-GnW2@drpVc4~nQ7nhFZAi# zTV=xiKiTgSw4JO`h-$mU{q>#QId1PZZ1JK(>XyQ}9=KpP41Ik80=*7sgZDkZ!PLM1 z(`#I&Ki=gBcv;&u8u8ChliMGgb?LN<8h?PwX(*ytO_`eV2qfKsqQCt4(Ag`9|Gbp@ zfwI&eh0#xsH!U5lB~r@YL@CC%m{k}kehT|``*~vbBQU>@b~hb-I-*^cS?5EJ#jQ^( znuB{`S-d2kVoX0CJ)lN$Nzv3;^(Psmfcu&jOh#B@wc`&_@rt8rY1KHzoU`3}rMiAx zpaQ#g3W9Y(;c6QzFP*lAQ#BBfY)annjkAFHapZFLHw^~z99O8Z_E*#7t`9cxOrr>+_noG=f*K1{D%@`lmpn=f|3ix> zyFz?fW396u1?MWMtGnBpR9FJq$~fDjPbwKJ?0iv1c2+;+_fl;0Yhhk45L`CL_FyoR ziPrYa4dTGdT^S;WKToa#K}(m_d&_8HGybyTJAT!u`oDJ*;GF)aK-cM(^YLZz(Q_Kc2D(^+*+p!by z%T=H$jXs{411JMq(wDiCWo`wuJ`*YK2OOm}cYOGS(&qDSwoo8T3HDLL|QZL>x2gx)a(CD;q3%iQ>wk598-I)-R8A zx9d*iWsxSi9WEt(98OM~&im140NcLA9;6P=K8Z}J$Pt9U+U3F=9rW|n;sc(QJa4ay ztIBwFsp<8}2!72Yk~d7x&N4)zFJefBlonk}>f%BV6-u~%|F>N!11c+GAZ{Q=DtgGl zEEWkv;bwq~<@T1@Rl_x^;0{FCA+9rkv9dhhc}j800lzXT#y z;sl{vqoPV9kx}}8bt|8OG)iW^k&3R0A2~i=2{88Gsh*^o00Vxi+O-uO!Vuruq~9;Q zApKAOIZ`p>sI%Z$Ve3Yb4e!xf9sO%I&!?OCY9G$j3zocs9c{H4*v0KSQa9}MJ%`#P zXC9hD{061mNAI92S(NEFEPLCzxum1C4X<4WnoiaihBF{Zh~_Y?PryJoichRb9} zJRle~J!pxp^4q@*Y0%Q)9ab5;^r7D9yKx*OM46X`7cVnu<~DKsv^QxLX(anHU4+$g zQh~{(2`@qMrCyF1IzppODVj-wS$P(u3y;nPB|-EblGqO4JU8)Gc1@mh$Dp?TuTWPG zTy#c@fuAKM=g2kj9mUU*#u=sTtTuW$kH6WGD}3TcpzZ5AB`=IKh}aoVQn+~ixG$+4+ykEf>@ z!3I?NcOt^}j^N;xGGE(zBRL~-({1AM8AN^VY(3I%Wsn4|%FQP+}}IyD4u2HeYj z1NdeWXKcdFc$>zaME7uk?EFvBkEV#}900N+*Y+oB$Fic*76jnDs8J23a;{y_fy4j3 zh5oI42?KrLRq|&MqdnWBc)2M~WgC>cCCiN6QopFKuBt`&T&+lg;xd7b+lvj~iifN~ zoRA7Ge0LNRK}|zuuHg5Xrx`oJ@N|QAa^dyWSz_rF_6k$$esPKdKzF(0z>4r~3I(kz zH?5mTJP8V;JiDrNf9(oS@`%6C<}BO*ZTMfV`6B>RLECHE!`wqW3YEr&h9+87&_;>t zOs-RykI{UHKsfKuH*_m6K8st4=QAf5jAB=?FmU^ryhPY%` z)!$OcR3IatA-PArH%V0Z0LGa$eQj&TyUP@G6HCa{YwMzFceet_eSGD}ExSSHLsqVa zH`yjR>J@sCm_SW_)16z5jY4k>&Jkzd`>F9>m8aQ+FGkHdhe~V#Yp@Ty_ zi(Iv4yrN6TEAm3+c4iWu{eH=&Unf8GaIc++`VcDG3dkW;&F1A%U*@^yH&mNUZk7R@ zsVbuhWmKY~R%nv8SHCWIEl{BwK#Usiq8Q$VM;0WmJvO5zv6E6#P|hIIP^3>SAZ|#^NUe>Wf_b zdSY1v0(+SZk(CXubDO;wz-lmI`d&`>8uP31)gXd(@AZpRA+@(f$F+_-V)UWg+uKKB z8h5;0r}{f_=}w>aE~GI_t_AZM+&>K4zY%b_MbDV^(6EUD>OPhgit9}7WlTERCc}<& zW1CilhV%HY{z`)Y1nJ>w$BN*?HH4}6NGik3CXKD<2)p>fJATFmqRc-qh3BT_;m=%_ zZ+&hOxhq_=Bvq@8qMdyBx#IqleGY5*vMEUjfIL0XA^AhQm||VD=E*koZa=yM3NM&& z2=Dgkx_zH!!xI+TEuM6JhG*r&XKc`_6d^#oq7y9KbjcVAilWvP zFJ4%xDn^r$==g&%90>pF)3})r(69PaJ;h_(%*o5&YUrr$$@3wElzFQUxdMpsf?>M3*izelGSJo^9{1E(CP zkV~4?Tp2)ez7(+o5XG9V-5*O_bA6tvTXFtEh4ZppK#!FL?JjD9!;n}i0@Io{=*4%` z6q52H_?OT0J@?V`q3T=F`WEfK#flAF*}ltSjaWbh2}3y%g`<3V@}gb#v4cu7_K3fF zEb$KmT$;fd;5l%!Cjh8VUss>_R3k*r2;2PWYX^rCQ{UW|efWKH|2Zp(-wde8q@C6q zTM;Qf%MJFqea}UnR_xs^uG>$CG+gqixL9AU%@!_1w6c&W)sXYd-p$r>1WAjgd?egR>&yVj_D zlf5B%2IyQ|is0|M0TCKKTl~ZzQ-O*Q2hm@B)l45nxOQg&0ySaaJHue3VN^Io&49PB$SSt0n=FWql>Mw%L^cCd@AKKh*GPb)Hx&RutL?G|Z~)ou&`juw8bZ~<*>KNcFUou(Mb%1yQ>>i*zcFZ9m- zVWufzu;esM2hU#Q?w?o{QRmkryluT)cQ?0!Wj)*7_?^EoulvFWXhLRVQlOwGNmois5XV)8oxX z)9km^i23tAu2KG_z~4M|5fZ9t(W7#-PvCb1hH-5I!iIcM-^-!Hx}QcK`@U){R5vZdM3G1d0tLLeYgi}p3t(995%Zo)>d^fICWgczZz9tIJdH#;70hDh(?T?+RSVCwv zwcr~n{yQFXIG_S9-?KRiHiBW@??zTY`eU*QHf;g%e$vePaP3#EaMNOxdxyF5dhw9} zmf*qh7M+avovmR!Wfw$hM=!1UM@cS3Utin;qlL;xydP5c=maCy6ri^<9*&yjtxzQY z!~ygZEgYHdVOn2Ep_&i(Zu8ZYm(y~fNawgnRfeQdzT!y1e0y1DMP3JTY6k{~NgMAs zL8ZnVpp9R`;wc^gcTa`cFGrZ|_kWfEP$ZXSkjUh>2hUTSXKyLCGA!^(H*Qo1RXhO=I=#sRF>tZF?# z;sWq>tyA*)+^3>CQL+(_V`)3(N}J zQvo9Qj}#?~=`!#pt?_0uCvjAJ3>~s}ut)}ky{3x-hoS;f(YH`}VwLOI2k#8evyFTJ zo<4=1Vnq#5Z~xPqv1TL|b3RG1tYVxU`G0)9WmuJM*ELFaw{&+1D%~M0x;q7=yCkK% zQ#xFTbax}&4U1H|OG5g)@V)Q%dA_~(v45?DgT=*C&No~)U;{w6Vyv>RiN2{a!(o$3!k^ z3hy^jneRdTx|bZ}ipm6yw#qaCfXPxCtckH8T8-Kwo3k3GrzEO0D%cH%Sd4DRc)43` z1k?-axIs*j3kHl`${2g?&hGgNy+ha*A7h$LVEO#Fw_@9$Ke2)UsPPR2rVVzxCCDQC zCOhUX%*!6&M{wKBv(9-KgobRzUSrstT2@x*Yx>1`dVFUAjd;JhC_*vxBm=HNDN0xW zGY$CfIcV#OX}CvP2&Y*v+&w=lKpwC9yMKv znxJ%bGEW7x8QpU82leHg4{y_x>vHOv0#V-Ik*+Vcs(9^lwO&rky^JtxO=J1`F@V3} zvd6k_*&LgfY$NHOivf7Zt!e6_jL>ik@tvz_=Y>wkD4=MRyEuKAwp2YpY7<8494@r^ zYNE6cutgv++y7OrBA*L%0NDSgks*;K?>)pUydfO|3 zKVcL2FBoR2yyWL(O{7n7onC2SmHDSIq7{c?BO(;O|7z9!H6#fET2Gsnu4ZY+DFXZk z@SERouu5CV_1XP>0A49+q2=W(N| zu8*T%er=U_)*!qy&;$*Q3sg&@T%qVfW2sSr6H}2N)lY)>F;(yvnBL6AbKRL?&oS^? zr36B|J)Kn#AV3o01j6-wki_$XtE7abP&Kij7cDSft@-SA--z78iH2`ajBNA8J$!l? zrizj6%^#g&;zy1zrUpNBEqS zrbE}$ZvHcmG6Pkh@>4^Fu1sS-MLxxt5SkG9rA@hQVDeQh$F4)>w={)sozU;}3D+7% zleVxnQ{L(7I5Z?avArDK@7r@PKN>IzeWt>;I7u<7b7@2u?>v`JgJ%`FF5dVPR=|<32x2DTJg9%RY0JzZ9aYll(l-(`kh%@=yiX zGra-=uC=-Tc6_*i(6@x5-5zey&M~MYSByyB>Cl^d@uuUqLF?o7@)5ej15G2$Y4CF_ zyL6j_r6}(Ru|QBTKENknYU!SxlClWBG@V;ksOgoA2o05_#Ye6$bQY3mv3Q&=N0>9| z_O-FI`aMR0f*mwvkZE3DTwPyYASjC>gnP$vktDyR$=x#;R%%Sbl#Su;4`^dxK)sWq z|KE)WAghD0!#f1-7<;OX_B#4DoP%dh6C|fa8UH0#9S1-?9@GI>_A0sMNekB`-=4(} zx&+sS_Bfr3|6n3tNRjePH(!eFEZUcY>@1kA6DeuDOZm^mWoV;Kt3bU!-prA1^UwLN z2oXI`Q5m&~PK=9Ym6ic`i6<6xj1geHjTGsKE;A{pcD@L3($$HrX>&uiOo^C)#-cWj z9WGO3Y~h+=g7`a5ayeZr-t*Spv(wYl+WJzhWmrr>V*stKEKf)oPASz~-Yi|P{@iZ2 zGHXL-$JXHWNWbjc&3YeXabk)pMV~F?-7uCZG6A>+nxPV~&cfXjFsO?0l1?6JK*0sE!D9%`X8k7y2ZXnfgrJd zW<@Zmnf)wS5w=F60OOQR|$5`1X zW-`D*O(VEZoMB&!)~xB>r()wf4_~_QVA5Kquk#y zeCJ9H3#Hzhxf$+i^xe6^ni$ux5sA)8D`s~2`!}oHr#&7y>zyy62;6QZX<#a?Q&X4) z>3PzeHesqNx#dQBgCN?8LC*M2bzdS>3pg<%ctc$)b%+WTZdx=*FuSXIwEYXE z1{7&Eye1M5C7%Z)1s`wEfA?YDI*~2ku_jB(Tk=GJaRZrX{<~a!O@}2zy`S6^6(CdnB=0tOG(dw|`^gpE1CR)3uoZp(W z97(U=#TH6U`>5aq6cPTDlxY)%+j9cimi{^43~_%?suh~mXl2>%d(@jI8~~N``fjdG z{rVP5)IpJYf2);4>AR#-u*@*5e~1$6yZVuuwf71qr-z4bFiaGh+BDg88$bJV$i06VLW)mL$SeN{ED5ZjSY?*U*`*e$B5B3TVDkMj7Es<| zW=*2@aKvKyLLD6$zQ{PDsBIf4ABh^s1RJI8^5L71Bzrg^mWp0VQSRY!t-^57c(r>1 zXsFa^s}j(`*N)mk-(RBqfwLe&H0Laq6Wk<4+_OPCK>qE)hNQ`ol!;`Qw_h4#zd2{< zV}g3$?;0_~pcANmr`6-gqJ;s28_AZ1oW=6s?kN04x{@ zV}<I5>?{3v`?t=>Vna(cQM*;^p<@#cD)`NeFH z75l~&=UM}&xpx3-+H<}%{r<3pN5?}c7Z=~cwSIXC-$wla+PlB@rXC{!Ky+vGK$mhD zLcJIwM~;~S4mnAL38)Ep&iM19*^_%osVL42!Ait*G8OWLVMrh&BHT<}b0IewG85n7 z+&GbGaauAgzPa*Z<_e`~RUZU~>Lytq(qCe-h0VW_)$Ga8TFg0%I~xMNlK$cy;CwQp zPYjfkNBElMH`e0b(?v?n^lQas9QzqiYO5dN=v?t-P1wjekG5D`UVn0D_%I5%I3N#T z{i@PmqH#X2tFTf$iotYNN(N>tcw+uHfgbR=H^JjKpVE+mh+2Sc5Qee!7n|$zKEja? zzl9XPhyV-fM~kL$^@N>&`Z~_n%2b4Ou~ai3h0G{a|H`9$8AX~r2upD|E@ew8{}A$y z7ur#@Y_j7??8nmH>*I3Q#P`)uQ-+g*k+aj%%mXA+A6KeOCg+E1?)eiYy?Gp*M^YI1 z*r>C)OAH-Dq|ZH)zsgq(9(_mC=QVo>e7(-TLmw6V+QbnOIUsl{R6mFm6`PlK8U96S zb*ZrL{p13raZ9Pj;Cm*Ay-&x9VSde4oAleYJ%=ZN)ATB#YyeVQb&+0U<7|2@1lyqeOaUL&r@tA8Xqqb<&MI3vrLcgg%%W__HrRFibd!^3C{Y?YMlNJ z*Sp*#7?WS{xu7o!qZ28l@MnY=wG=TD{380J`+b9v4w0gKhZF13vp`+0+iDM56EEo`Z~tL3AttV)hnUd}^lcS0Dt>C0A{d?t z>Z>yRtLQK?9k8^pmI$~%QjqtHtfVRu4(IEUE9X^xkyJdY#0{c4c#)oJ?zvA>{Ie+ z-k-Sz4chz@bf378@XGg7f6Gc|cJk^r?Q)0#&>oiu^$b0X5*f_i6!6u-*;+oI-J1k; zwONv?UfO>b1T3k;fTfPHqzpvI?i`AR^Wt}A%6TzzBB4Q(H0$gFUr|__ZCUx66!8* zT#{3|*c<;lSdp~_-mpT$gP{@jR)GCIlN;&tIjQ|T#-Z+IQSC);p#8?X1#OMtpy*SP z;OiHiL1P@?0UTsvy`ncP3gp4cuW~LGhS zxHx||?O@i9cTr4jcQO-*#+piXVWlTsR6lIJyR$})%|xZbd=8hrAfIw)MGexnLnicd zs-y8k6+*+eNeVCEz3dyWV4w3vw}+7WPF>L(RN->hGa^TY<`LRO1tBqqR18Y{`cnq;v9B4?S6|M1UnCz zrxv$PJMM7IVbguRyfcoIuTJ|R_3f_&E3ED&WN|Bihh4bm+Op7r&*M*1H%zS#8eEXL z8d%PzZ?pebpwPfv+Wj1U{4`}GlN)-IbRg*EqD$-c{eNW(1gQSK zb>Q~cnGpt95{&p1Y~zB@<{;0slvr#1oj3aNZ)Xr zR^Dszu(61oHaiE2&m-{E=q+x;MwDdAP+!rw1~1W3Bm65;c<25Z}YkzmEvp z48jcSQz1OOYb>1Uhjc)hu=T|xF;t~fO{}^1-IfA4il~N@FUydU3&(44`iFpLk*)B zUfOjK#X}c+`=x5a;4TCjk@RP_3c%F{M{SZ>Yh**Hxo~M8{=HL5HTef9HQBZWTI2d& z0brhS(3%mpSRcZ6S(3E5&n)+z#de0Fw<}J} z!KC6RSITPG@OH$xs4Rj-WG@8Q%|6a`V@etcT(Z_c1(A%Zm1^7BA*ht|ZsC!=u}(!799ek z;@s+jSm9S!pJrF_TJ#5I67oOf`L&=C=sT4#xtyB&H5j?^diZ3p4xZFo<{Y;!h%dV| z^3e+yE2O!p4uTD9qj*=Ac+1eqaLL~8eNAp(eBe8Kh`PtN_%!QY2f#zI?|HWY1o0oi zjKAc???td*F>zzrf#WyiQdvX$_nY$X;4CdHfjWzS?&PS!0Fz%D2h@mO8=d{{Nq(8_ zTK)qHH5&oZhd^yrT~--4_l8p6&>u1o=3CYxm`G03^mR1>?d3Yjj`>fSc3)xk^lzC) z43iHXrgSTv*#q1#MzughxN5cD>#P;A!0e3y*BiCRa|AZ%9iL&+0iqPt@r;=ttLulk z+OJ>7Kw0t^r})t4K>Ssme!jVHaJOr0ztCVzTWyUorHnbdB!(e$vSOaoz)$UYH% zD4@GSIE6WtQu2r^U$0tw!MjMfZL6N2PM;fcpC5K#+7@rbxm}TG&qhU*=7<}V^lWN@ z>VGI>{<;spph-@azq=c`zo+txQs*t3qJ4$u_Q6s@E%Oi_OJ?CFv)oX`c!b=@#$)v+ ze)WFPl-wanJ|5%kAkN1DR~xI`k1^%P_G5Kg;@me^HdL5&$;pb?xO#fYVM`|wEx-`( zDmhJAA4{9>G{~e{1V?`^fIj19@mw+izdIE(#!!dc+$1hl_Hm$I9DF(xNH-fcV|JT$ z=lc8Gm@JK*eD7og!8b~a1Ffq!{8U$*Efj9=Jd-d{zdG74UG7&r+u>B>ZP?e2V-J+i zu=vg%lkfb(S1r9}Qi@`okPWI6-fz+V;$Tlyr86TSNe@&VQj7+ypMPZ`WX^vK4eh;P zuxuQYU18i{GM}5F>HNcDk5ujYZBYDP>bvpcFLt1xAl(@KUn%65Mg|lF)xwU^EEfGQd1(Sb?C|gXpJ&XJ?5cU4GsLMi1z&Q3MD*)sF|6!>m4y8seo~h+k z6uyT7?ziw1b+;TsQ;K(80>}P@Y@Fp-whFpOkTkgYPo3yCvjj%#%plsUfftcs1LD6_ zgh5Uh>1lul?yFaO_D@JDal-Uz^{38oOTSNTWF58qMIPlD&$Sg``l zjQCpo;$oG!hHur0F3$qDl&GsvssCPL250?qEH${G)8>hxFFy{Bv>R-j?Pkqx<{R8A z{WTDyF2Vap7l`J~5zIJTw5h3|upYifCK>vM{whaEAkH`jtY>R6A0hDk3w9PA$NCBH z;%Xr-JD)iJKt;t>Q56n2Gj4s~9!XmUHWW=eTdzFG-TlkH2rFrVZWdjX7(6isWz_*G zxk31vUOH!Jdq>Bva`ma95IPo)Gz20hO&h&Zq{<-0`M~Ho_5!FvpqKGJdcI%yT)XVh zK5zImya16iyinDnq-NR;di!c2Y{Hn1%=#_e&!4bg=K5t}++zD_NIid2N4t_zS#aTi zn%^VgIVt^l{jH3X4~?SH>&kj{Vfh#s`P6av?#neO&RcZ;3E@~8suYI27(Gj(O;aIy z8t>5RS8aw4I>~1NSeUvv^56Eu&hfRY3qCRg}(7m05cP6gfgb1L2 zv=2@?0+gv-3%ngd&Lj=~(x@7EVCva!<}Ya8XT9=lrGYc54y_+V0LUA%?_e0Vk(|xG zUL9<@DEErnB!|fL=~w1TYuYy;lIxh<*yu5#f)BY%gIcOJXjR!3si=#Yo?ep-6yRCk zB|FC}7Pu!L6q;166Pu+Z`%I~#jD2OaBK0H+VGFER8<;bc?=25bL;O)P91~Tn(B#Ig z*O&JbKij{h>N|ZzAHJhOUm%^OrbG!L&$TUf}HHONL@Q5#zI!8 zg;dSYV^PcEH90LNl`}2MmE*n!AgtPOpDdjj=c1$A5=?wba^pr{8nt3;Sm=S+=eyp( z*V;af(jQK<6@?CnGg(!AkZqpI2#)qkFB5T=;{POTfCI`^ZF*Dt-<6{~Gt3mB_Q`^A zuH)q&+QgID<)rk#G5)#`oAE9RxD^W>F5uWPfCdW(C<&pvxMcrRFw(-9Qu@cnM0Jqu zd=tzL2XlHwudf$1+Y%c&n2T9r|Bv#XWH?yZs}x(G0_?&2SVVLfTYZOQA;{D3O2hgW z>X%1KKJ2^jfzT!@erruO|A*A|WJ~sQuoaASB_#}q6{(8%i#ZG5^3g9!;+kRtB|GGR#sx)EFFW+1f|kTRXxlGI`ZN{?cF zFgzmv+@DWyQ6H%Bd!f7Y+dgqFB5{mE6g8#tgKat6^ z@NpvN7eN_738Jyd_2$*w5_=UtAQbLnD(cq5(}{=uO3X|GgEyp&SNc+#!r)_?(bM{M zQtpG~%^n7}qtS;-@6|(B2cw<&_sxVWL5!wom(+2-$kq% z$_Ovv!U(4o9|oZlAAMVva8JA*Nt_E-!{cp9LKxa~yjC)m*{{~GNM78VK3g$yn~+!2 zE`oVCsl4aHF2K4MOHZ>A?*&U($ci%rf_babz#IFAbRcvke88`%++5Yr@~spkJ_Kz; z>drZ%hV(k(w|a9Ew~u~uWtPb9r?BoUn{HwzlQ(82r{6N|xmXhn0mIo6*qeqI`C>(p zM^|rPElJ1sN#^ekQ4SFdO}$ICmQP-6aIB0}8WEo!$yeUZIos+)?3i{3Yw1w)sW!~R zy^`g^Owp%9AnQ3v+R1pKept9HQ81{7kn00(vGtVpSnMKM2ieW*$(hq=RfqcoHW(uw2E zFV|vLiBk^=6Y4as=%=at3ve+aWSAc-G)lW=8xJ+~?cb}t!IR&pK8yI0jwSq#Xpu6| zK|&(mC4k`u{_tw0C?LRane}jAqNnAn&HJgR$X-avmV|^aemc zA_eWlCSDM*IJm|_y(Vcq*N#$2Mxf?4lf@%&EKfu7?M{nBN)ph{Mt7*}8vfak-+G6Qj6%oYAF z#{zRbSER{_z^JFJMFvtb;XC?C=^5%`iIji$?U#|EmtHO9*2%PFL#;~n_5Q)^Qvxo0 zFWlP2e=dCB<+T-7__^+-?Ir7-OU|04Y7DH6d~>P{|EW2{($Fafz#7zI1(xtebDVT2 zGR=Kbq3uI6oaPMr<4oPfwk6-;4E&F79o0Yc+*mVUuCSaveDM$EQvM^{WT4ZpT8a{` zd-FyO-Uw>tdtr7_puhHTgfmN(JgzHO0=6ra0aewemWpdZ+8G`Yvidyy0Lu9o2! zr#+rByKQjSq3yf)#=ILSqpQ7fiK1%~Po*b?u?1Vw=uu1m+vY-;LOp{KGoea?b^`ry zVHx&j-GOJtv3=F+@VQpxPml%V2^cE@SdcKc=?)qL@);FEglkfG-VF;oh3SjZM8m=P zyX!mdBg&DYKzf5ks7UB>woj(0d^!MJCq92%QYis4;CN&deQKv0y zhZkrL3$fl5DI}pG6*98~&qz~v_P%(6EKZZy*QCE`Ir5zF%@G0|V;kBDIS3$bJPcCy zctZ^qrg6Be%OQv)WLC+Z#(7<#5%=gBqnO>}pd$W-?-38$@_pwuRoMOD&);#th|5Eg zw1s8Ks9N+LDGV`F`Ar}CQ0{?!VPirA*M#;B{K_hTx`(dV^WqQtXb2~~4Kg?P%;~0m z`lYkscaD}Op!9Xn7oesNRq2zEI8`T)2u~2QzlKV>*lLlXFxeXFZiB6<3af zF}xK*J>Qga4Yx{d?=DZ0$kPKb?|+J}ZE5MnItyOJa3x}z7iD2Zf0Axe?19m`PLR%` zj1Pi7N8;ENBdVc6yG@$vYn9e{87JNY^S_f+5QXohiub;pk+nsR=Qq8NJ4>5)44ZCd z>A<#1EYv$wWdbIfpfx7(NTrE_HQKDmcx8luv#Ah4YwRgg(Ty#v8VYA(W1*Hlx!V#6 zL@9Y!)Dt_hd5-B1N}cqbS1htc1mBc<^eB#M51-eC8cdQ11{WC%K6GBfq6?x&MDvb@ zri>1Ys;dwn6h(41v+qcAnialD+>cU`QRl9gtZ|DuLlz(3zUKr64 z96KQWTxEt9^=D{DtG`g$UdP?e>ZGwD)o*TJ>Yn#C<%g3Uss!mU+oiJG`Pn7=QgUzk zCUm`BS2pbepG-4IeR=)JP#SDIiN+pzJzHXagSn&jG26TlQ)B!}r?Wd8Z5su3W3l zta5)Vp;lp-%fr9J%!ST0r5zN2SF+hlmvA{mnQrypxz9K&iBloeDGA62wBbxaueF((Nzy*n%DSAI)%Z(mjfeQ2Qw0VPuD4BUzISKTG8Ov~RyrrTa6ka|`=nJwC zmub2q0#H+GR*PAc{-+x2GJ6?*A}KU6T1iQ*l`L*ME*UiJJ-fMOw9M0FgWd56GOn=VrFa0_W>eL)A0NpUTfsQxcA7U|^uAt=(zT z{w~Ux$Kgb9S*}+}c!T?Ug5@dJlo~;C{2Xfmoa6#PMc}x14F@wDbvEo%gDdoJzZm#l z%{5rhF*Cdq{hs;8yFpLB4`=V~wiF_<`ELbJ(NBc~7NX{%KPM}Y@9i=Mm2}|aaOtXs ziQ#z35s(NZs4YclMKRE^DRPq%WQcKlEx&wC=*N`4rE2g6R?O=veYRQtdcd}>U9k(C zb-`v!qHrego;xY<$97kU$AD860&{HPISI)7eF)!&|{J?GYYM zHjs?@N(F;~e4o!DnLC)Yhl#LP;o;MJYBH;#s2e1TX^UPe5qJG zd@U}hN2GZusWV}&H25jW^0ZKuE_nvMT39VHq9~dbvwEd9(^t>$rH^9~wHE1po9qK6 zOX8*x_FvzX%t>1%B#?|HRgISv-AIX_q=AO9*y}B&$HQnCDzh3;2d<39dr~)Ux5l)A zW$Hdn*Nbm4(3QgVxD}>}4TWmF;qRFQdnr<;0Wm8tK+WbK_v8|O`1T7dpTh`D%)q9(;$#b#D0Kb|`J!+G*yC>p<@ zIx7;iPTdqYqyBLPKXGWNlq}hSvQLFZ6d~^r-in!!yY`kwSt2#5O`#wvI(&s7rj$T2 zJXzanpv=;q-f2I2gVm$;5OLk^AoV`i}yekJ`{&R%7XH&W^&DlX1#m&9k3= zlNAKVK1LkChm$>>`+y~|2ozw5uvr`borJzfB1ux9dO7o6Bkv02uQ&j6=>Ll#_d+cN z;7`PiXA$pRXbUZ;oYPbL(^lPbuVoEFahM?(T2WU==tiQ2rlcmiSW}YCUgU;NTJ96h z>j`(H2GbQsI;`-R0Lqytc@@N~wZrSD&$*|TV7l(-Txh115C?GUO%AukPPU81&UpH6 zTM$pIt5G;9oDBb`5l&Tdlwg>AQARA_1c{kMkd^dg2!$d}R|Kej5HcZlzYwK_he z={rXl0EbZ+F`AEWW!)z~_$a4peeA}27e3=R?_|Q|&JW7{*L*K}Ag=Qi$cfG~sR^}5 zIo|H6wzO<|_u^9=7uYCmSolQR9I6a8^6i9_`>54*G)n*c;sLpU*$KtdEQUkO=hHVB z`ne|(6zR*S*n3KmgQrRqIf#dpR;8lTB(SuP>oxru%0Hj=q3_0^6Q6QN{CpI@1b`2p zMPkA7Xdi0)5b~|mLAjsI@!#e;;vFqeqVl-0kkPYNJ>K6emjJt&JDCm*zTP(|qh*eh zGtjTe>MU-^^&0KJ7VKBu<

    l!flF;LJcdW3gm~z;kJi-Ty8wt*-9-P&Pu%#Xt7&k zs807=PwF19Y*0bxCGbXhOD|; z<(F*-shMMtfaZ}W5}EHuRVCy65Zs!65rl0yW&|_OJX~tq`+Z7wS6Qq&1xEXgbU*nt zlY;8zdq2xFe`Zq2IqnsGkX#2};>R%+1C?l(;S7e78-c?+z`X z6LwujW4J+8mE~&T%Zz%B_ym1qMz;M+tPh=1@d+d_fIH~GpW_Qr%;DwP@5xT~7>Ab` z-Yrwy^JrA<(t)yvAwFxT#kk&-`pK&wqSocJ4SNkj zhqUr(Qu5yer6mcn~dRs4ZJBv(Wt*)LWl^rW!2ClZg)jhI$eiidT;yI#_D#r92z4*0WE8G7v0?KS z46RVk!TXheLjUi}RvOIZCbD#Y494e=z@osV6moPooXml0Z>};W9umBGfGHRt9vmzA zg9l_L#fZ^;V_ijPMW@Ad!xN7Fc?a+^NCLlSiaRYx+V28GJBMzw+IkG>n6ba55mo(+ z^rjZ>Qg3@u$h&hPx<^J%6 z19Hg1Pmj)D#v*;Tyx!=#+81^uel~Am^F27qmRS@qg++m(mC8Z_Mu&`|oqVFxZA`Jd zsqsaD;E&55f-yAvQ1Qw6nDi*Wt|4>T0S@?qNCBMC?+*{dcvfc{i+Xj1~%N-R5FxXLIbJqJ*%AZtK=fJT1tzC&9zaAvo) zs|Vo%&9}?WVw>mhGQ~+NO#fG^dmCFqE>IdicloUJc? z{AezIcEe)yLnjcRR?!GGCBpQc(_l|hJz5@}oYb5AkRD`n3;h8GQ;6otv^WY+|BNBB zni>g!H=oV!!V@9J(&`8Rr~Byq$n;}Xn+Fpf|7ipGYxfs`Y}SIIcX|7DeP#WG&(0fe zzy}B83R-$?h=fXkQ3B(qAxz9u7qVpsSKL#)7SvF~Ja?yX$NlQ5m+*w(Z~06v^GF+L zN#s8uVJ^luE?Dq>a2Z?P38K<9sm2qoY=sYBnYx&RYN1kn7$&oulHAK%=5?ffvZ74= z?N*r7*Rg-vyro-hb0IxVhTf-D(C;K2@e;<>rngT85e^iZ*6=zak5l4L4?OwsfCQXs zF#aToF6k%{Bl#$L(jNQJvmH$clgg3b%4abtu)5gCQswTw&#;D%bQ#AJS)SqE_&_p% zy~xlv!nHi)A&YrFit46iz2Q?*bmQ`cSN-L5wm-<{Tb?V( zmzo#|b7#rV_WC2Jnv^#xSj7Fi-@Gj8Oltr;JW=W%G||e+fog`M6vJazwl!z6?Yw!# zcveMTmGNg*mz#mNQXIcN?pEWv$qqbAaoH=wWpH(T-SvFasxS5h)fu<~G6+?Aq zTk40UvD}3Md45Me)<;ORE_WRx1wqSB@fQ7=C7EtrdQ+GptXxQLE9&PxcXIVT*FSaJ z944&LrgD0ICZAhpyi}twgj;GHJVPH_AF*j|8=kW-nto=9Sp4f}@u+;c_Fa9W#bap6 zF!S+`AA)U{mwpf8KxR=|4(I!uZ2rk8K5G6?f+jz|pycXIEXor{naIrvL23(E7M9kRpUl*N@yv(iZwA_J#fzP~&1I62#m5xw>izta zs|$)0xs_kQc6U6RyRO4fF(PH2wW!ZrE)5Xj{5%uNgO=c8k$ntl9S~EFg>Tvt|1hoM z>6!k+7!B-d6X+{lWXzX=^lJ2WM^s+$jT(Lv9rST({?ySN7W0j zck9b6=jO_h5@{I&#)XQC;jaPkh2nj!Jn>>0;jJ;rK8P5b;ofZB#&@EQV&o`o!{qb$ zj}9Mp4i=BSu!ltQYX&ybC_U!`z8c}|B-5nFM;f+&wEzrBlin(LP8506QMI=vX9tNSL?>E^W)QrUn>(+K@x6kIqL!>jB4%XEJnq~C^Ig6H$g>x_z zHeBI&jSfZtvD+|tIzxSF|yp^DEyu=HR3$hBJ^b=A{K_t4|WG(mg z+(W!_+tD4CWVb8I{VEwRD>|KZ=XsQNz`cZRJWYP!?m;m|$|tu)phVIOE9kEw0IBf6 zuGiGprMgiGNOQK8TA0SEN5nr+8f;DqLw0qW{HCcZrBS|wR$p8qFv4s}A%GW0KAqQu zidwg#Mtz2ds6<)||1}j~yZFxe0H%NVCL!r-pW0Mg>T*5WSUYJZs+|cO7r-hfI>uphcV^@pFKiL7>kMrvs z6*`ez#Exd?-yHH%09`0R_cI_xH-ft?=4YOjOnss!;AArJB5(eAlWG26UM7&l#K*cx z5P|Y&oe{`Pda(%?|9Q+H=HK#Y5o42YR0%o$t?2YalQ<22e%Et54D6xQfn;jB5fSD7 zv#(C?tAA1$LM05O5=|kFG(P03M=E03>_EWbjPKstr%b6lZBqDkNtf!Nanf~o&e}G znl%S1Cec`BW4dz=YJ3OXk;>`cQ9>Q>@r&ecz=`XzP+o*SH+6H{E?NHw+bGaI8Gy-x z;jhA+w7N?``qK}`L^)))+^`&tt5^kJl*<%frxF|ChH;6{_}Kskju*jVhBP@eF@auN zMZ4>(e<4Qq{u^T}XL$|!It9v|Uv)fh(eVBCzFxX6o|#;6yB`rfcONY6A+o~yfFsOB z7$gT>(0Y@IEenP(vQl`=$K$p?-va)@6c0ZUuS0p-y2YmZ``?SOcy37jY)aLNd#_Q$D?wkoEpBMbJC zFO@K0Q_a(f^t`Bv58-TAhC$)J_Ed}yy*B3odl2@%hQg@|^Za5%;D^_=gf7%L@?P(? ztMJB8Zc_Y;CHueDIQG9P z1+x@CO|9oY_e9lAJLG@fx@sQCp8G|%c9O19>M+RXwBZ`Bek& zENtvlywsA2((G{14Nay)Q2?%6FDbF2nfq2;Ik!fytp;TgA*wrGz6YO(vWTw_S!r8d z&dt&{Qt-Dh;^6Dc*T7ico|ZqejzcMKMJykJxmBcOiUnK0fs2I+B0wT|C-$|10IPU| z=BIH6%Ov-(K`bChZq6^gb5}k;8E3B7xg>Rwa|c)V*}#iw3L}xAbQFcG#;#VFFNxq1 zzZgvk1uj3+n<{E`eE&n>t$b6wlxVk3qVR%)YW7<cpruyBH z?vrcygC`V5c=`Y9G0>fHEUy5x2}npHe-qLl_h1+fO?ZTPfcVP#hJsUcn(z=G`xfKn znUr{+xKY5jW&7E@Uq=48n*6+TrQnZww%#ZVd;*7mK`Vi$p!q0l=Tgena{j*cyv9QZ zGMj!q%)-&AHX*d^{B8q>nfYyQif2+r?eO{PQmzM4j`)}roAC}~uy|zFtJDnG<)Y(J z>^X~X8+RjVH4;~x;y|4z7z1;e2~=3bCJ37)Kwh&}A3{upLiT3|rbD>DMo3%C{ENlo z36<%Cln}3vYs>W-c`2b7MaKjkYp~Iw2$KZlkii>Ya02k?0z3Yo$)J2GhR@CFeHyAp z;VmdB(Z#YT$FwgLW2fhI!ho6;E}RH>BcgZ`O$_%#C%MXe;9k_3*Y*OgJ%G zSFj>q=|+Y|$seZ_`Pce^kN$#=WaT9l)l;VZkSY@zxWPGIG%=DHrXser0HXk1;Qd)YE{0jR+uaL3jxzzc&vm9X9bK9+LEs*=KPv%P;M=<160j9<+ znP!1(HgFR!zV9uHq0I=rax(l-$uG+3sT@Wpq93P20gWCK3&8gJ(w8rmH-Ns`{^kf` zdgZ)9#$^^h&}w>*fmkvSOLn+hg1e#sRkhOMR(jfLv%u~`s9H`TCDY%;P?5B#baDk86j)h zSz1i3+TVl%b(fA{&pd?qBkIwXi@Wf+O6LU+}fwO z=!)|1kdJSEA)`nDeNm-pVlTkOY(JsQ-6Np_4suR2%mbc0M=ZieGxUlAoxwG$%G&s2 zXhsmrxCo}#rdk8o^x@CwtL(>?t5WCAERlOz=5pCi6_4*WRYwu!?$1GSi`P4bB%B`u z>xT>K3MDX&Covbrn;l@3R52%ShG00!6w{u2gxYi+q*a-!>hrY6j}J^;hn!}_RNWf+ zmv!rKe}Y$d1vEPMiX3#z4R&Oh7d$-BH8$o-ry=$DU(}gEySRqdzRvJ-#}db4Mr<=E z3mSJab-2=Es+40#RM1e_a0iUWYAd|;rCE|r7wY#YqC;zYAi+ER?@xrs3YDVs7|kUF z_=L#UtP3r&S8Sd{VwFpPACTMos2=}Ti}FTU?CW=UR_mq|oa7vR#btkG zcv!vMVKHkASK7J2Cksr%{F86byRqN{r38-)1GwbFuHyM2{08OS18bXx;R4~z*Ir-7 z_)KaPGSw~Mzhsrf>8Mp8qCh>l*XtEhZi~}3x0f5VK(A{un+!DiBE`?ji9G!;&<*re zX9dds)q*gO&v<_X9c|ODqC5Ye6_qJt9UoAOp}s?OAid<9ZjXloAv*BAAO25!M=64r z7pEX&DiFO3CsT4?lJUII>RYtx^Eh!FtE6x8gTT-%&F8Y6+vbVsqXri&qxlof@0BKo zoc6jNhIETSSvA+~j;cXTi0T76kmY>-MWKFU!P1TmOh>*2u&EbteybFy#G(U) zewBTGaNQU38sN+PKZLz?RMdOh_B{+BrGS)3cb6hvgQyH5-Hnn%Hz+lTf}(Uc$j}W# z_eMIU8>G93j`xRq@B6y1=Xut8|B|&_OTo4L&Uqfk=R6MUZb{gc(AI1I@x%S_zelm* zCu5(%166-NS&j0)$&+s%`y(i}LHJORR;U=Y74*eEq*y;Zr|lc4_L)e^Yuc*5chYFp z;ZDCx2!w8ff*i(rSnAwyt=7#|8=CzW7l~*Kz*Flx8jK6g&sW``F`gu}k^AM(NW{pS zLu+{2q!Z$D2A+U^fRc8VyB)zK4)qKM_XE(-!P%un`U{+jY0H?}5iaGlTYgHg*a&|T z#kUCJg$i{ZO*3tOdF4fMUP@dKKuT( zE?+{uB7B;AX>ZRu+}cRBJTw7rd0BbYzrn_oJ=YEk6#jtW7 z2#X>tin^JVj%5Qq#b?0}Yx|DH+?gnCJ;l12sd3Kk@NU6;%FswDr zo%QM10ot&y`^k6>ZCI0CB4jF-ou?~posOvOk5>E2&yUu`;=0c}8TTL?>-DetTSCPT zzW{cwf04vS(i4*aZtarh`9K2N-J(LOj+&a?vn0{j<*-Q&%t!7f?u%?w3N)|j@tl*bgTF#osgls+)RBVJSCeL7B@~xCDbWE0uJ6~O@ zsCP>28BAH(t_n2xL)DfuT|&L~gP+joxbjC&(J3TXSf%>)@H@X!k)2{6qo#%azkbk1 zK#L0VY?=Ghh_EVz>^qhc`pq6*aOgQfFCmTa%Qa{H@E9_jo`gZ6Gn-N7He zypvtOUk@8(Ew=HP`HzHe?{kz$E#3em9vkf5eeL$^U6)$eFpFN3 zPeTXV1nzg7oUi5V5CO=#*!;PoJC=gbs^0Nz^+s0Ww&(n1N+HncDtYyrU>bPJR^YnD zUWKKUW)BH4l_uS419s~GZFD1PR){Q@MZ%#gBkU&M=L;Wf|39Fz&GnK7l-Qz zg3ZSbM_`;#-=Akxvbn;+JbdF<5PiyW z4(%?ZdGKv2?-nM~P#zJe;4yg0|2e~!+H+`aK^x_aVd&Pw9u;$(W+--=C{b%#BXKtI znlm>{%v>k<`!fwKH`GSvP3S`Z$LA8{G6WNy&ttl`ue?}tY*FR=BAL>AUL!SSNNeLd zEr*PmmyYKcR|vxm%_c;-ylZgt;PaYTZ~>8C>eR)YonM&KAs11vHpkl8Uq1@w|9WCD zYgPAIaJ4=)QsR^U@WFnl;i%qm(-+z>67HD_4bd9>sc_M11acx0no3xua`AGBvO`b7 zHn^kIdRlWjEAZYv$Ui9PDT-1aBX;+Z%hX%aXaTTI;FrFF$|4%+nr^*RDhP9NKWD?6 z5{qI*gqOM&+s?H?rTe(~O1@4=77&jx)QXWqHo8^bEi>D(=p>U<4Aws4VVOV;hY>Rr-iNM^R41b71 zZ7C<8ebXs%rXXQq_YY+=?ZI)F!A_r`k9M#^s_>j*f@FVtp8O6Pv{IhHN4a)HUX96$ zav7?dw)Glkm{ZK6@~HHhl5V4Pl>Z&x-%H`0JE%;TN(vR)54kx}QHpGAI=uvDr?s+g z$Un0a-vlZ2G#<=Ez0G_+GnBfk^-%u*v58(xe0o;dsvixKb2Sox44pXvi>U6uuNW;a zu!!z3KYUE^&mu~OYufbG>tZoH<94vO?M@T3T#fs%{{;}_*N`Ug^2 zRq+##MTm2Tsgt@WE`a-Wni2YhD`uG=8#xMr88sv@5F^4(_=T>N=@%K59os_u!QW>% z!kPZ!_*6NT*yIHaii?{MJtpYCfZ)iiEKR!Sx%O-NyV!Z&ej<1ne4wvHv{LK1F5*R6 zKhY*2_3#V~isbuVn3la%8u6V<&5t=&FohY=ughG@`rcxTgvGFj3WtO9pQ;$CSVbwo z#@|EH2{+W>asrl!p5ZKSVOmEsSeH~7$t;wTS29x5hpzm7T8AfC&W~+=KR`$r1CTpj zn2Hk#$3Wt$BkdLsKmJ`1<|f)SD4$)igQ%Cur<` z9FD6PP8cuRa7fsYjg52g=e#w`MDBAh5;Nsj#&XYYfs(A@WKl<&L ztMr}es)4&L6^qAlf2Pj8IC}%n=VJ*Bi*3egxLggwwZr-|U z5(#{nt&nIg9OOhzM1Y@ZV+0@r*+)@oijLZ(gk;T8_2{@uE*E#rq{5B$1v9$3dQ=RU z7?^Hem(%lhcYTP~kU0m9HffS^O-Mh1_qt4gHT%XQ#q&hqo4GtkGZ_G?4c%Wc+v?MT z@_bL-eb-=~x0myKbUahe66q3Q9AO(x*V9dtSHr8*qee|r&^ljx%nheP4Ndh;&-f$f z@Ki5Mxm+Qr5bO==A;seT%N={)X`ZGlr>2xU9$5JMcggJ@cm6-xgEOXO^3YbUEc#Vu z+Q3{$>F)kqUfoq^t2gfau#|HYi|XarHa}f%eHS&;EPcPj`IN!Q`cjYWXuyu3xmV;$ z5NAP+f%iSMZyw547Zv(a=ZeFrol}axK2O#}hcLnhY1og48$~C)!6X z=pW)bq-)g3>dU&ktq#OwsR5r@MVOk;iZ}CphJ^KiaS- z&27vDG>D))D^%YFscb9_5L_xrv-`v8M&0xI>`QO?4>?Pt`}vJoo`}YT3%z4>kRY0t zwRN7&*!JVs{ui=~{6Yn@_M9=r`xgz!7hx8#aH`h?y4h4R&R`on`B9!Ip=xu9pz`u; z4c&YrmS8-**M&xKn2|-@=y()f&NlLawdTanC(%~U3H1XpJsR2;_L;Wxj?H7XlV%1^ zM%+@F@Bx6;JiV-BgW=}57YNbq8>Oh?_}#E8wuT2_V&%_V7vrezs#kRG~sv+ zA;Y)&sbhF!67^{&BCoa@Y*x58jq~;Of8BT2DwO3lgm*_d}TO5B6);K)(NMCi*yxbDU^HSQ2mymolt>Qv8Ry zN{2{tEL?jse?N#LIotNuMjZ_c-&^AQ{eKAjOL7}N%}PFp#CJf}B0+}NY2CbScCuT7 z6#Qw0Ovj?vLs=gVNGjtj9w4Pj^{}au{^zgom-X{Is$REvl0r8Pg`k-$?znr-TLlpx$ss zg1a30XW8saJ@imyf8S1*o9Dq{$I{|Vzb})QU#_<0vw>6iTL0mnXpN;!WB?Gb$+YCp@cK z49%0My0kzcC5uZD^dKo8x9~;Lr{*7s;A_Vw2E{b3na7?O&cCy!Sm0ZOE&h#-@+`i)=yE>X%>_eB!j$iZ_$!mN&yv*O6lOH+PkQ zVu|2nBKV7WpxaY~?xOLuVIWl2y8nUrMJHqE1b5ZUA`CS2bCe|RFs-QXZtul^p8}*^ zoqSdD`ioW3!JDXhOjsyv{Vu|vw-_Kq{S7r4WkZg=&(OngxN4!hDOyI}6&(jbTJ?X; z2V&o_JZQRF;hjYzg#rU(Jbpe{LQ_-o;yoO8d#rRjvQ!VG(SJWC+ymMRyuiQjfKx1G zseL~J;pJ|+XXlLj*R2LFK+7NvFCqIuS+e#0alI2XO~VpnKi}KIWN#>Xr0m>5i2Ipj zbz+L^n2wJvS|qx&GY|OS{M3j~UGiS{w=1gLTYO&uxa}=4hK?3hFXFlft>~hgXWgJN z1>doU1Bz(6RU_@WPYzEmbDvOS3i-*EON{vBQjgG5v}e>EO-E4_O(r>oz~pA6!mfb|90=G0(gYg>u4)IN2V z^$I16J37CyFX}TtcfEP*Qd=i_&4J3p(C&Vy7O0`6HPxw-Ve^INOUbQq{!9^pb|Pd5 zfLr!@9twF24Jpjy(h+%wznY~FRB)U@gmyMQklC``m1mjSf4C`x!(?!38Y^*gw&cSF z<069SXwY|-6?eGpP1;j`gnZ+8rLCjjzy0D{VMColf8O!Z$T*Sk8rRk`q*u;=T%;N~r%Xa4MDKWkf) zf)DVKYBQNZUy+WI1K;OD0SWGS!kXgAe=VWKxClxQ^p1nGq;~wr_Vj#}59wfyG4BwZ ze@udwT!>&}l!W$Ez{=DK=wKKHAPaW@viQJ75-j}35%@FwEwmLtYGqT}-MnZLcblFX z?E>lg2Z2@l4qmIQ2ZY|MTYRA_pNZmFAq%@URSUnsvxz+Hsz&?})p2G(5#)XK&y=UO zhY7uSS5Lt(@XxL~p!o+%{dp8<&hrOJ%|4j7u_|~c_wWgt2A<@rUaFo|O+6;fh4!8~ zGcz@dDbC{h8AXXxo1RhiM3ymYNw%X+fxXD3x(cbiH^$r}Hrjn{BQ}b+*%dU;hSi#I zkh81-PxrKF-^23ft_E!e&M1NZ2DfT|gRM#$_cjjs@5$vRX{eo8DQBwhCbfNJbfj&A zk-*cSaCSPgT&h%2%;4QeVU>=p_iC{1)IX<4+o^9itIguO;^K}5H{VZ5yXfOssNy^gd@QwXc2bv zm3=K005dDHAH=UED_ghM@riA5vHpHU_&s>T0Wk#t+81I(a2UG3)|isRx^&jhrmC(L zt@Cq9BG;69B|)XgpT-q$ZAqTzJXUQo_K#~Cn(DQW9^)1MD(3zB z#`3rnl+hwR!hP|DHAGc%i3|t&0q6*t%8WJKR9=c=R|^4jdC=p@N7PW0Al|mFTI8J2 z>Ll%g45aaHOKt?Hv&Tv`_ee0~Rua%GF$_)lNXd_e!GeC&Xdzwv9~`}Z&*83rO=n3q>JTjwtJB1mt&W-Vo_ zc?Gx?rCL~~cSut?gh>#x%%x^*X}K#55|T3c<~#r8{Nrv`2bmg zPUfCPY%4M;Rorn_&D<*$8e2;+I1H%XxKp>n24mF>Ja(2KXXJ*H>xdO8>jyv~BY zH(u_{Z6X5E5_UyDWom0eYTN|vX4Ve?&iT$0ZrF7#K00!|zro54Y3zyRJ^hM4Zsgm5 zwwU5OcP?mmB|QFRPkZ_;mg!;^SG~`E+~F3%{MP~=u?t0-nxeCi-}mIt!A#B%Gf=7 z_4a;KGOGE0`KYzq^lG6P6_LV$6U~J+saf9TC|10nYgsUbfpKD`xXC=nr`bBjR z7@zv$%||szPu5N3ZLi13YU;*x&%+*SD*rgqqGKmmqO&*4)EFynd}nclmd`=eIdL;eyVG zY}SM28bPGaD)x1i?l9jX$_D}aL+90!AzHxW>%mTW@L!LwFD{>ky9b~S&SuLM*1p~`EgmPh_X~i)dL470x4^P)I4u11&nJTNLR&Uu6D`}F zbv;a?WTHIr062giibr^R;$GWnetlICG;C7sF&_fjsdu1jWyO z*qLu=BTI2kPyVn86LcJU;pfsyy=bD0M;N-~SrcDS@YM0^qsS|mSWpxXc#usfK_shI zSBY9V<0B3y$|tm-o{qI!vb zT~p+1sW`{5tGh#ud7uECim5G}B>Tm! z29{(tjQRC>kEDd7DBBX_dr<4<`C2M(91PK#bwAI+NpvTMsk;jrxFuZRLXm5Y<)bBr^2F&D+C+5B6O6Y5=m~U{y@GyFOSW~^qIuu0x z6uM-FmZ28TX>sq54O`r84FmNnPazd!37kEP=H_Cm5 zuUK1e;UWT#6kpVLDy34RzRJTRsJPfljCPm3KjeH0h@Ab3#G50rR7;F4vagiYv@hcp zJB{}Wtndxr5gRPH4l1nA8^gtnT*b}R!%WRnf@jo;xkoT1`#aM*zLZEZw-re;S3nHQ z@KWRjZENtR+L{Dn-yf~fDiF3jz47^+Qlh@ill@aiMU!Do)i1m7a{IWZe0w?a75QBB zc9WeROvUW39$jpC{Y z$)Zx;LYw1n)V}_3$qo#P!v4?^OoHXMCj@{pk7LgxhKP*jS<=eo38-@m@-)2-%w0## z+%9sA`%<)4JX2 z&aOlRJ-aRSD$V^RkRI^@Riwb>f|I`fTak*sB3NXK}m2weW3fBq;)AxuWFhw467EwX-4p7YJ9e+Ox06o#=ejn%jTr|gXj7C z>?x>U^9Su1jqY=#_Oz$xvO}WUIjL${QsDRj4&VjT8ZeIi2dD!SJ{7cfHf;2c{h>J0 zCbXe5jOz&pz_um&{K-)V>qB1|zbjR^k24%`uE8=ODlh=N2rBHJXftToAnV^xF{$oB z^9sibvfKr7m@{z)||AhreT1|xxkYP zhxhe0TlQ5tt>D%HD`uho#=ZM#Dh#&O0gKhT924|t;mfg<goHhF?Sed!m z+3EKi(M2e3{pDz}&nSJLd;Lsfc4H{3DnKkb0*6p2moX8df3{hKn zcjzx;WvftV90yh+5ISiBf*L)j;HjX(<-n~>z%&{pE{QVR1Wb(D+e6;l!!MWC6xA#e zT?f(Pc9Ugo13k5&Kw+p`zsTAI4r|iF`CPbIVn>__(1smZN@s4qa}02wY3Sb7E^FuDu*OKl6()U?Hzk)!8faL? zI9gMY(Z5`nHKizd9~FsfQC%F6e`&>*j>BZQ(T(Di#&7xAmkLgehOzDp>#4x`2H zNBXhE{1T$kQw^Cd3`?>+d)Br7F}r$$!XJoc-P662&5vY>W6%CFSD>|Jq~Ne^E6c1j zJ^!#_U`;*C41WHtKo7-Pgb?lRAr1Z(gjZ;=V_QCiQ(&Z_33~~ayTk}^%h{Q9UWZ3_ z)4ML`l#bOKd3VfWMM>>sTpi=S+97d~H{xg2ngsi02qVelodurX7?Vs6Yu@APS5T7<@M}qjEIkU zq6plQ?RZB24pv~t_Hqf<{$HaWNvAC4(1UuvB~RG>7$0kjRAVZ@+V$dUfvWvc4E?px zXlZ}N$-xo+Rrf<*c4N)u-w!+1W}|TY4|LP~O$Y67pT$ElAr!c79X|W{bEapr1a+(b+8zBy)EzHX?xVgm-;nQU1)hftMM^NSofw|1TheG8B%Gl%Y5I z7lD3M0nSZLo_n}N(5L^$R5ov{#|nk`s=nyW9r+mg@Edy>u&ui+1-mVo?Uj|~^6vnp z+;-V1o|P+BrcYS|a?`@jmE~=v zXyFzIZ0kt-df+*3RwGTD2cBm&fyYSs0dl6y!;$5)cOnX|uHCb0_-evosuoLLm|U-! zaSLizyI5yROB7OZnoToag}PW4Njp#~KMn@r>*sEOZhpq&u_5d0{|XR%rtN*LoSzrL z7~S96h6QiFLHNtbtM4>8*<;|p72~BFejbQPQWXPx17%I4X{O)_l#k(ZlpO+!BF_n= zRaJCUcph~;(d2a?O|v^KGWf`v+Ig>YZ9-H%p2*)@mXDTx3#$lxD)W+3qZql4^B1;cC~tX$w8qXZHOX z^YFXTJdKl6pr#dHr}6fB?{uJbrJ&C4S~O5T-ZW5cEjK%5lj4VC5c+zg6B`f5m@Ckr zV1sqPEtyDb0?@r9Q!2Bvva;bRK>s;hX#t(Ejr-&$v62gUxU_Mj7z%~L58^SX9g$j! z=yoqJEmeUZQ}J3u6b?fN{|p>7 zs4GAVjt$Mc6I)hHT2L}J?XNO!0lQBwCtH7MAqUOgIp%^^BW#{WiSu4Bw2GuRK`v+< zD^y;g@I={A8b-c~1HSKitJA+Y6kOhn^TN7M!@5(wetTU0Ch(mYyqdqgp5G}b?-vD6 zuX#!`08yhi9AOo|5TT9e)rJ>noldyNSfF#NWfJHVt2SYn`bY*UA0N!b%@uQ*K{rGr zqJ7dGjg)Va5?eW(EIOU#zOG#NlihA)tA8fz!i)@h(U+#`ed4^um3!MNg2r3! z9MSJb$DTV(b3yPOy6KQ!z_nQhTgtPY`uQsl-P&fWh{n@n#eBN1X%b(ss*7EXpe@YV z+~8&UXw>n;SlZ!23*c3~Qm zBa^E;ST=wm<^~D#37s0jtzZ?d7#r8@IcRL*IOZcJnXB*&wVkhR)jgp`GPERTu9%JG z`6wq&(R6Q(z=my1TOFnwonv=~TA@>}3hF&AG$ly&OIlUKO3vGzO-lD%0&KP<&Zw+i z5)R9_$bHu6jEnm^@5?mD!QR+oxz__5t7fH13ehSxX*5H6`4iYjmw7Aeh`5<|P+hbRGS`q?@~>3^;1p}2fJFQH4E8~j@v)BJPKjlEbPs<90J z!i-dmm_x$v|2d59`{fyJjuwGG^!&T&KjY%v^9!7&(k2qp<*r6!K@)_=&6t=-JS6X? z%ct#qPQZR`@%3lTzZV}FcbsACFav=Fgr6o=@c!K`KL7Zx%vgUBOIZW zZ&7d`GllnWI>#&5_xr%*8)?-|OP^;Voy;D@vg{n2k_sLci(+(Wqe4B_n#GkyIDD-l zR-Iv@(jLqopLLvD|HMW^9~F4alzm;3bAj(4+Z-n%qPX&mJr#DwynCO+cxm6KIqMnC z=Uwsc8Vm~>!|Yjs_2HGs_%c=mDc;$-lTZPN!f`Q~_#ii(ao;BE&PA%ey_nlh=`W`i zj#v}MG?_x8S>MqWp*{-p8qI1_CS*{wtxZ6 z7pd39PO8P@4%Mi|{`^r1H=6a3-vgq0fH%b9=b?lZA(_mWYvB=g^IMl;AnG9l$)Om^t$#obMhvMO5GfUP6KCZoB$UyXK}kv zkXrh?H4vw4@~zbE`M~vA&+)S+d7j3fib<|N#KxTpS+FCJAO)goGDp(32gl{9*9HCv z-^(iBt&ptX;NTSV{=T0<71k>}?t2aRW{dB>sg?Y z9Q4f0=ozE$2&RbiCL&POn(vd#wX&k{&mX+5D|ehEV@MI~$EtCs65 z=c^*P(1fwUj&y>^2FT?H>Q7M*a>uNAN1x<*EuZDe4KpA5b2V?MmSnIE(X<3-KBbtQ zdspeQ;|8pck%iO446y?ofwGsF7ieVWKmbIwxk$3YH!fz6D0d}RKK9(#^yma~Iz>jx z-oA;^C%fgt<^q!+)hs4b+{)WHPbU*95^Xx>&^1{mhA(Pu)eXKXPz#M@;R#beK~A~Z z%+tsA`%pe{iz?Kuo3^X5_-ZU$6P{<(hR&-yt-Jlx5p@!Dw3;xXI9*ddNp|ZKe|__n z`y(Wut3pUhPhORXlL3w$Tu6_%Uvl)K)m2bqM)Eq>3PcI7lXAe zQ2f3^!LmT`an=+gfz;c4O^LUU8jj7Ju0~|AUA%%3Z#|4tA>(6n4AwEnp}bPYq2i^A z5bMBbb#>hueM4vO&tpHZJdcqyNTJ3>mqbB1hi%F7^yqG_Tq+$6H(RUcp2+z~>(gof z(83abD@Hubz%c^KEUbVLc3PAsr>)gyv=3?9Sh6`~>Wne>hcD1jnwTNp(@~xZT2FkM zvSjd!`O9{piSJoSh12Ghur+$IoD{t4EwWVpS&-LDBg(12^7dJb^<*HHoXZ zrj&_PaZny>R-S%yQ5dT|1{Bunw^FL##aKxs$jqv})Eds=$ zILV8oe?&)PWzI13$}IP%&d2?SYUP3s-n9hD?Y`ygWp~WtX*O^klJ~I`@WKQC_QFHU zJofc^NDZ{hXZ~XQl5}wpV?nW0<7g-77>CmWBM1-+DZpi z@%>c{rY(|c_B0ts5*RI=2uPW3D9@^f!ivrk6`8+1A5}S;=r+;QFV>o+82^sAJ=8r1 zE(|My%GSWqDe_iV&9RPeE}Qm{fxfqK$xQouKPOqIzdvThhEr}OfWlAMX{iDw5&qQ< z(Nw}4xa*|BaCtn8*uzQxL+tN~`U;fG#{#C%V3dn%=Ry8ldkFQCW41W4#Sq+8mSTjf z(gGFhac?du(?%G}v56d_`T|{fdwm@_ZFgDdy-1u|a_3s(n4 zN3-!qQ+xVbiYf4RjBeUAr`cN9JAk{I5q2-)#vd~D8|>sJx_mC=dn9xcQ&rzKhbnTf znP%-^+3}-y-1+H8vJ-g!@w*Cej60593p2{-X2ob5&okjwBB|8Qprgt0sV)yzISJqKu?PQ?jF}=5J_sW|KV)tIAxp#g-!ekjTxcXvLJt&v`G^%NgsJZuR$@poF zfOAtm4!Bf;?z{S)$G>D}cVe!t7qFxp+*SJnWmwM_FP6PrmBrA(Tj!Etto?rGh|jL* zO`hoZT|J@fv;bFYcJShdAtCO*iCSd3hDDAO;ZU~ECkn4D+3fi=(@04WG}Rx$vZ$i` z!$z)DYG6~LVivQ_Y)X{@YY2=M1fEzC)!|%s>Pzvt+{2B-jHSMMWtG9PjA>85v# zyG>_=a#tu!pH2{p*j3`-+EVG-We+6t2=!S75{(!6sD65v+xMZ%Mz5+yhi+qOY_b)d z&xHpz%v?1b$r@53-=DgoV^rx9T}WbFBfZZ=xKoGLKG({u*qhTn^(Dew> zjyrDGQDo?O)`GR|D1kIiy5L1xECaPMA0h>UmBoG_C6OM%GljHem>;xTs}D>HYgN6g z{*v5^x?DXmxGbp2ADX(fwn1Iko-D^Ce{}FHRQIk4;((}1uptzxEj`PVpO*h>56vr| z89B=nX54hbnHP2cgA`Ja za5JH>asovrJm@B0?#NOLM-+Of8hdZ9 z5$vN}-E=`gQ)@R~-Ol&PNZbDJj+%w$n!@FzU8oA}c=jQY5JMH8T9cbQaghi1g8Vn=^-u>pM1yzJGB ze;!oemwg5exTGL`@D3k<55eFF-l1X{Q!x^UfAPri1G&EQW^J=yKVC}m9-)eT8wTP{ zZx)+N55u1P=hgMP$m!W1d0eDa+}r#=N+536wmtE3?3BSgNsUPpO3cWE>fG9)6Mi+@zcKSE%n9qh90oL(kbvdnEsW z{`ziUbV8>QLhig_>Jj8St%>>#C=VW8AB0)?(7h^635%1I7M{A7KhSK|{Nou*!4f9) zbpn+S2|}k}r(jKZEV?ru50KP`PBLh31~qx+jf;JknD1O!zXX%Qyt2PeccT4ci0E?C zW|XR96k0f^hcX+Sp<8Pi$gQjnarl%J zPZ*skTK_!-8!Kcfq#wTyHKzAqTuGna5tSrpn_y%FM^u0JS>ZG~K>K7}+y@!*cj8hz z5Vh=DXt^gc365ACJD)q%5bSvHZx%qK7Qo0a>_&io0E=ny^%;d9``w{2tlDQW4@mz* zd~EwgvhK3n3HXAmZ+x+SqA|5SKmiHFh=v_o`*MI%x}|y2*~27RbJ2zR`8w!v3$5_yMnW>7lzby9+-{JdC#cr1$$ohuTXGjj%N_SzgXJUDh>~-(AS~ zspuOy>U#raHU^XnqtD3E&A$&fPt$7L6Au5unBaNNetUo0fv54dKD#TJ2TF4* zM}Y}V==e+`N4boPy{<+balJT#Vd>|-d!AdHIG-l#6S(ONmczTi48vV52M!`e{rNrC zUrL8Bc-Dlw>6Gg8<86n{@YgLv^EgIgimfYdtCtM7x=HoyRciF*HEz4ui5#AxAtuEv z(yF2`vF=mTv|$RMWwO7Vl!PFvH9wM*Ve@cp!b%&aH77;NJElMLiYehI0HY&@g`}0W zpncVErx|e%hb9FY728KC-g(iasOgZtE!(z3Gfl=$$KUVQCPKVt-NyH{CU+YGx0S8y zPS^7CyKPRQ9Nqfs55|Uutlhb5)r>a{x1y~#zJzDkw&SqoDCCAsdp6n5)_0BBYunov zatpo+Tb&VcE_h3B8=j;?Ym|XSDb8ha!Bdk|ISH+CGUCeKC~fV2vzmLd-l{b9!*dtq z_HHvuj>3zUF%CJXn|L}Mv664IhBmtN8CB`*n+Wf>D=q#2^|KscXsMZ^%b1`+i%Hfr zQZa6|3Zhz0o>RBah@S6zJ)HGmy0EV5Iez-i*r<^yakf%LDcIEP6^FapaO>j{ErYtb zlPaWcCe5>_>Xa0+>jERoQ2UdKC3)Mn+6R^8g~P9c$?ewqL?*M8R6QBtM`=Okk#tk| zZNuOSPY$woeEJfFo zoC%Xm!$_|PK^=H9arJn~c5Zt^Fst#WRdh_!lokz^O2NtQI%y_p2R$HTQoRUf`!5+& z4UjR#+ci`d__rQ6K~1>7H~b%We-H{*0zkRU5%E|`8wh71!u)^45;x*7WaAv^&OsME)cD%o9LF=S51$Exw(-{bPYzyrbFL_uE) z#_w?4OQ+yR`Wh=(K`@@(f*VYUT^+u7GC4M9P7Owl6&ta3bWLyn0%}}`zVRZD2E+ye zun~+!1=ryOc@X@hM`%azEBO4Kdt!~*wKG|6RAL>E9#C$cysU^=hun1Om8NOfIYl-f z2039(eTe2A3Up>a$Cg#)O{l++S;H8ND_g!eTl2lKxV*DnEV#vcSQHc1$446*F1Ong z?T~keCz5anKpvjB<8FGF6UK}@&Gbo|Y%B}{3o zC2Zr|N|k>V9v!9L)@vbwQ8JclIq423_rE){*#@puLcD>oO@Qv#S7O!+*KXr`9Y@y~ zVCJ1S%Zv|V4L{^6q=-)rw+kpt?Ka)|`2HRfv!4@him@0-;qLrUaSeRO*|R{Q9Deyt zSL)T*-#I~yoNpT%$D7Vk_S@-!v}Izu)vd*+@)-BfS|dV%fC&-0AQN_&2Y~7B5OQ@y z2qH1xT?4SU^_{sCY%(CZWh3@>73W4`nt?D7RsG{m5_KPRxj5d~MZBIYNj|<_eAMJ{ z_ND%JwdlK_*aNheXA4!0-*%{Xe5iP`{OQvOU<6?noNj2B)cuIO z)Zdo5q6ENuXvNtO0p7{)P_tB;fxeG>Id=L);>~lJ&N2Ehq(Yi;;tv}&CIeCPuEU*^ z#5&r_k3kfiY=tBRd4Y!5+7jT1T7Kr9W6hxflNfxla4?1HqqC>%-Kr~>`98wiYPl{r zOgquTN9o*x`Ho*U4{9`Ll{s@pm)RPArp%N~26WRSYgWP(Xe55}h+8ze<`W>7e+Ay} zICETLovO(zPh2UeIqvGKRJ>dQ>*n2PWWf80vjnFKzK&LUy64a4RhpjOkWmW0`>r7N zHcJC9^ohm}cH zn@sF;NDww-01eBRv|dn{O?jkZ(p%@XWSb1xQM}g@rd9I?VtS=MO$)!?jwN%JCs9et z=dbMMxhbmXRLvOTeQ?%P9kibYAuNwd59U|YwySA9SvQ*%l2;L# zrG$*k3MmbL&H6+Hns@4_6-^fU9#9zL zL}yaKZS(wx2QO8o3yuV!Z>|xlddI;>a>QSOi<~Qq#eFqS~Al+xW5M%JY(5*DLp@i?pB{I0>1S)|h4A0Q{q2}Y@}hv`kC<@%J$+>7u3mlb+#xG(Rczz7 znI`K3!wP0~^b!0+ryta@zWAh740%do>`x$R3CV%S-o+t5&@MwFMk;M) z-+gnjy}RA>iM*=aDmvP!wsU&0c=MH*4L{r7drOa+X=Q4y-YeAOH}(bK1{>j*s_LMZ z5lPLXFHX=^si&>)`JC3J&;V`CK(|a$MzuE&P*<_UVV8&Zi0AlNNI*aY6vW6|l({`1 z5c-PB|B^$Q%fAm)CItj@V)D;g+@6KruGiaoL>}n=ImyHyC%ZJe& z;&lIi-n|97+%#qH@w2YY5XA0l4ss=p)A0H9sZF|Ekfb})&Q8=;M#vJ|CUHyp>^0`t z9P6p0h(XX}r2kaCopmg?PH8)h=eq_{F{thn5R=4xJV{I@6dQ`wFC(6q9g@`=FoI)) zGJn}oj^UCs5}xwIXVhKd(q=pCoi&xv6btSdZ#3uT^{Lcbc`ZqpnfL_c8i*e6n2g6$ zEJ44V+U^&#tFoQ05*evk=q)eIDbVIguss3F>82yM1a+fnd>j+fMsn3UbPS@W@`F8h z`fnSD-MV4rKI?pmqP78>?B(8N+cSuhOdYqR3a6v(O``BT(Q5VPmG>6hNRe_1+r1Xa zn(AU?w3R)6jzQZw_36e##(a%|t_Ighj=HtROH^2>qS(PFn4o9BjRc)>PDNG46!ool ztVHQX7-=j)Y@%hUzNAKREMB)pauH8dTHo_NZLL%#ax-cBzz6v}$SlWJn=v3j`A1_X zjlosUtZ(X!a-IArEm!4}rS|C!i`2Id7%>|-atS0#UN`T_2$tr`U95_GV~tqo3m0}7 z*6x$!$6Dv6(7vmhzlP72ntl!@rMtXv9#Fq(rJB(%EW1H1W>%W*p`keI3SO9L1bp*; z8I2-~tx<#JE2=B2XGx~hm^ZhrtZ?wfZz-25x5uBazlD%5#KjK&k~A>V&%XW`>+CI| zX_!>Lc*A2YRWfY#&C|9!?w*)?i@tS%g;8mKP^tRLU#?rR-{wMP?+C~o3djF?_)>At zg!3a}+H0W9K*rzMOMsWru?x@pqc<92<02dnL2^dendjR_z+H_36K>e?c{${mO zP#ukQT;MZ2-yL0PQZV0mkpZW6`B;lklAJZBT@1EU8vO#+W1i2{)X8J6+6YvOYX-=cAaPjF64?9^JIR)6R#T zEkmod6z7os;WTf4!svQX4Y(+xl1SwH?o>q&jnCQJz-@eiDx5Fm_7=(Bm3?7ij}#FQ z*U3iaT_8_xY!}AH$yrX5NgxZ%+Sfx}TT=S8b?$qDc5jv_E)vG;+ZBx*Y84X1H@@(5 zhq3T65?Rqfo<~c1dAFfXoi^QidjbW+CbSoWfit7Tpu{b-I1;UXphZ(m zzs6-l)g2u(2&2}{%BqZ5N&HtokV%TA@s+rf$l=IB>N36qt6Ie8%0o(kI%}k6s>(h! zNk(X0*I@NviQ#o4Jk#%u-0Ann{9ccRH1uUDDJic%tcZJ_Y?t1>es#ROw}Z z?gKiQ0}3+ngY4!T4dzE5RJv|y-rk_M9D1klz5SR<0DqL`+8g&Ig>0zPod!#Fh;QO~ ztsC(9Y{UF$gPIC=Uq(%e2y-R3Ol@3xKLxH_(Tg9Bk0IAZAoZ}~r4$d!;oGho_Ynvi z<*Xiveo=9HjK>f?ZRSVC)Anpv1?et@?20Lxw87F9El7LuA{+kPozeA-7|Q1l;U|x3 zB;nmx_Nm!4z|WDTZ?#Dlq{0`CdA2q4Gtv){tZB!sX)t6vy3*#hx`AioB9ngY(?#Za zT-t%+3pRKElp<+To6Ki|u$>>XtHNHiSGz^P{_;pnzwr9`b5-H(mXx+U=;&%(a_| zt-;yte!J+7B4^8SG{gd`UN4qf`zeF<4Isjt zJlHK1XCN{Lv!?4-Gj#Q%=hacoP?aPawXhP!Qn(Kkr?|)>ldz~~rie$RKUZL~FL|<9 zEqJ9Voe=6#+`axgU|DAJBj0~eyXOH&4Tgv(Pn6>^{*FjUg2&&TPiXR=5gAoe8N?}Z zO*2pY5Xh9T>*H4Y?PU2o_pb8(9?SOBF0P+~+A$Ad!#|jl3|{}X+779#JU9$m57_ey zpVi%mjhAgCyxpO*2f#4DaQg}sw!`OIe^Z&y=uX6cYyI?@NbjIJ_yprTotAa3@O4vr z^#9pV0hqFzBl>z~JAL)fo&D%jh6r00Mg@AmWQJ;9p~1O+aZ-B_AxCr@=V=q+JorSNvqW1X>*qi3eeqrF!C zDRIXgppgT*h=e&?rmt*2yb%f-Whkf3cgb%q!WF>=VPhEr4(|4~tt?WcuCn1 zs*}c0Jg6OL6e;;)19v+k?@Q3|>BJbx6Plq+M3p@EEU?#p(L`IKr8&CEu)RyQYPXy3 ze0HEU>kQ6%FI@li9FK|i$+tlrkJtivyX`_Qgy#awTmw3b#-Iop-Y~%uHeKB{i2)#K+=A4=_swjP6Rjh+h-~BHE4O{eEJouARzUJo` zSKmClct&;b&9qvs1{`)>jFB&gynAQROD7VIhk^LT&7L36U*QMr+RUS*W?Veh*I+PFL$5}$8_XiH;4X;)9cLE*o^Rg_QaU2tJ<0KO-|h?F=BjM z=>V2z#KiW`AYQI#i|*KBeeIPIpthV8~iHBY@6kd#?fTlf6vSkKq4v3ls^Nw>3e;clqxbNZeQ{1SeE82be`d9a&m(&a_ z;cd%M+P2IX{MErgWuZlVk3iS7e?(hb?)ze)br$8X{JQnJ2DdLtqlGS5e%`*) z(UnT0W_ZB#?v5Wl?mfHmiiq`xbFs|2S_e(alIjP)E|8W{k?#mNg7_IF^+it34S#xN z-bh%spf4o0g@F|Q0Y&T1*oUzL10R6(xdk^0&R9$MVsOzL&ji3xJ(I`L+YHtrdy?f# zB3ONzcyBO$X%0i40YS&d$Jrs^yBG|twyh~M9S>N*;Fl|h!lD<`Ba8@zJ5+Rc1RWOF z9Lby z;W0ccyI!-3uOF5vnvY5{s3optBM_4p^pd{w;uhfS#D16Y$i2B;g=4mQXt#Z;2n;C= z!l(FFtNYYaugSo0RTF=hSSliT0t7{4N!tOPA?JWanC0;*;Ao9Y>VpX=t7gQWob+PS z^&j?3#qFgiJU4*<2#H$UwKx~iHOEM&Xr1KE<6qKCIYml8#e1kAs&I?q>I=;pWmN7itB-_16syt7 zi9mr+tfg_J`mN>`C=}{Tn-KuE>5ig5xO#Zdolr{zb7nMjWsr;y6Y8a0q8;57m7n)! z9SL#?iE@=sJ)r7l#}s)*w*s1EJ}3wW6)Ei(c%*f|&oEF}_$+#dBSoEZf`5X@t?^-waU zi_Zyi;eNiNQkkvIQ@}PN{>+D*j^phvb@_pKMV~v(_8o&6hL2<_c^Cn-S%s!8@pRF#{H)TiM>KkL?a{l(V(AfHymWAqusL~WP; zdWBbs;b8aMoDpovsOnA0o~TC;%XUNU;;}%gNYktHoS7o(^Vz5jpGD&jk8LLvQ(GJZ zA~MBfrwF$!2$v{(Jkq#c5F%07C~@VqUxv|>GMQ!giWf$gBw_^PeSUGb|{U+FiE*5wN zZI{a@An6w1#Tm2T%W^*t5Ht!{@r{v)*#kkAE~u(%;00wONs9^3(+z zWnb)*4tFv=M85j|%z9^%>pb1TubZepY$Xc`Wb7ngJEad#CBYobqYDcQ)rOyeA5H|d z8G%1_uczOUa(IuVS56V?MPWs0;@;uBi?z8((zG@M#m zZGr1Ck~Q%S=4u_v#ILu^_Sef5{9i=)S1CVp@bJd+x3bHplv3sS^jSKiVwTp^Owwd- zf5FRcMzeo!@1V}`ai=+qMzcAd{`fJ2sy}aHpD1}Nn_we>=XwcnPEY!tZ{t|`!zmZM zgT*n#oJZ~F!*UoHKrbc>xdu66p?MC`#rqJ|K9Ob3n;h}yp^$ymp#t?dkQt1!5^i(r`Y?2nYqg~CX z)Yt5*Ia-O8X1IxBk6#m9QBTZC(=utskSM0SOcIMt#QVuv6G#bZxYy>}5Tu`HL=aN-q||O}RFkd2mO5mOHw-+urcW62(B~_YBU9{nz~Az$W?TU>?H) zdqO7qhyykFw8G1VmbrbTQ^-L2h}DjfXQw-K&Tb;`M!Og}gG#a49bq-Ds+l|2&r#k7 zB9R1K0!xrT^-_hjcsNxbc@b|wrv_;~bz4ns#}qKP0_&F^#cpoZSLqiUzS}!55nUg+ z5f=40{WS1NqTPNR|9P%r=}D~pyhl$4>|FS4hV^%W7GkZi$gV4%V@GSA_}5UL-Ckl) zWjBj%{pq8Uaq%zJOP<(v=g)onsEY}=7Qdi19p2_mXnhKTb0#WPZId3kH%w_s*6Lkv zWh~5CR^_TxUM%`F^_o{DP0}L_aiZpaX79P5dK8Ie5ETx(W@?pEgqPJ8S*ldPo_3*( zEYDB-0eMepZ9u6qx_&2dRug}-KT^ZzV7r{hcavRoGO22oqp4a7#yv%C?Ly9v5zbkx zfcC;FNDMXL+N3M-i?1OXynq z-S2-*Zzc(j{qo}XCiWZ8`wm2I0}PCaL1^TlN4fCmNjeB3XGtqt`X74RWR1-~;-5U) z$HafQX*p%ih_rVY4#gOqHxGRt&V4hUueOd82Rah}Akl!n&GHW*HiP5B9M;{pG(9hC z^RE%t+M~gMPWW7qCNtyJq#M?W9&`D3^8X+Pmb@O5ZSe;TMp^Lg2JlW4-3$z5d81uZ z&+vA!Ooagb6rMX)IN4e*Jw(H^r9GR9AVg60VEil?cmF13IfL@Yd)A@jV_qfip&46h z}R7?Dn@hh|M8-!q2=T0%utiKUon*L=f$2 z_NOmSWhA|aN6$k-Pz@bS70Y06yBGhyI8bxh z*w=iW&{A8k{pfCfN*lDP>6juX_0BTKGIiz?Gn5z?l1EE>YI;DhWunQ3pN~(sHVc6j z5_^G#NrF>OodM~U%Qf4Gh!?|=M@QYn3*^sKpf2W683mP)3ay?gUN}d? zg;AeeZoVUCCEZjEI@+I13MbCuV6)QA;vT_mb)6;9LYc&9`Am!BOGw7Y)XUJ5xMjsz zu_=;|JcMr??Pt41j^L-gj7KiMfO*ibY*b)sSu@@P{66%g>w;XR9hC2b!Vd+jjWW}& zu#_1LNsxD&l;niFpn3we!9gJDrMh+{M2#@Yjrvfuif+|7KDXjTa$46Wtq(#U0 z)GJwV^bzH(_Bf?;6K4K<4}X&zk)cfgj%MYm40nBAKsG&;`ufB&vX)dXa)y|%ylHnf z)ovG#i@2U>M>tKHiuzVc->}}eWuBe6P6sbKm2jnK@*IqL?Jh5-qbxb0KUdbZvvEV=f# zT5EuM(f4ZEo3Ch}EHwnwI0qM$LCBMHQ9Bg;et!{`Ew;79`DL6D<;mty6(2j>$O2)pmD zsS+jM5KZngzCQ(Eg%suu+wYnhEP_`gnI_zfNp9oGdtPpt z>Wh3{v~MKJ(tNK`Bi4-4L@(m==+>itQ7*xNh0G&YI(uh5<}~crRb7p4&O~om9f9@C zw@Nft;CZ5!K4kq~K+f@SiPx)^eU<7QAS*n})O!v^Cpj*`ds$~}qRPo?&d}uJRNc zK{KycB`5n|BmM-#|F-r1u;A>qe-LR-Up^?Fiq^xM-xP{mh&iX1@YXT1otiGxEc$_c z=VH;T%Whb$Jw6wc=wJWVwM|%$*iN_W*FWJouNpg&-TlI!#P!)RfGP zOg5n_y2lgP!^$xj`~NkhfIaNXKYJK34$&oF6je0O!fXA0Jws1UHQPts{A4Xz-YAEJkV(8=r+6@Q`qioEZCQ4W0OAbR63WivJvso!Eu_Dqt;7(cShsWBt7?hO1(S zqC0`7#EMx4@i%Np770{wDl71&DXu?#YK)W=4}L@R`5%*^#L{D_(Wm_3d#WZ(Z2q(W zeJ!6KV%pOVw2KU}7GuV`_c2<(_kSc}BgE$~*A)*EPaYq9@xY&3ip!s?^_5uku`1=g zvF`$I`(^ez4!@=jZk8s++>1-uJiYTjD=Ag7juLjEHA^-+bgY6#~$o>te)AY?P6 zKi2&j8tj}K!K(veh?9~zr^JbjVc839J+nJ8O-IPyVA_pxkDhI(jT_OxDc(W69&k$( z=eaK}PL`f8t{O>)P)Yd(hS-w@1f+aE8t@AyvrWWBc?k^e7EDp1IjwOuR6g(Y0dAXXtqTVy_nWy#zP_j%^%FH z+Je1LXqArCEiJn?DKl2-`{d?U(1tXz8P@dH1ab^U$I7}AfH`NbTjKml+bJm^@S!6? z`c_?}0u~lWI3?g}b>IdtME2}A%LLIHI?MjeZ>8Yd0V*328aJ=NOalp9`A7&+&*D7| zKM7S1;&rVD_bNN|+!hq5qo$wkxa*`g*DZHPWpe%>DMsHm5Sj z_i~;^zxL$g_1-R+Qq`^uncRE;)t(#W?4Iq-PM>5h%bpgC;36&7KcKlhzsRgjs--Kh zAgr9}yJdGYUr@P8p_47N_2g*= z;au(8vZm8f1%%rsw=I?E;3BM>7DJqRo^iY1_U){n&&88aXcz@o^?RURY#Nup0f!h6 zMEq=ZrxP+IJX>9RPqwDkmjJ=M))z1C$DO1BHrJ^!+lflFP2t(-hk1Xldgt8HvPv!h z8MUQ0N{}0UChEKUu7+=N1~6L@+0q%?1V<$|A>TA1Bkbe5(YFHNn!aU1p1U6n#mxen zPD-Zq728undpI*7d(DlihHK6jl-`niKMS>ioD86K0ZKa<^O zo(US3fH85!QBD-jdQuO!cT3D9F#E&(vx8c*siX?K^6NA_$T@=`7IS@xyJPl?F@Ysv zwECr9);tW>NxK8hNNG4fxiGjg*zV|*!fPjDYPR@D*j7z!-c6xtfx_tW%T^dBJBCtb z1ED3WRnn~JPH~Q^RdQOH;rw=n;mwzu?Yy7U2ieGnv0r-I-gpzWV@vr2XU zCwHIUH-qf#TK;$#q4JoBj1FR02=L5*4%)|x|Bx`jkl|PN2?gXl&q)}z*-AQk-2Zd( zhTp?3ufPpIF#!S~+r_dDAtOv1!*$(QOF4^HyOXAZ=y6Fx=hfgU42W5gx)Wm5*}dWd3e zy-o#l4dOi9x%&bnh7*m46`8T2eJgB#KVdhDVG? zXJwrqV_SK4B)fZEMu9G~kmHAkx_Xn>D?_A5%<>3~C^nLI>S3$qVmVyF2#$5Zy{|8^ zl{@pRQ&9N)D9A;M6nzvaKWi5(H+tfL>@;E4&aSe>&Br%57D4}Lh5dM7go+>z5Ls16 z^2l`iJ{L(kt1k2Ko7MKF>kexl7OqyiVMRTsK$e`)W)Z4u4JtWV7+zHIyEKLB;vvXT?`74-o2~cScKwU(0=cD_PuCI39PHFX}MOd=ZX}mBm)J4IgXY$liDJGpQ+I8U> zdS87AjjyofA}SLxIWaNKA68nvqy3FE%?5+t3mRcEPdNpRmP6Zn{YpO|ITY!f>$9Dk z-Ai5a`s%rsfRJt7%G&xi8p<)@li+rCsvpJo=#~Bhhf2o;ZIr@Z8PkM=o?6-Xho599 z!78ewhLTHHc$r*=&e<2-EB2Z~=eAs*${4Rk^0y%a8DfI~6gN=%NzFFyEHYRPrrhae z^ZuB*bkZbCJo-e6Z6Q+<0TMqa5Kl7|@k1EzUeHMhuRNwPo8l%ry>9_3E_+$ygIY6OIbF&d1N zF-hl(Qn#B(4(VsWyJu>-1Wu0{1WfrrS9*X8_!gR6z3}7L!?9q5HlMj+S5!aw7 zpY3ElaUgXsv*lV-|K{u1`3e0`=HJ#0XfZO5_g+HlqbO;~uB{&mXIk_v>|6HV7pamz zy$J22JhX0M85z6O!FjVjFJXv3oN%iiq%pIU4Y`1|djC}KuWPfug<2}e+=8E-T17A%(A`nBeUCb@$; z)%dL+s6_*E`nY1D%pbSpJ@*MIiIcWu8zH0y-B+du(CzuSdq%vffuT|G|-Qqk5Ojm#B)N?d!%cyUY!GxOs(KvIP`7YAl46-)tk*{0c4dXvt}O zL#ep7aq-MOl~;CA#I1xTc=jjb&3X2waYaNUanW>TX1w2m5VoBAOkgr8^!txw0ZZ8u zetafoeH<+3W`spl$z0vQIjuN*z8cQ0hP}|4xII)+(oBcb@p8e*`L1n^G|qV=ZD$y- z&3Z{n5^OxGAgLswO2lxIy};PVEvktnwOrqQ#%-!BzI*r#!H#8lQU?@VUsTUB!=9~O6$n%(-Y zT$V=nPLfpNncdDLqS>cIVrJ`=ZT^pUEQ$tG_!l-%?-@v06Xu)}oQ8e^Bx`zY9IJ|s z5f2R&tEyYqX@Njar{V!=1y}0ZncRU?yMurrEzY@vz1qb$CvV0_LhVifFW-4~l)lkp zP9BPF(rG=tS0xQ)8fl&n@a#1-rE>xy{pNy}&}XPZB9$6`DA}z40cWvUm|A~=W+Cgd z&sW^A+uBqn@hh zh8h#;m0Wa7sp+|ZncQlT=1l0;o%8ftvCUR~N30l-T00;BkVEFr((=wuXQ(D>S&%~_tEc8Z^CHT4!+?Yc{WEN zMt+}in{);M%}F#~Fj4*8g$l{#PZ-8xzdqhMwEOJg=Sd{ax4FnToJkh5@vic_S%)Io z#E;Q#df#cf=7XtXo1YKS^^(``4Bzf>X{qrW)G+yiEb3cT zCmQx|<3$RAA0)CwlQHlgY-2)zw4=91XvZmLF3`&bTaIXd5>^K*83{H_`j#ulUn9z5 z>P|$GQhEUd0~#hEOKq;2E|u=cy%+KG@HK|hT|k2L z@98uD@hXOmtr`^Dr&2emj03s(S)%Ty{WdC7`jCB*$xZHnbYq$`3hwb#oJrkebg#-_e*)F(1i$F|9jeCUW@8}J&umwqGzKXv^;NOLj{TuwQp<# z$~u{$q>u(LFF9)SmbA+WVjR7iJL=N|W;h z^49K1B@>jbs9pE|0tTe4wjl26yZ!lS1LisX($7+U0lw)^*PhgzL%E#V+%-;aeJ8KL z;eFu^FXj&WWCKd(%-eex<16r_Qf9JWs;{?(iSyjDp6q{FYSb)G2XPx{5b!$coR|zw zXKyT*rBldLPJi^#?SoR9(BRsO@eU8XYrdJX<8gK&H$}tx5JCRr4+!ADOo?veB+#SB z#a2DlrSi#2aQ>1al|N^me->eEr0#cEy{@^THt|*^6D5sFBGmw^XTQ6r!ef>3}fV zRbMP;5WK)qGl7S!;c#H~mJfVF?Bhx1QcytR=-(KQ* zB!l+*eX_8x{O@q7)bc+fetvX$e`j~IR@on(#B=_Gm4D;H1A>KbU219lK3LYIO zkUHmN9FYFTcUT{48I%2cy8I3S2ni460!lwP0M~3-cm*d}-5Q>W9I&kP7MXhRIyN(~ zFG`KUeOL%A=pN!b7O)^LtfR4oT#!hSbTOx|lV$omQF*C*hu_;Lho?;dfBuyDk0T)T zR|tkv!Y!o}sKXDV_2U^609P0JI=-nX*11o(NFCK>*3t@je?{zynaIs~l_(lL zWv^|ZZYg!m>Shs`n69+ISISNGm#Kp4M@?UAuRp6c&RC+|ps5}_U!62CHU(sKBzC$* zDnMJ!ldcYtSzMR}_QO4!p}9z?KDNEPZX7aLIYq1!mFh~bm5hLjn^Oxy5uE@M@{Zk; zG+yz`nXUWms!G{$Quw993v)R`w+Y_V$Mu724C74MJGIK2(CNAvv?*wm1f=An!)ijj z(nQ+myb->QVL0G!CvLC5u2jvlv^UI*;mIFR8Z zPob>1T>fBZK>5rsee99Ou{A@%l<4NGCxNOp5#kZ$;tT2asfl>pC8IvpstMzqDtpuI z>z-zlp9<5OY}dUTJ)7;+IvMD6G9Wql89F23V-?NFRS%IKY(waoMGFMQ?y~F zeMA0_@5s=Nvi^5l;$LPgCJ!X=+n$ak9~y^Cmx01=Lle)|HlMqB?OsS)a|tflzxDaS zh%jHT@vJj|<|IsvhUdYNDT3%jkf_&2Sk{c0&fbV@ZiQBL>QS}2nayt4@5_c!0if}p z40M{)Ed#c0Al{0uyqn%{9!P4GKo18?n2+VDTwHN_^MhOq6Ao z*pvq~*-W+e!G7qt%a*J|Isi zFmX;3#?4mm5%+}WF&sL=^b^R{z1=+jhE)ZD#{f-~%P$ZxlCm~5OqawuJ>uw0dInF4 zW>R?x>kPsHc2{Dc>eQ93TtjlQ4kpx-Q+=o*;u>*I`eX6Cg0n!rOVtn1yYHXxmcd!E z>V9V;{cPd6$);Us8QAx@@Y>V%JM(i<$=M6UKGYJ)7Xz_q;3|S-v2?_pPd_#l?qql$ zLqyrwR`)LeDcMlE=x_1Z(n%sYndmN9|%fTFe`qN zl1o`O=T);OR4mPwvLoi;tcq67F9)M~MaRFZxZR z?sxU}zbV*n5>HI(9y=Zd!>FL~dz!B`$rA*;He6vWB?#pvgKU+}>KepMA3&6L@Ym;cM+O2U8Mn*f7sh+3k zJ_OHc@SE6@p@rALRw?ExEL%oNSlAb;aNK6_WnNa4nJ*=jr&#sM6`>rRerx$qZ)jNGs|P~0FA*7|Ajb)TMfm`Oiko;OVc&+r=X*?=T_3t6 zkRw-+hRK67&lo(0g263vf;k?aGY-lCcqOE!tW3_xDj_eR8JR$|u_rFbU2dEBt@4d{ zHx>)Iu?;hC02p#+Ps%j*q5PE(2+|v@SM5G}pEnAg(^sn}>;4$cqVq)lrM*^f|BkUY zO64nKLG{P~fhpEYL1v8aR+jjRt1^%9yI$N5kMZ6VU8<1$dh%NdJ@a6{9ose z>T>tLWkp{Z0a20Ur0Q!qwnG-Re{fn+sZqgKm><9VH6am%{f=wfy=xzOct*EG@z201 zlf>Lm2~{0}&m2B^y<#&iPxpjBDHWP?=lHo|u)A3Q{!xS)F{TH=u^EP` zuWB#6pQ$yxV(HS>)Y8rLeX)*D7qjKo&$lgE7P4n}yogm^|8~gU>nbN{KFrd~D^=R3 zRi`zXKz?NCO@j~P$MU7LX36x{?fcEztF6n|92W(4qCV+~~ zGGw30gNd=Fw}{YtGqvBX6A2vq;?0LOmu#yJ%4>mDUCM9j~_bZi-2hn_uTE?(v9yy6q`f^_8 z^hm_!JD*=yXNXOmyqYs>H5ZGfbq*9COm8t9?FaNOjj|>M3Fj2~X20M$>p6RihnGOB zHp-g%sH)%jSVtt96iZUo9tOL&M-CCnqHnbbBm>y;;;OSxZfQd1N`z+Sb6|;c{M*nP zx_}s^RaS)p64<)klyPSP{iH?84?^0IrjE+z=LT+?H7)Nj(PjEZVz37|7X|khsyN*U ztZMWZ(;C+%NQqB0F`oBZ;Jdr6uYYf9--GOy@Xk0`1nL8q+o-1Iln@-IVYJtH;xjos zU;HDVAjNKRE}O4hj$CpbXMSLZnM5yPfccXAV5HC3Li2r}?%tLC7{0Q|tTJjIDV95l zt5_0C%Q=-N5{0(Nxpuz(K6p;lM6mwudq}gQNq);X99F!9U#@R!5$EpiI@cByOvAx7 zm1>3N6E>oXg%&0ynv8K|B0(~*cCsbkJBr8`nr(v=3N^gSO~J#J~1z7-tjRLljxg@rPN?tvy-K{T^ed`hsLFzFKJR`Fw-2%i#n8!3z;;x+_3w zoJj)5dQoLlBQ*+i*=wl1_#YsoQkx;7o;<3gV$gSYgYQ=7G!T@Vrf#Cf7_pdWvP`-9YmcP-Q|97==&90k?@F#q}qHYE8o z@tx=~oKK;|8S+Qxy$qyrb4T|=1xKd@?5htXjz3EKw`PMddp1UVF;K}zpsmA`B; zUh6tEocht9R5<199r?bih70p4T<$5omev9L^rg}W!a1T@v!Rlzc3RI0Sx60`*6r_{ zWieGWZK;)SLANIi)4Ui+H=QNALhM-XNVTf^t1b89f#LN5+&kNL36zR3=_v`Rp4dtb z@H@>wX@%lOIUa`Lxp1*QOp`%v&SG<`5F>yY&=B00_>vQ`kjZ-X#id6|*`xsHA?G^+CJX5&s9yz))=9I;S+8b^7_19gXP?zD zpBKEs#hbu?+7rIg(M7YRnY(aPPq)!N^PRTU=DC!Z-2RqG4pIw{W9IEF0B$h=BU~McffPirvSx#^*;~>16kcWJf>9c z8L0XDGd_yo5;+qCAe`(!;jRR67~%AeLqLJRCoI~W5%?3PO8WnU-Lzjfys&?LDQDN)XFGs8rP1Lb;~r7Sg@vXJun+TJm++o`(;hN` z5fq7Ed!c&EGPKY}Hz9uxAPwLE8rd`|%rsvFyakNaUmxoKrC%7;0?fgA%*h=j68db5 znHkc=M}%|%Kj9zEU8(?>6<7|G2B#_U40!+CIZfur#13D9I|m~MLmESiw|Ak9BLED_ z0)5grXaj)_T>kVg-bO#9R=rhyhltGxS!h^D2Y#{)2gy!{>ciXWevO-+T|-^PmTlgaW3s zcDDAh!RqVO_a0>)Q0(IR5AVbsi(;|4y19GNxYbM?dvZ-ba|DxKU%BEx{v_@d$z_O` z2TJlRxmH;(o%+T{W*$6#aN^&$@EFF#tU~bhi7CBMGszk>$Bq0o})2KJr0zU||8fX_L&GUCX_G zyiA=c_AsKPWPrbmlpBg)VvEJ~nJ3@?2OYa#Kx<@`Qb32v)TD~N z+Mv43%I>cTBI*`T%CW=oTW(+59D6oOl8&d^P32p9Z4fQ$Gq-@5@2xXy8Ux>{-AB+j zpQfa5-8IqWxLsMSb^1ljJn>D2xZgSOY}s+_-U>+mf?d>Sff+)#yJxTc#B1T_SHTUb zkYmPZvMoMh`9fBGi%LkL?OK8Q_^yd@?b+?}-JOKJY-fz*MEp~}XI0|jm2p`5TAJF0 z2V(#h(th-n__~o)E(+ycmAk@ zPQU6*2!KmffSRO$Ru})$)=CQt5o^$6QsN7$-7uUHiJXvyTetPN9P%en=m2>b_~lNo z)&*Z**fW1Q3tx|!J`07{{q=^5r0N;*#XMDB7$p}E)Q^xa^H?sex)pploT-9G%jzL-}aSGwqe9#(H+G!A*0;(%dp5zgE4A~z|u z&RoCbH!s#13V7ofgEAoJqwcO{V?bK3=u+VX&opLctlVe`IQC`a?f)p>?%)|r;+YJQ z-g~R?KuN&-M<77MtUd(Cvb=x&FG7UouQ)_{V1yb6A@8{Xh(oqYx_e;%pAPwoU`WzFcx*VbXFKLKBaAzO6-DUrKbc7pWkIr{j!#S2q3HrJ(~oIVw8g#|<4Aqt_e$h4 zLUyq9uCg+4#GTc%gC0EY>LkS4if2B`trMOuf?WRSv5l9@UhR$ok}4%^RK%{T_huRf z3-7bejE8X1vBH=K>0lKYWS9o6?WA`CgR(JR3FCasQizt3v&`FDtRE*AGzRd+ow=)5>{xdV1U=zHIa6W{8gBF@$x#9l7} z2?3e~gFqsx*M3Y?6={IGKOYp>7qVxBsq;_JInz8dED&$Y)v861CFAl0;4C*7*lUf&++f1Zy6 zQa2KbC1obKqpuqLX~>VMos8Dx3&X0z51RfJ@hb*K zj#`xqdmE@-0U=)TTCagT&3_*Zvf&uhf9l9R09L~j^+&9g{adUR@mH+%8w6;ec-Zv! zMMp{jYN9=lg^2up{YOjuf3NYMHSE}*XWAAB$A#Yo7zqJkGh;T#Ua~)QWo)k`64#hO z9)Ym=&V_IO4a;$aXS`ql$g^O8yXLjuhrxNh# zdIT<2FM;g}!A=X=rLbE`jvaHB1qF{~U|8I$66Z(XyJV?It)3-|kqr_@!INn^{YJ>| zyhq5UzuFw9!c2`QG@E?8H)~ObJPw^20xk_&Hd>T(jp4F=rt~a!&w5n#d?ls zo(Z99q=ip3-YunTQ+{LK^azkElaR+7(o5O*1_<(1t)pk1z8Jnmz z*)x`JqMcB$ogoO@mXnc5zOLeJ@y$}{Vyir$G``KJOSgmi)6kKsh}goSj8Cpe*=tn)(lm zmx2L#YviBCcKV_0CYtN7MAVZ`({BU)>a>k}IUa{A$ytgr2RwYH5FfSuG-QSQHui%I z9#~B07#o81kb?)h^}Ul&4`&+d@xXq;v^yLUs%rs5tJ2|aeT6aalaohl0PtyF!P=;_ zd-4J2tiDi>?zKm9KKtkpV&ucIBSCb$Sb>b5eO5omOA+W|ho0Bm8K<4BdP1*o$+|}R zdY=|ERz3o)nPHH_2ec`M^|jzKp#%yO{ox)=XU@#g8r!Fwq#_!J^4G|ltGu6lVzCbm z{sp}Kc}}=pu;(K+smAI^J1rLWd}rX(%~-qJAc*1b$e#bdl(LKR|F>*cZWiSIKEr?a z9X?AAM*Pb1*|9aQ?e_f@H|cz`=RVaf`C38C$W}|cWOK)p&M1%(cZ1BFe$Nqy%BbEG z&@V2jyWm%H3}rC7F#S=QYXC}fnd=vbWSo0+5ILI&ndZOLhU^!NZ|qEP=AHi{6DR_H z7tr>qQ%lIwFtAqwQ9r-O1%SszenQpNg&W+Ke~Gz_qmgh+@lbDqi$@CvTY$nChb#2NY%&L-!>RZDR%@YHM|&P+Bvg{oYEY^6wR9a(lp4j&SKFnrk*| zY!BfN>^y|)JzyJYDmp*EJOfb}v6x^#1Cz3Z*A}Sf&5l}V<33DZp{sCiB?%+~-Kq<4 zl28pI#>;7>yAZIJZEdFjVXOmbO3cD}lG`|496qCDhcgpgWb`l9(l{C5lb z>x+fAnLzvBK^0Kz;E=f)-^wNw!rS-?exP7;Ater>ZkF4YcCvEW;y1U72;_~7fAnVA zxhx2N%Iwhqr5GlfUR+$|aE+>#X}3=JKKzg&r;Ua4+X4f$z&1CH%Pa54fCTY7R)-Y7O3QgJig87b zxI7eFAmSp4)*W~V-HS;~G#BH*Q=_IP%-=K=6<0VDFv=tg)Er3YG~98?s9LUgo%cJ7 zu-ZD&@4X=?uK9Pzp2$h`w0HkU=}dU`bz`fNdv+L;cx)`0-8y)o$i~K?l(q%kObx~c z-5R;Z<7_x!_X~I(Qi^d}9JiM+CLVDKJ=LX~D)7fPGzyY?GU)l}Bi9*$`(lPz9jcP( zjJgo5t6!<>sx2*<%c&9CKDsDE@ofg@bjGkf-2Z>TE0HA5c)>U79Iq9bcHHh}l?Dc9}Ft zsb}KRyvLL>re5@r^|!{a%3y?<#{Igwy1D*BnfQKsn=<#*%2y|q#9xC1kwEf}JIg(m z01CN6_pCijZNP`s`JX52U+?inbX?;Bq8PiBNnR>Jm^vBrzdn*HB@(&SHK0gWX^n_6Yna*LRxV zyDe6)0Jz*4fHs8Nkjxi#X=0gsQc@{35?eG5T3RCCTP2i7dZby>a=kJ5;?Qihdwmix zbG`YcT6NMS{T??nt-7e#=%wtDK|h|UEyJzHEOkvave69MbCs^nLPGF+!3Yauv<>Ga z5c&z#=gB_SDDe3*7F~KX^gSRho4pe<&P9s7(K9qKb!a(p_nDisclu38m~aGQt*31# zNy^ky<1mz`(4?Arx=2ZxOj05yf<1uJ^|m7F)QTr&Phs(JroX zO=O=B(kbDe*7)k0=mYy_s+=T7J3g&~7@b32?RwXH-mg2I6xgpoj=(zaDeFOP0sf>{{Uk`UWLh6|vTJe*onCo^UMw=bd&pOf@BWzf?mzk%) z+;8$K!Z(JWV)0a%k7Q+}KZOsz8^r1jE$R980xp}O5CX;Xqr9g4&77t}T5^^tK5f^J zbE=npAW8skR8|?xTNQmhvjV zu1ycl*_1U2R5%&^snL<5YcfnIr#r2kSrK1h*Lb2%D%L{8%&p*LmqWGw2p1JKb|M^z zV2(Vf+q%!_e%7>T@4`GzxviOB0SISN3Ul635mE2-OQ{rSfN_2=XnQUo&w9r zc{WA-n95+0@s%$V!!u~<7u9xijS~{yx7Y4x;%8>3RU6!BUe>X`*srhgyID$b(Zty3 z_JSP${5H|6vIsBHt?4(Kb-csKhU|Zv9y0%T7Y3e$%ShHJ+eWjxXyVD4NP|RM2itQ% z9=x^9s{R*mw(JZ9RNY0B3Qz7gB;ureOF!F=0Z?m$Iw9Ww`F*Nb|MkYA-}xVAW)*hv zFcvxfBQL(ND7a>^{QE9$cVtydI`o{K@73VNP*u(OSL}mLqW5WJgA@?kHU?FY;@+Lk zDZpY#;pQ~jAmk7gxAiOeDtxK{-P+yVT}VkyM`wfhwkhckSES|yWbyZDsH~(|!c*R_ zeZTK1fwh^+0+dE9krIJ@Yg9&aR+3jg$0ncp7cV&Vd=>CQnH6cx!<^>%Dnmlr2_cN* zD+T}R=F-mLqhWJ#eqEAv!S%|K$4PO)7fr?xgyydXI=B)_XxWWn7>0W z(kLeVV*G!7`Q&`KOlb^OMa0MRw<3(wA`-b%WYTj|?sqbBBX*C($WWISCvwU6K(pX< zl93*M5z_#XR+kNx%PwY#pN1xqzXJ)TKasLi^W@UJyrrR`*%v0NckPd3mB=h1H-;|6 zStu}f`~5=MdZE)It{K0*7ZQrxTX81TaniK~R@<1V6;C05u1DOC?>)!PK+}%b7bmqq zW)$~M=X<=n+^15Ut=}#5M)#b}498T~vxUTm7#;2VndiE9Y||+|m5Clr&(sRH{YmEK zUwwrXSAM|}fdvlQCIRZk1i^BrL3_`^V{z8{6 zvYI-h09PzR7G02h_ra~>#OGS~OYjbN$pbkyHC~;Z)gU=V_7WL^AbsEM{&ar1LZ46j zf&IDr_aQXv?_Dy=ddyINM0hOY;fn2Dv|gjT@v_Qi%Yf*Hg$F6#v_ty>ecJLd$wV2B zW|wFIiU5&xVpBP{HsPv9XP{YsAWybH2BxWK@tnch0*S?Non;_9ucI&dxam4RTeU$o z3?B!bc|l)-fPfq~2kIz4E!N&Afr$Ne4fknssrS3zqvI~S{)I8Slz*{%i z-UFph=xP#b(Es^iFFWml7PgmcNo66WmzCDS5$b(f^DfSUP5;_@{PEL_IG@ISRU|&A zl}JlJ+A_y1@)j*DE4VV+I-4Jf_F)kGeOuZv1j6iXTqeiugEvsy57F~1o z&KsH$^_p!cD-UZPu_QRk73P##p&JHNUfmRc6t7W^-4#&hu>h8>`IOA0JE zum3N-5YTb#eQd-z=($juHug|rHo7Hm7Gse1#G(opm*Cat>swrcKwiC~YxVk_Zo_R^>$SD`$JdgwJBK`XAHVRG~2bllt2g+J!fBpDs2>@zmQXELM{BNtwXx#9$d-jLY zrFv;~7lDL@Z1bihbDje$LUdxn(RGuP+GlGYE!CGta=*Vwkql_<8D(U7Ncey-$Q327 zpy;HnqvJ)Znr5rD=w3+OW4qGDD&Wqo_+ZK~{B5FZIl;zlxOr4-So| zuZ}-(T2`(VDle-~ljq%|Z|jQhhqVeN!d}N_%Fon)h#F#)++~)uraPD0@oey031!~B zi?{dt#hYGn7Ytpd8URw3CvYg=N_O3Smas-}Jrc+#3FPF@0Lq3t(`sdkL+i|rmk_cc zs=1p#vwb}a-sTw8`P)?0pmVG3yi%fbpb*WrKxf=xKx$`{Kvu0oN}O2)X@B~)C#^QI zj;=EKL&c;xG)2l#9!t?JfJLK?9{T~IhMh)L_3EAcFa6l@F_KlmrH|QP*Dg2wgu8M+= z(nO;yP!QyeJkn-LiZ7(W)%=Kcy1hF0-pwvn2jYIOhhkYSQI4^V;Zk~`Fai@}>a=?H zPa{#&+n@S+Ja&c359M`>KEvhNUHw$r3%16XBWtdOXENf~gVj;Ht2Z`J;m6G5mK|1YVe7aQC_m4$Z0L_E9lhkgMBY(u0oFA#fu`DOz zW8CrdYe-LSi_htFns}3&eOU(b9>bu=fMTq^1(;%)qOeI3`@^IU24U)m*%jy9*^IIv zN1aVs)1t+2nkmpEL0k`K&Xo$mC0|uI!}ISt>}VoYLtD)2C3C8fM5BG01phou0K=^A zC6F3&h^u4Y7v0r)S?NlGb-v*(ruYP2YdLH!^%SO{8!5;N`hI zSviQOL}wj?obipnoCP%475PmS`c9BuP9YWpl?~*zy?(+I>h7D*8-_MnKra>!d0b}D zG}-#6n_J-^^t86FWe{j6w*hP*PQ6J&;NWx6quT1~KXt)2k#v&#%RDEZ6P4zrm-t=? zjLGa9`8=r;RVqa_7B4G1JB>zJYTe8mP#8EF414mXKEm1YeoxCD%TgDPZ7S+nb9hjE zXzUIP@y5~5`NG1t@pWBCeP?JNYo0ADC@a_W5b)vVC&87G;18I+m<-oILE5i#@7v3z z1E{rzM(j_Tq@&R!v6%e|)1F-bj7hUcwi=cTMzO9lOQwdL>Z83=NU@Zsg`4(@(xG7I z(}F;d@vsrZv?1Z@rRAoo1pHAS+4_1cCgKpLL}`j)I-JZuFqR8MhR$s)!baV<#|vmB zN&9QoqObDy-f)gN^}{`ypL*pfZbaj6Wui@~F`<+I>*HF=PF17Bgoj_G9Uxu3Q=&e={2I3yxP9Ce*%J2*tIy)?c8wT^6#fy5;ArZCdVW6^A1 z%>*MrUkx!~>LulAQaO*YiH&i`6_)EW)S&9-DAF?!eo<|JluWNx@ulL>Wza*u#-W754$<* zYA@z^Ucx4&Z2@h|546ZrST-o-slfHkSdnWWKUi)n_*$1S>}#ms^I3bvUV8>f*jF^G zOvWjpxa~{OYb`F)RQF7cW@=CQ36;8^m5J}n4#6!k2}?HUiRvoN!$e_9fvfNQ*Fb7no8S?ns3(uAR*gOT(w;75 zyxnrYGiomuNY`8`gkhD~%fg zF}9or?(slYdEfTiovWMn67WY-mMBoOeB)XmAC1*AT*V9&c1?}tjWPLcj3wA4b;ppM zADr$MVJTQ3g*Dx{UO+N!YL-F~ii(9nB}aqiD7lT_Hz9*_}P1*jwNR#KKX z)bW>JF3Uk*X6T?mJc=_&81=cy^&oDHx;VP)vdb@#58w;X7?>R*c>|OXmIqu<1-P}N zu@L_zREw_r33PRT#rG*SYFh-V6K}c~&xbrNQc&>A&HPrNzs9F!@C$E`|GJKUcfhe^ zY2AyTc0}cbYR=uCNN>O-jQ$`?L;J>yx`)N6$taLxe9*Z!rmhoDLW^*{_K2Ti@J!1q;3e4Ftgp3EY-=?(T`x287 zx{W%`#bY&mV>MK;HiCdq(T`fveI9>c;5U9py}s=E?@c@oh4XqYKb;YB$Lj?SFoqWfbK5nVE-(An<@ERzW>L zMuL1kGj;QxjDml`@I;Z0PYOildlBb(@)Oe!Q{WSr$XuOW-GLa2CR;g^e@a85)C364 z@bL7J^Lli@)D6lyfW)|FZ0iCrLySH$viA^4EpVfd-yrTIy}spU^sW0ead|5KpH?a! zD5-MejU0^H)BLJBkV^-GYpPDSTUWL9%6vLAnxpU-XnJv=9HerEH!!nwWQWg1fsjUj zS<~A14|1;s4HcS^zN2U^#%ZxVL;Hq9SI#TqHBtkKtw$JfR(J5YN!r~9Tz?owIq&{{Fg#a} zL!3jfC|8vjc#KW7$2tv}j*r8O%uT~ue{fK2u7E}38Hj!2?441GqbnlUe_G%-vo)*I zE!VmxC?%cyBW`*>z80r2PE*y=sC37goQbryz{O`e-GqO{qQTpeM1&y1~9 zxOG8NIeufb`G7hD$sz=0Bqacl=iCyPPg2OsgWLQCm*It*XPEt}G(`FI66mv%~|WB#^J_J^m@rbX^DkJ^@lj_CjA3J1tGL@;8M6L$riI{}t>r~Cvv%n9TFWQmdF zL^J>YIO5tq{nqO{3g`nR1rEmIzqja@GeYPV)hnE6&3|C6d>yE=osuH%vFR8CUJl2d zax3rr!wj`NkfZzNSursA0J&mNPz69LefXPH3Tv$2)K3+Z>t_h)0JX=!K,N~z6{hsybgIDaI+DxC>~2I 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


    Eoky`_AsX#P#B22$_~v0rlvkEMIIv?WS! z76QOGy8p_6H*V83yif5Yi+V1qVG!gjGD4nskcxSQV`X7&ZMR-GdM`K$;eOZDhD4@e z@-hDz?lqPtZ+}><_8MV{)H+>Tg`CUM!KJjacq}}Ac1gw8>Q+HJi$Ed&N49-W+B!0Q zQp@-=lq-Z+ORD@xP($uk9#+H-2SiC%6f`Zmoig%=3vqXctxqt#y-IW#lfY)iAD9HC ziG^AjF;;DRI~$|}1%wNAtWz!hQ2+J-b&mA-8wqtW;JxQ*Cryh#E_4X-d+8%(SJzRG z=@Kj8a(^l`AB!0ot2tY}N zk&>NClUw;RBL!L@?Aw9Y51&NkX4h1*xHe!u?BQ7)@zPaoPZ z^uw<^^gdgAwTt^1w6?S?xjczr$7qQZ4pMEqT>uNW_mky?@2dFibzPRfl#co12yFuN zNUHbMQEQcR%T8)TJPs_9FwAzkGd1SK_AT<@i+zA*uA^E*9wtK|xU;*V^@J#7OiWy3 zWnwC9Jr*bP@Ba9yePiQwlDt3jzGM;B$Ls{0KdyMk864kvDmiU0lW>SZY`$>#hGKa(B|31Ky4kh}9klKS3$F=KWutH`&Rf;7ztQhGjL?ab*9 zQ!s{u1h^&N3pXn(w1(3Z3OtjY&J(O@7`VUb;FU{~$Mi5B$fUDc{;Fg@snw10D2nsC8epY(=zVY2Vd8}qh66eU6d zTYG?xEu|GV#_I?sN#+zHpf7X?7*B&E`A=f{^`p~LlHp$#maAtD7YLaKzc1!kgK4nz zB`Pbt>P4rVa2NT`$OI|Gk|s(YrKHy~i3tBaW=vdCt|lzRc)%0AqM$i7t^b5^#|P3Q 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 z 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 z≺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%0DniY*Di>ZSCR3}Mh`zEcaFLq|6w1j%6fxf*eRtpL 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

      3zcR*t7Lp;IVe=iNWh`#lq=gpGu(6+0an<+CuOZ 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

      D*C@w7zCM?(`9K2^lF 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 GRaMw$KdDe!y2Kq1*T1 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 z zZaMX4k$Ye#!bC_Xekfr3#KB#_8)a3C*mMP3mh^LOW|fJHg^y(D_$P&X8+SQCk9O2j z*SOfC9{5hd>6Z0$B-duVHm}ORIbbCSoV^r6K-(xqCK!hU$^@>GA_7mQwU$ZvE`3Jxw{qC|#Y( z6^{h{@`dxd`Mv4^;H0OX!ggPO$u1=Mpgj$0cYbvyzIe;4z>Q86_K|a&_FC3M&2ye7 zs$r%s%cFSR;rQ~Ge+0!vuw{fuL3N<(xGe&m@?XjA#aRyAH-Ch_g2R)eJq2H=>nX0PlB=d5j3WdE;>G7+4f~%9deeb0{=cuxd9F@;7&UxYwqbDon zsc>h6iWhsPF?4YF%sVw?kd@ENsqGz`Ulb&Ck)mrYU%8EPzC)N=7WP8n!^OU4^GOPy z?-1f{I*9w0zp3?KP_kC0?nrFPa+uPsE0ZFf2?Jxm%?=TP*jR|j7wyI}Qr=pJ?uUCSS&@VjLY{c3}1^wk*+ zwpQ(oYjn2fw4LWhUfT2%(+efT22Y1|&?jq%8{H0B%?je}n#h2M%@!e8?dz)_yDJZ9 zjTzdlQG5+iB*Au}%whO9|1wjWLy! zP?3W6i*pM{mWfWl)ehc5AGvz&cf2r3*;D(1iU=f3wy)QZ)f3P zV=J@vM#tx&ERvG3Xdk_fn1NfavWw_c$6k0SH;)O+uLiuC%`tf^UA&!^4f`NR9=2uq z^%gxKB+jEB7?C**x>KraPB^?GOHpEuuhM>Z|FGKGw$JglAh2RK@R&_!4nDwneR4Kk zXmVyySzSl~t$D$2P;<9ZuV4^vyW`^RMA*wR1)LzO zABi;pb^dY=H_Bk*$Ld$NYsy8R8M>$~Xc{n7=!d#rkP=$hke;ej=QIvxB(u&Y`u|{n z?yOnwn`9u@?l8J~&yQYhw;bJjKfZsy9PbpX&~qes!}$6`t_?swS|Z( zCZzS61I`IAZ+Dro%y`ZgmZ#S;P!hWTD)!KvMO;0pF_ZRr?stO40J29-_xig>DkEMB zVjHfc63Yk)?~h^jRmz0o$zPZ$4PZwq+Eqtk#h5mD#um4~jDsf9SK5U*OjTf8Xv7#O zoqk&u8`X^LQT#u_(!bF0{+mkrSr8Xgys9{5Pz9_QPf6x2$DX1jfvkemfb%EjmgYS0vGbWC`VgPEVn-9W-_yw%bZjXZ*L92#ms2tycu2+ki zeR@yJ4q#@Z=a>{>usm&GQZsbKnAlf5%nOPC%*cAO`papoJcmE@>?q!;;cC_ak3s5N z4{M&Q?dK<&xh0*jcn*8Pt&KT%c!^qG!{*qUlNI#n=ZF$(XBMc-QQl&Q91 zgyT=8-JhJ)zq}TKF~N|$oPMO8B1;u!3W%2CmkIIaDl=^R}jUu9@mzM`oi@rS9g=0)0 zf;Sb;j%7xEXTwS{8OO#rPy=brS{lrgza0C>OiXGfSpjc)qb`ZALa&t+` zPD*PFOX_<}(3`r*Z~~gR`T!e%@33S>xJZ&DJrbpu`99$|Gw_zY;e<%S+TPT+#Q3r` z+jD$tu(tJC=FkBxOVap-RF4X!5cBy@I`MqhoM#f1#S);w=g$AkF_29}G}XI^lHR|9 zGN6C{gOoG-Zr;Hu;3#wFu$QYgt#RAxLDK1Foc51DXG)w9#@sWvFI(>SXb}ffAXt29 zd!7C}vww6n!&G|<`%+NyZ9y82b zP9VEMRDjZ{`8 za6tS-M6$3*%aA&?3f5Tm8sMvhNV(9y|B(()Lx{rmZz3hyN$xP*wpL$*ghG8Mv$Vx( z4N$tD^Z_N!e~fTISTolgL-#_)1}r9DZaT#`Cz4xb?kr6h zOkMm$TS(qmVN-fEfVl>!20(!#dDGQyZTB~hZI$*&*r0{%h|6~S`;Q0C+R|YLrALhH z1|-rW)~~Kv#>Z~Vomect3Xf7}J-^7Z0$Et)&{Gw&6DhRMYCkcjZJP9c_-L>R+1+*J zI(~NS=0|B=zaUZ!Qe5Lm?_`kf4)Ke&&4MPRP)M0%T`xtLA*)=V#fA;jtN@XLhceL} zS(BQOLR8@x&GuMbLZVM|wV%}8*_k^uFD&J+RsMhD8T^4!vsmHABvDN1$7*xsm`+U9 z1;KInVLSK|(GJ5-7Zz&eVWOFyYN2^3#%=5v#@5TX!8_3~6K9`7it#{i&JtssCadhr zQ2V%UB*n@4JEW|Q@dpLrgA;MQcHQ%C;RJYxdQTc$YsruIfS_kv%z7~?4&K}Nvb+AT zJWRA=5W06VEhdDtteNT_t6ufnk2~|tk~oUZAJnEwz5DIAd!Ce5jjD-0i&TiX8!=Q$ zkX;u405PmUbN($i5cYgi=Na^l@F!R6)1BH(K)Ke8hTO(G)SZ)`<`cmYYNC5%IyCHt zxcEv|F-koWNq(PI@6F=S^(Eh%NFjunUTF8)opztFzbNP@4u&QLO+*z@Z0K=mKD|ta zTzA|YtKX8LzwK4_ayIk@+@Jy_V#>6Obz-$7Jrg7!zxynp^pA||XEq$ro<~xH8P`x2 z@(ocaL&QBMj`lWD&AyfdJVhD3C$uE+L_{R4)_=$TG}d0?4T}xrtTMJWLJ*Z~^8)91mOu2EkE0SbPb4Y|-}W;m?n1xz7X~<5iJy?Re?~gK8?B z9{r!ih0gU%9Me**f9SGYHL5X+%OdHBV&aysBdzrW;xaeQcaK(mbM;l4*Rl-WQ$)+# zbi(X}it5sT&5N|&zcErVz)8|5;lf36=?RXss zAf*baFC1n3Q$2_Jf`)2|Wey%gpR{7;ZqF&(-&NbjLNj;DEB+h^Cqu}OA0t|*PuL(e znN8OMV7!NB!VrTcNx-FffJBieIYyz!Ly+g89WJw`TIBsz73J4$ zv3^l3NlV5$UPsaT4`a{Hy4}dFk$nuSCLt)gSMyi!71; z-Hgj(PW?RhZ=T_#P#BD8ip=w|JdMBgJl_ii1KB)-HXIoCxksdYy8`Sh1&#T(&3(lu z-60xC7>g)x>W$E`4Mw@FkMpC@3L?Z4OYs3NzbP>H{FsA;{pWPFPy=VVk=4Wij64 zwhT!L?+l&)OWZ(;;eIP)SlBBwrA-G&P0eZKS@IH69Gbef5VEhRsXc9CBdjf*MDrni zmG(?-6{IXQp+A~xRF^8pO(tn|DTPx*U+6;=m$*57MIZ%({N-*(^t-((qXQ=3v<c_TUxT?Jr$Di z;myVdxFPG-e^$bVl(8nyVjOFlDX(G|r=IL^r5;nY%X<%T#WHh<+|N&+6AjW-xZF?= zoDR4>3!I-jYdV{Hu4`&3YEs=E&i$Qe)P>H)w8{+DAAhE?CEyS4g4|NB4fYpbu=55G zT1$Hh*tnB~2o0f*Y@Lr=nKHPE?&@IP@p_>!U4(2gdxWECuP$b1dI2#lqY1nv+U{^0 ztbKPq7Xe0GpfZZ71=|0h-Hvgj3}sPSw3NfPPap_`J>tEmUQ~#qLu-VIp^)ibcCrKt z8z}`yj$9=BKEqqWr48&L^dv&Ux^~W|(0}0$L)mYLttPSo^Y-`jwKLRy_|LTr(8D@! zZJoi7%hR`{>)2GZ_NTWd=FLI}dCp~QUDadV{kqs+)rOKNzLQa?w@3LpjBS+G^h#X6 z5IqAzC`_hr1o4cz!YeCJkQQDfVILRufyF8ewkWQx`A2GAr0?|u$;h56FGNSd{ef@? zoI;dQ5m{Y&{^G?+J4rILxS1pZP$M1f-;|0xyHc zhV*35R+81Hgxc)>cY52aHH)Wbf_BMAhqMeb_ORrA{z=e+%Py*-`QQ?eZ?C4m9QzF#0M)RGJuexZQD zF}pq0R)V1~Nb|tTAv;2G6U6F`A}i>b9{I~bvb4rnleJ)1SKecuLhZ-7rjRo#OWLc% zayPcC)7OQRulYQ*w6vJOW`AHR)&cpeh+&1_jxN*4xl;k(LEkw`n;dUz%EXk@bcjE4 z-KJB=FTwth#ZUp^;p(3iFVCy0i=47V_H475t+({!GvUPh(60tq#Q1NGcq}QFf7mgn zl35yRCHdC+S=bnFL+LfxDa>M;Dl><+-KqUM%gTG<7=_E#<_poQo`~C)n&wk6U&K90 zGn>XWqsr%n{oFsh@avDs@80E!KL*0Q#+f z>y=V7^H3(1p3`vo?*8y6{lJ~6N<>M+t_ZTxw{~ad2Oo}NtpjqLI znU=lbSsMcMQ9!nz za_$!r|D#1M_wI9!ov`@sg{iNRC`>FbD*d|w;o%k|&Vlh4Wj>tDafQ}8zvU{#IBcCp z58&|u$HVdtdvlG85}z21bJJ5$PnNISU%R=TtR(^2RfS6}{`Im|s2RXK4~>mipEUEp z5v3q!Bm5&yMX5QME{oqC^c)l)tDnYMErPM)5v+I^X39EPXp0PUdzrmtjhEE-EMI{6&F)7ke+~H(U%-_4{ee*%D3v;yL{MrEkXpE3;ykzC6)xbom9I*}^LT^0P@PSB zgj9WoT8%U3P2b?L*c5OURn6*uXM+Bx^pFW>{R2*YYg~C-3sq6cen= z45?EUrGXf*ttXzx&6_A&{r@V-|M_pstcX85^X)#7Gta{lZCqwuo~kV}4y*tMTG!2H z=}nJg-QwMbh4*;d*?WEkJClhq3Y%m{m$33dgQxJrCg<$&)zh^Lzik;|L&A7(rk`k? z4sdO2!Y3B|a!X+Y@Z%BiZh5jA@{;x-^)NWiqQKM zi5P|Zu|zs3mZU>hhP1Jxp8(S&{n7qUmiWo#cuD$QXsy#cC)38$PdA_JV--Ghk?FvJ zarWjhh^}KGPm1S3lIGZ8kFfSo(HH&KKAoQ~b5FC1o!c!GlKZN^>$0AGrqpk6&fg%T zK(4bEBV7YYF0_il0*I{sT>W=5Dy9U@VqGNi7k?P^&?J(%s7fQqLSb8spnhPTzNf#I zmhcO=_wSf5{~KNohNek94Or5txTP!*!Ai*jfV@s;Wcs#NmxeMCQ2!FKb$g@f`O7nr zL)58q8I{(2y~>y_f<7K?{|YPhTYchSYy0ytWo#v3>&p7N?axZjooViA_KCeM*G2M9 zU88yPA4Bq-J-B?^mMFR(jknoXDpWp?zFb>Hig8fq*{fMz6%-T;JdbUaR~C2`ww{cs z6-wu0-TaY>nhw@dDM8Q*IL$;8xGR-Tu`k_RKpblr{7&p^R#Va@X>NPTJ@3m|Sw*jr7|{cQW3Lx(*x0GN3` z@lr-<6@;r5a)8_%4SVpXa_3k8qgnnPB+ua;4Q<4`XP{2;K)^}{h;r3i55>$U(H|iy|1Pk)*d_d>XTUBzRIv&wB8Yxw_G?h;9yf1U-{XfIxg z;G2U){VGNU3W9?%XlQ8g4&ud6DesC-zOl)2k=rj|YJv%+e9@XVM-2UD>U(aNBc{K< zE__cn?dl6t!5BA>Qj}?hqC*t0JacYHDD*95Dt_sTP|-Ru4w ze_M_sng)dQZzVw?{#Onx@{|t07!$I2UsdJuhE`Kfoh&k-CkeNI49blcmG6{#g#i;F zhVHWv1@p**LorDnbNhJFITM#PLZs`VC(U$KYd%lgFj<$tTj|dt7FHoD6nC;Mj#)h8 zi=zrAOwbxE@FSBi$nvNTN`Z-;HiagU>oR({eI>8%^Q@ zj4*=EhJmc(d_eCr7iER}FS!kQOwJ==-B#v03Y%%T%~&vr5OH?S|D2#{z)efvF~OB_ zDrmP|ZUrj115}CH(j(hB!+!w^e~(xG{I-Z4lh!H)8t{rzNjHQz>Am`W;n{M_(;M_v zh{A92M9gn_%nOiGIhj2BY^{?iafIVc9nTwclj+YmCl@G4?VcY>w8n8(L=;G00-7(! z%J{(R<i7 zQu45u^~j}x$n9){rRvs6oFJ_-~&Lq zFL`F@`0Wu0JN0~XCB^G?FP@FFU+2+r#)`{>PcCk5@_=5MzpX(3?~(-nCL#RSsT53$ zNtRgeoP2YB?nNn{BCYm8Xo@SAPLx9k4IH!$hFr~{z=JvBo^7~nq3(Tyi3%L_#hQ^( z#}dPL9pd8R!nxy=dNfq$e+#J$=MEnlhLDJEq<2lMw&|?psZJZD*t3DcNEkk*oWdDQ zM(z={8=CzZzJJ#V2N`mx^W=^|2Z_AQy+#=R$*|0+Rt&$-D8=pE>CK7Y&Lb}20RhX* zCy^3*G?hzI!{6@^4_jytGv{N1b$ZEyAGWc>pk>dajt3=thfD&-Ry_|4Z=xN@ayO}sUg2hciy#Od`br?!>nl*({@0joHf8HdVm4k6reY*2isZ!?*SlThE1~X z>wflQ!vQAf)&^8oUfhckIQhx~xb0|EDFgmi1APr|!@~2f>7Fs!Nl=9Soq+q_q4~c~ zgs0*d_t~Znre8wHTs8LYyK@-nM%HO9Y`@-HXlA|w$L?ld8x;Cq-MU-ziBq6Q*1C+v23Mx{Lm&8 zMixI(jx-Ttz(ig5g$_&85a3ucQ5F+wI}mHdLf?PcwgLy{YS#?=U+t7+Hd_(Rx@Nwn z_nL_-CX{wJsJf#S0j>}ZJK;}wh-t(dl4NI9~A(152$UavciXKD${Jgc_oES(BCHh|M!ljeSujF zBvCNgVDT@0b|*?rWhAr2j%eVE2nkWjJ#74)$2mnh)r#)cwby{B9&~&r%TiNOnLIvr zC(hE;?%`gep`yYiZ5P^P@BETx?3rQgKK#-=1Nu=@MMO*tOd|lsvCyV~@roC`{6Q$K zd5Xe&KN9o8QSeqd?8|c|P2K1-5Li}}(}`dEH`am=t%#6-#S%=C(grXyotv$N)@ z%K4_*IF1w^SG#UPwfL#Y<2qHrdV*=)rYCE0ye9xLZ4;3G4z-55~GV4!);S3@n^~ zKyC1KFN64(*Ulda-o7>bX4IB8t7QAjLiqtL^{Dm!>ndwoP-gi*1@=V};&y;K&&;qk z$87E#QQA~~5Nn#SjNAQxMg4y+dw+e6coFQyR-ao>Mv~lrqHypN5_q5IRDC zt0z6L=xUMAYG*9$bxO;FH>DJMo9wGz$PC69lK$U0 z6@a7uF!WUA$^WTLa4VY)H2PA{?7pP}rjvpLCoHe|>vd@SG{9_@xdMP1GS>x3 zJxxN1+95@k8Do=8Zj}eH?NMoy*vS06ol><7!2lxqz9Pa;*n z$S{qj*?bVdadE(XKaydGqs8-uL$p6Nf-yf!GC!H z_|zL84BPL(l{qWgK8;zow|hNYLV%T`nhLry-KY`N%3juw+XykwQ6-U?Cl;g!br4kS z6~2vdSRSab;I|_aciJC&&_|%`UYJuF2-I03vnn}wF=l2G8VVCuAOroyvgu!oS^wMn zvKXvMmtIyuS{l9!Nx zOFPkvmE@h@(Rbr<9v1<#HiLescZL&CRV#w59@O=Hr!W!2XR>43S=TKM!4Se4X2;69 zv-;s9(;wK8Qzi?P#=lq#cDfsG+8r?$=XzfHr&?h|AdsZR0B z@fu6k^^C_ARrf5E?f9+*iPu_Ba^9YpRuKKZHDaXe?Q1(?Buum~|eE;d# zMWWfO=QKhg-psYs#-AdMCA;vF8QAipu?!0TbYKwrj$6k+>hB270kP2l(XNKSp6zm+ zD*)T*UyABUYi{?!3sV6*xM7VF)xYy>_*cO7ukV9z9<``t5=1_vAz-IkWM6;=b4W#P+`-|nJuszT8F_T>OoUO-tJ_EiN1O$Ih2ett5rhW6!tI}uXf zCfkbPdg0y_EpcGR{nP8Z~}z!FAGQ%eeIjS^8dL}p<^9BwGX z|2w?Bj)A$2TqV7Vxls7Lz17n6Cg#Zdg8~OxUeGa+SghFd-}ChZN=-E#&~2M8uQg~{ z3QJ4{Q6~V)%iI7>7mx@C;?+s+PaLDJA7)op-smx4=SPe=J=;u6Jswvm8kF@vU2^tZ zgPNuK@1(;*1K#~Vl)VQ~RO`|;te^s-1Odr8gMgCrAQ=%5kest*5g2k(avE|F0TBcx zNX}8xkdZtv1Ods+kcTjYZ=>hF^?mo;`~Lr_qNrkP6~*l5>0Z5h^=hlvA2V<;3=Y3r z(26=JPy@E7qgn)@i<4#4509%3w3f15}n_Ak%dAA{b!xh(l zAcqfw>H^5Nq_``GW-DzVMjmtSH9p5q@Osw*Blig{AZ69i<>}B)&(DN$#Qe@GZSkx> zk2jE&vIwVl%e!9Q$)-0zPT0r$hNcY+$UR550r1X@RU_Eg@m)cdlaBA9zSvH}|2V-Y z`^vL3pJh>uj;Rs~KKn66Y=(97+!cyHNPNniPQK~%ac=QZL0OXJQPn=6%vuEunks|y zT+K9CAB|o-}?aud;TGK(dnB`NS^rD={f~cA*2^3V}~9%fNm9& zzg1r6JLwEw5q;d9-&Ce4Id+-kvNGPJrkij4B9B_#fOm;;kxW&#FLUDkpkip+@RoS~ z@mZ|bufM~a|Lw_7MIx!GJ9U=72J40?(c+y$Xz}RS*cnWGaZ{lM-%7tNgM|vMBJGeC zGpeAZ3uYD;mhGS40m-%ocO?kMX}lNtm|>&H z=F{?pn3J+sd*vHAVvo<7?n^0(KIV5w91{?G$XL;G3m(u1NbP?1vZkALjwr!0vYcR> z(j;3dw~AGwEk%uPq~_dw-It=>4_xnN#kMWwNdw?kFVSeE|M?isf&v%7jl;aP$U#0z zg0RYLK_lgW2lswL?*k@@IR$cr>(qa&iak(JT#ks~yf#vk%nvL)@?MMgP`JqjDi^}Q z?O$|?C6zF~ae8CMo-x6DISaRN3CmiNAKf`P=P5?~^_(_GqSYjb~52Fzej1)`qP-W8juxp!}Tt&&s^E2Lz_sk-*qxpHtJG zeB(xbhJ&Rg6VU$raRaSib|pI+_9@W+;eBl80>t%zo9nQ|l&a*ZCA`c`W?kpIzf~0p z{)?Y}gXfs@JXLir0gbT9^If)EmGd^hoJ}rGN||5I)cna874g%$i!H8Nm{Il>C0x8} za`Gv*=-U?hu|W!X;*x2mv-E+FCMK8{s@;z{wm9bxS>P_0r!^bQJmvc?PzvHY?GCnl zO(FpUEvn9EITRtM>DF`kk7v}a2r%F;6=ygUnh3A$OV`OU=7*y%x^=Hy(vQ*r)-c^D z@9iI?cX;z=E2BrYoRbIbb@eubC8i@s93%+f%t!RLl)@JeAJMa;bba0Tse6j_0Vui5 znN={%1WEi6ov~#_&n^_gDnxl9yeB=lukmPeNh3e!;PDV2K5d~zD(UK8bnbyT?&l-7 zED%a!N80}bs~9j0z1T9~+29}|y3)U@$L2T*o^P0w&&t-3tbMw0&}p_OzPwSfvYy0~ zVUts(2XDEA#lm|I4*J#v*KH0uU1-!m26)4%Dmz|FhfzwDa0^M%nKzVPEd@9cuKpEX z6-rA-oi15Ccn7BrhT!S35fipp+kH<$K@WYWzYE`0ekbG7p2|_)cKEy_;@~nN*NFT9=C!5wf8|^L{!c;kEW3bgbsCsT zS82R0{R~yUduh6@@ZJ9*Rc6w`GQkTPQMaCNP5aM$=C*(;f;OP(KAto`&YB+|8`Dt> z@j%BV#dg@9^c_Y;@5Cw_VUXl~rRMtP$sZoK^U1WZFJ3+lBUG>-Mpo|lqO}{*%2%e0 zME4E&CdwAy^s?l$IOGRIlJN0E2^AFR@6BBe@PSc07YUgjBOx_lxRN!c&~DVPb+xeX zjQQ`ixe{?EF~-h+oXVC55h@j#2F52Rke&Bk$9;~QJ38GB&!tC==ae~8|FDmxL_aSC zGtnQ0=TrHjx$$g3j-rx@w@9z=_HC7CqXmsHshR&90RIj2o}~5P7)W~Hr*?nCwjf+! z$%2PZ4)!$gm}KoNl1-(&*XQ)tkY8x!2Ldb}ODj>JGZu7u%aax`bMoc(BWIvz2UFT# z6dx2l6{PA{_#8(JH|Us}@N`+l;(#Ox>DraqCgZ%rW?zF#CwV-iO1Cbh!6$augs5K@Lv;i+P2Eo+hk4YMUhf>|yro~cE#vf@6N{A7$M%1Cg?>$a!20P2IqZ3-Zq-W7!8R{< zRjrl5%Kih+-|Nm&0&i?JYg4~(2@l_5?{2)2bi}kJaOPIbc)IlVh^6CH`kka)p6|$a zVbOdKm%^|R?EjC}`oCAVQrU#2pzttSe;Bf1iyIA$wiBKyzYy;mQJ4;U%a~A6+V$&K zp3C8=eQEO~cgxArq&6=IG&y)l?j^0U6IBjtv3I#@nCyF)md?m@ROJ==!wkZh5UQ^9 zr0;Zto^awtH{X;iG`WcZygVj%+1yVcT13cE@T>ubKj|5A2`Aw~g6D!~yJKxtRnM?qx zQv@g2zf||;mc*p9p|wPf%`i;6Wysc+Cte9t_si z89Llhec**#1Y{Z z$62xSboiQPjpu*@J^R>x7j|aY2zLirL1^0}5w8DD3j8;c;t=;HD(EM)ruFJ#2cCU( znjIFeAOuVV2Ip=IJrxobeuasNX_kdicrYZ!Gf;`24iWG3C)1;6cdX3rHkZrer#UXg z<=k3g)lqz($a6T+fgkGo*ewun*=h%jxbfy)OZ_eae246W0)|y#<#X2g1q3nvuh$8L zV+fzw+skhg$TRyPeCBO!jNYj8QrO<4edKH!7@q!?1b5v+<0dN@J9y(Oxo=OCum$G3 z^`f_QcYrQfr3_G=OUMQuJ)}klD=E&%h{?M1ulvMW? zq4z@}LIbyql*@xCk^do@iq961P8JJN($tto3_t!XyPzrKJ;VNqiCJ9ar(|zHI zRYvH4r~hpiua zPfl*%=`dpJJBuYkl(j6656wqarR)DG2LAQ}|NZ*?>pxHl-b9s}g0NA^bvrHS?Xm33 zDxf&B03^>3&ScB7Zz)h(H6Y-%aNB}RYf@v+oXj_U>}HwK%d${^;;Ih+hgBOGkMMCL z9_|qxmu?9f%;Jdis5vD1p(58w%{3FPmzS-nln!$g9Ht7c!Vu`QR#?7f4easgfa%MT zC*cYTlw;cdy@GJ>Gh6UxNNMHrkZ|T*gCbyF_Fe31i1ckgt=*^lyrP*M4!KV(1nz0g zNGTiz*|A5<_qo6MJsDtxvCSjTN^iS^WK90ErSao2&WT?w`jJZ``ls-RVM4c(%jxeo z{Ac5W^MWA$vL8utb|nD=FymRiFm)CjrJGzWq9QWJ(Le>fP0FE`arTF;qvG+NkJIKz zeNFgCkLbS3_r-RhcTpCJ_=W#5umT)yPpGhDkA`BGm1+sDoqkrA=KyV#yltbd6ed|~ z&kd-jGnrcsNk>|2B2cXdVmFc9(p}h9P7TAOzH3rXwK`?_qIA?tV%=Rs14J^CZ*u<# z34`f=k-6APa}k~Fzr3vy%BQ0J<;>h6d-89a;Qo~R|Lwc7T;N4BjP>mW9SS*TZ-Sng z+71Jq=THm3rVCf9r^)vMhI|31h->R1VCMI8jrHLBxM6fex$_;gx~GW%X?z9bHc%fg zFI~FNt?n=}#UQ*)njhQ~VqtZ#_HFNDB&%MJDA*q2@#{ji9+{N5{Pcngzo@?3kokPv zzUFul>TtxoHp8rQ-jw;eo3o_Ms&ddYY0{f;Nj+RKO71x`Q#S}pp>QJ6-@i-aI|o5( z{@nJAyT~?}C>gjors;rul$?5tr?g)e@_!45Tr5}rMci(x?by@|$R&FH6=T;aG5mKB zlDPA#>JP3_wNRt(ZIU3bKX69;(FHjjfT|4uR6Vy|qSQils*oEuE(F2vUOvH~q{Kdb zJs|(o!$Hb-JtwTax7B$;l9HNQ;BIApe!jjmw;Cr9_oZ&7ybBciseafi%HdD`UAW~$ zx7oY8#HevHRtzcpyM@|Gq;`)7)I=C3c`&s_yf++NYIPQc7a&F67Ij151~-%@N#$P| z;qNH+?@xkAqi&!TUwvP!3y-?9$k>zwj;)Ub~65s z@B*t~9XghfYwy4xSht$+$+vg_S9Q~{ui<}=ql8l1PVJlx{Q;B6^y{4h#5-(e#`yL~ z%J!pl+~+#KrVQkv4#(e&YV6l01U)yeRT8Du2i)~NckOrM$?)V~Qb?U?@V+nvP-~cp zC;MW34z?I}csAYRf%ha{nxKvhk9!zUJykRI-blS`(E4XR3qRI#&>bbk$mY<#fUJX} z?@icD$GBQ7+=4{cfp%GLm~zb9QC8!w^eKr*$`gOx{IWxUN3XtyBL3&gv|$?nJ6H~+ z@_rUpRzBh?wrh%4A*BtFFtqFNdThhYt_^`scxM4yCWmViM}qeiZp8hX&->2m-pU8u z)o4aqq_xUMgcK@(i>ko?wy=e14 z(g~ROR=@gQd*LoB`=f>LHd~W9m7H$0YrO4;{EXAO03)G|M1B{c*ZAp!5(}&M8p8~7 zrpu&DocMCX9K09&(U5?~Ij76Y;h8-~dk4gi7wb>_cdmx#GurgDQ#>w*n`=?XZ^r9R zsCn4a7qW!vkH4sYdJ>6qK<@VPIaFAlI@jz{)sS~umS2>JmHW$x(l5Sl=18`mq4^ds ziG`$y9i~(7ly5XQ)EH=8t)V|0%!+FHQ5NbH?j3`(eTKY_kI^m1S+33!tp|n&_r;b3 zO3OgLgGD7RZ|WBd-DVL=fLm=b-}aSZf*oUv0ITnLYyrGvsL>Z!x``OIo=80kETwEK zW_(c{lN{$ZsR9xGL%+WcB&Cmxj1>+wDi$A_zhxKhDj8iOZ zNgsmN1FvU4aZ<5CN^1vE2gX9W+c_hCoh^a3zshlK~*08M3 zZMm;n7dN@J~GaUQWQp;Lk~tu6s0xROqxYk++IJiBUN)V{=(~AUus=yO)puL zQ6jA|KkiBTIUv0FTHFHY`orctmt#GaX>WP?sT#V2h4f8q6^uAc0w=W2fWfT_OkkrxYNbsUoL^LRjUN% z8b)G8H^1y^^x05b5oA{EY;HylOKtvAkj9vQM)Kck+yD3+g&$Nns8!vy0oI#1uxt4W z6)WO$MHHuiR|;K#7uUnJl_`NPUrmdt7gCkgV8;gLFk9`ecJZ%F6=+=Y?&IALo$HKT z;oSaUlVxF(>8{<+$X-LljbH7Z`%?a_EW-jh;o3wH8;S_U&-8UC)vDP?EbSKY7m#L3 z%KYm3#weXG-0XYw!6HDm-iN@kp?gd&+o@}cjIx^6cMFc%@MxWiUC(ef8gzlz*d}rr z`v+%wPNsurrqybP81ZoFH`t^#QsXD>GL6H07>~;Fy^Zk3&M1ror?z(7h!P{rj$h~> z-WJ-cwG`Qc3#W5= z1aaP6dhx+|keJ(_)WunFUSE?I7M6C*Oh*yL#+h%7>&dF4SVehWrq|BuRO(a`WKXz^ zEMxTGzpCtIv~_1|`W^sG&P)qT84{^|Y&_d6Dk&&{UjD?tq?6TEPUXH&xbYo}mdd=? z>tMB7R%gQ7?e|i3pNt#XYV1ral}RO@O9q1wsKdeP;9^ix265-E!?j$0Pl2EvU?)gF zjjoBWiFDhL-=t@!3>aTu-wp?5$-XuIk1zSZJw!av>!LJuB%E(4MGZUI-=G%V!O&gNp4sR(jb5HWG4$ti<(wqMu~R6)1uph~I0> z6-UiIx;vQP&t~*IGLu4(FgW{s9g3ej-O&WB-I?4Ef|>mbuWc)V}y#NRDhD2wwjO> z0tVN`jgL_v)elLhOq{R$Pe}y#+q~g5NPkL-S*HTf7M0KWhFVQWtg)3qQ}r2UuR?Q- z`mw0p5ngJppu_l7PdFr?y{mdo@{-2+HY6{H>*#25_s)6zdP&VjmnGYom{*p<#L1_% ziL?O$_p2U}{MD&+pbZ9Sy!e$~{cDd-quR$h`$07FQ&j`lJ$)12Qb2RjBt@FtED zErJ{tg-}-9d|aecU}DUv3PB^PVj2Z_h1lkjVPD~G+8MG z33&MU@C0UMbD19@;he38IwBjtbx)|O1Of$MbB`5F&7$At~=Px(mkhYH_+WIUV}}2UtBFeZG5?D<^3AYZL3I3gSB~1 z(dU=~q{fpCk;^rqud)tb-ELUtm<1G|9q(SLnUp%tHFf##MVY`zTTkTBn}CNlL~O;< zr}s8bxu&W}*XmH_7MN^~p7{RmVTLI0V-NBVTEXE5%XTdTm9)pnSt>P~q5jxnP@@eI z;W94SJU>@&M>HlrY=+XgY{%C%X6~@MX!~cf0(|GgvANH=ZGryqr*{LZLkCA=8}o*K z2zn;>o!ld&anb3_!GtBFLrbTf1rfJuiJpf|`Rw_V^{gfPQ3I|s&5#6WeL)7`i1YmO zc-2jn)xBIxHInPJ)F?~mXmr}7mZ8@qXki2HWln{?7qE9Y+MM{EM01moPFK&zeVkIs zI4l3O+bpuB<_lM|2-W6GRjC66jHO4vI=Hc5U_H2r%w35;lzLwtwowF#J_@|upJ^LT z%ybbMH7{9R+D;egePJoeK+q`dt$K{92$35r@&No68TDJvEKv_Y9atrPve&_&mTNJV z`m2xOM-Gs7{23nuE$a4T5!cnuH3A`4K$7Va9hcNL#^>C60lrQ@WHc$Q*T$8A2fOVx z96`d)U7Z7Lh$Gx9k9O%cb{u-SJ1 za+1>n6$*o~+df3xOWTL78$yxhg0WKLa=F+_Vurso)p8(FiqP&1WXKp_!=2Xy!%>2s zrY#C59fhpoW&>!#ELHZcqe**iCN6_}gkNbHnN(cpFrKt zIf*d#pzdZ)KD>$ZiDfWJXPbD?8GPla?um}fzNynTJrJ7OWi~QB=B={N##>>mJZMs} zWm_9qk@1lNc)zzm*CrMIu0D{Lzkb@d(VMTNA=_56Z~NK&T(1ctwK9Fzowv*}YQoRx za1g;q39~z%_s=kLUrF75uh!JBopt`a@h3@Xm1g#dtSfVgUhSG~o#^;fXPQq2wJYI% zaFi132l@sL?WbeVpUOPlZzarZ=724|Hdf_tmFS2$?KUxby5c^qFxbS4LG*mQ47a1$ zx%;1|fBbq191w=xU0_+6pQq%rzq%Vi=>$Cn6SJBuJ8ue7OS=KVQD*Fr+|Rb_6@@{3 zIuMv9juN%{(PmO-T_KRn8oayu&&MisDqpB*3&BJ3YUjWi7o}H6t@p~c0s;cWT{f;Y zBAI}~VQ~+it+`oZFR208)IQT5f*Zri&Hfw4T(Ud{6nsm=EiEl47FY-yDrt=x;&=1F zvXM)yIJN0(^RLFMOEjWxIkpm)r|AdKHmAxEDqR3UBhSN?PM2}A?ZcJ+A%tPL8U5wO zLWoPUf!67j_;W}eu;~$Ivhq-?E}Xw9ekp$3{uSMw&n%^sBR_+2C5lnT1-+op2^gR8R|y8m~9n;+~T1r&c_YF7EgC{qHb8Z>PMsEJCpJ*x8UMKWOnS* ztE-P6|rP)zUKoM^qqlW#SmE z5C%;v0aC>jp4#w9c%K7NsH>^qSl+=v!+EH&|WPltao zjMoS5|NRmV#SZ2hCNMvvT{&%Ra!#|OXJYPju~IWkFNt$miWukoj%iCzH|Qpt=Xt-Y z#a6s2A=W2C6yw=38+p6BY##Sb*?}-7;^72`Z`FtA$i1pc`TLa1Yf{L9r| zKLL~O70EGS)-sR#U+P7|Y57awtbp^g7kW|!JgC!ZZr`%cyyY%QD*Dbs)$c8+%eRMm z_)LGlTEn9;kswhtCf^54y?0;z&EV8an+~}iW9H(}4CLMf1aL6Riz6aMto9u~qDgq= zqTQt0twKX00Xd+O{Tv>gM?xk_95hD<1PCW7O~Svbq%`^8M`r)m#rF8XgeQ(tLB&Wq zHkBd}Z6xBXw+PQT=)YnX8fPYu>QsaGWOYhC(*yKTb`J}CH?4~lH2fbo0Y&aPR=e|W z*W-n&%VR{qIpoR=aFD7Yju)g5&mRsrd9(Krx<5%Oe8>POE3fL$LVJfwZZ9-eA7YnGpZxTYVcrQl1Yqcjjbl)oeQMgk^v)?hDOuwbn5&4Fhgl zj$Nbg9N30v#CSv?+teX3F%=I6RvUBGSxyzEE_(dEFYq1PS+8c-#NjElt{()j0OVAK z%u=AtM4F9HP1lvO-pXBWLA9UE-N&Zn9_YHlU?&@|kjGUoxA{<^U${o4BlC@6siIcS zJMVc62ku#9LAf@iRTUUW-h9{ky6DI3iGN)#@kc>TDuWW~MIJR1?bk2A$P%bkupR{qo`gw7wdoSrk$|4dCH*d6OtXo8D$DxgjgSd3`_inWWGkK12m3mN zKS!T$#0$-PT7<62qFaE|2W)97dGNaUoAVcd_Xe-94- z`KA93AluX!7W7P9ompRYX3}4MMrhHqa1EbZI?P&qG^TUBwOKOCt-6v8C;mCj9|Cq# zCjc9S=(^2@8cIdzD0#5k#&8F`s@~$XrH!Zal76I1Zaw2`^%7OxuqIqPAY_0Vd|*`S zK|qLT3!nb*tvvGgQ*Vw#9#9%Ghk}-rr+;=!}e; zkju3`FjS1JLe2XK!5SKO$`%pu?cn9u>JEId@f!Sl!77Fx9%|w78RBuXq())5uf@c4 zU5L0@j>57bu_v1pu1_m{y4@Rz_4l+8=yqqva*lKUCD@Ms$9%H3L-W0?^b$@dZyR@R zj7kWwF}KoLb)50{jSs?vNSz8;^danKTWiRlT_aGzKw@SLEbQx-9vAUmNr;)r{nSu^vqw*Msi_DGb6ZuJ>IevL_xS zuqYw^x9#ZvrYA5R#xa#4F{YlogR}fdC}2qdMW#zqp#l0C@QWQqfA6U2oU3&;i_YGR zRZG_@roOq2Oi-sqy{!A)-W-d)XO%5ByVxvV;D@}}lhZiPyK_%$92mJds3^!Q5i*Q| z!u$>$jF)Y8+ zgR=%lRp->0Mlv^FH&{WbEf!arGwxbqEy1XHgwVFV6>O?IxWJ=6uBsM}c;3wEEaL@fZ2WiSQP>}ZzO9{Eb`P#()U!}HD;SG172wK=reXCaHuI~gq*(|P;z_kr*3YP&3x*WR1@FVRHP(h_h%@?g^-Sq%_=*RH1 zRFdG|iBy%neVIVAcY8#wM`!J(lmV7QjJ@GE-HT^iA}A)G?{J=qv0<;!iL+8ps#_(#7(}M=omFKb;m@M_hUy+Q_McUILBuS2BU< zRRG>XCrb=S&!R~cT+08GW!_u{=;U<~!apOwpuq!?G&_NbN1ZnAl|ZS_wspN?ula1Ev?e!JwC{IeeqBF>QN0PLcKh*ka%{{3^Rh~y zMR+(PypoB@u~G`SVhm+!IJ+XjC)8%I?kYjgA;OGEud0!>!z8Kz+5N0vS;NJE zK6BdWx;i;eRhwx9rn+`zf16LJN*s-!SYU(h?t3X1ONW8H`CAe@)BhnM6nsPQB{pdJ zDcb2}h>@1VCG_-%`5RRhp$*(hNf3)fbkHfL{|D3EsA$*r_fDo%aNV&j_vw$6_oq$` z0-8H&>TkS;CFf<%%{iGG!kp=;<|Mb_KhhkhB`qmy@4?Pu47R`D&u|<|ajfxzn|gA6 zzA^v&35DY6D|O7w^m|0}(>OvJ`D0XS`VlItwzN7b&K}Q=?g<_v_AO_J_K9P0%3`V9 z;E$W?!Gfa2l|_}0cMlI@R(@_+%CR|dFYOVpx%ZOGp}V1T9DiZO<%@_qZ%I5 z+BT3*MU<;=?Ry~+cDf#6Q9~^9bCnx$tax%1_SN$vHq|sjuRLhK6sPMJPH;;MJZa9P zdHiaD-qUhVkgnV)l=>MPpjJ1f2;wJCjdPo+IZpT5zu2RP=V$kfvUt5WNn_r*>%ca^ZPun--zmu1a+ zG0s)MnD_kUS?SeG*5zSAqr$ix_d~=XEsjErICkCc4`>R;x4RhB*T1+;lC@1m@%)B~ zx7n)l?QC^l$vtvq3g{j`1xSIc4?n<@d_{>AQ1w8D#U$6Xi*^5OjZsqb)+oa3J2(yf z^783F5mK4%5VnQ(U45ecq-G~aOxj{9PS2FF-Ahc#V-+49QkIzJqDJ9PZ+TaVFhyTs z?kJnun08YCGnU2zzW2O}!2r!nU9VtgP1l_}VMZ@DX+-Dj2jd!9=a9xqVHacp$wZ6l zqX>Mv7CEEwwT!FM!*G_ndu*7m3C;7W@Ab3EJV#!Xxj(0(AB(E&J#biw@3R&`rPpfI z>b%RmRqg13g#lANJVeRPyVyWw8p|u`@C6_KvQMfZTX{7zzNH?Y=vO_s;rH#3aX&s= zs^t;Xt8v+m%8S=h+^7ApAw1)Kw>}v;RRtmG{o^_t{ouSgq@J6vWlz^<#v02JjIAA4 zo;=C04tT9zX#tl>`D_Ze9zfx`!Dfwd)xU1Vm5d3YCf)G!E#7gnI5t?08>O5@qHZI$ zhWR{(j<`LCYB*lpB@*8`%pu0%s&Lu#B3ra%>kgH5pRz1W6j)chCEK>3<3uSR7x%L0 zUoQj#jxIVOx4>7y{UP9(zp|>HnQ98k8Qz_uqX7 z9+4xRjwIpSmZ3d+fvrRsy>CH3f4Zyx-dK@Pw>-X^)b4i&3AS+Sg!jA6gHP(x{xmL$ z(!O_<#$0*LH6_P@AwBb}wX1VlA2fWyNrBd{$_PAd1@0!d>4XITdir_>4yQaq>^%7@ z@eevto{xygj=$FjmlGs3^b%?-urrmQ7tlr!Ju>}d>Fkt*SXYN6L$T_m&Uy2d1PR_3iN;FJLD)2@ESgWk#d{AG0w82ni%sj(abg5*-9>N&J+_6D z&XY|PA(K3fS_cxt=dpOIxrci6D^v{UoyQ%d-XPv>X${(d(kMlrhS~YS=1DxK1A(9L zSrLiJW%~l8ld_QG%&&QQd+@9}C*sHFD94fW`kKR!AvK;k)8Zx%=Zr~@Vq)$Y__?(; z*jY@D?UKYa@JC}xC{VX3s_IS1K6qpDfuz)N>DhP*F^DI&KUjNDT2WM@Cb<|B=u?L= z1K_=5N&VAb;CCQgYQAzcOIoZERC3M#FgEou0gbY2wD(3IT&f9#npz;#Jo$U55yVvj z?Z-o4*_RvH`X(mXM*gQOsHy@9$4IPE;sl0HX@@TS&|k?@E&n1C>Dyv@c6VPp__l%F zJwi?n7AXqu1rSfyI2vFpEu2l(&Mea$3(Lq}jTcBxh@L}O2g|Lol{96qULUcm{G-@1 zg-yqFq#)lIHx4;>K2hW+gfKMPpR|OUCdEYG0{ya@Z4PZfj)^u9YzauSQAlfO7~Rlw zev#;teCXIF5#=;3X?{H4`W@+Kn&?AAUCCvDW%xqW^c?`UW;@X=Gzvz-`gfHmGbOlL z5N?e(cW9BS9enKCChQDc_j}ECs^lng9yargFFy7~aBC{~+CRhq>%{ZRktl5F@hI<9S{QJpQP9F4M;Y04x=!U&| z4=2Hq70Nf7CORuKY+&Q?H-zVODbG0DE&44s*<|t`ny(l-%bE8nvbx%^U!z%TX@KBK zf1yG1*Y)%C!~pKYvzpAg>}wXN?b&suSC~}lfRLOnR1Ww_FJl*B%MK#jF zVP?sUledIfiuRZ3D#bOBY zPA>P&!$PC>XCI;z_nyxj%EM;Y={UH=ktJ)wr zrd?`t)-(8^q95p`N1rZ)Z<&z3tKPCj@3_%N?dD%j>?b@d(dx4i@Eh;7&LsGdWcFt5}EAo z40n&lH?Z*S+-mdx44)b?Ttnc#39Eh)v%9RTMxN@!I^^rslNQ0gCPz`)RTx$54G0xs za)4|B$?(|fFMk$bGC=>hD7k9MsrrFB&F^+rJj7h~r_^trm{*f;9hjNK`wAowYr{F9 z+mNZ#GGKr#0@@AX!<*KXafkndM=me@8v(=R?c#!L5}Hc_3;Is!z~p%a&7@?EFy*nfM7 zik1RoyN8Mt8mhHePitUptC)L-mmL0AZ+JAPfDTahDdri$y`q7-juPB=(Rw6S>c?TCIyNS<+a1{ra}Bte?@hbUbr zK?ShJ!!6g2q-I&4&8Ro?IerLoeS0lTyYO-r-Y zfi;aB1234bL9~YkmZr=@3Gtsat{Icl>n@E%qzT@p zIBF&WU44Nzyj;ie@fM))sVa|LlMO1?3M}Bg~5$52N!MPBN+hF07t(L(gJvL0}gZUd+7FS z2o%m38-C1bd!GOLWAJ+qVGtNENpfexAE3E}FFFFk;&k3oKM+T&YCo@je;p7-xxEcx zCm1ukw7Hw^#~;_Agy-!-i?+*;lolTHNcKGB-ae+44!dSME?LCHWmO*O^&PAv2~n;& z0D8_0NstDyTBE=CA{bvEO+8R*>?Y@Rdz5Ry;adF6M;`J* z!2UAkC`4ft-}fgbs;0Ji@Opa6XH9Iu7I6E@AIuQq>Bjciw>m9W^Z5rbkRV8cF_3|Tylp4qU2S7}Zy@|uJ;M+0IWX+# zQ;n1B7=UkSVKa@$%GfL~LE%ZO4vRVDMb%hQ9*KiM(_4awGZ8_2GW@VTvOO;(xxpQ) zkQl5davxLd*q)JQaxdrRJj;3{tu;}#>B8*uYtfhGl=dsqcEeUI9!0Y(iSP7+5XBY^ z+J?0a{vs$`iAq~?_g*MEEwr6j-dGV?m?kS)q4|m&FqpHMYhk5W-ZNM9U$w9n==6$S znEIr^XWhVuq)}$|E%Kr;R@x$R@)6`WJwS^(bmc@LT%aXYBw>SWu{kd2Ne1(Zb| z6Jm3@U#ISAEGXv2yn;d)lOjCBtz_ypoizBWlk0W0T4=s@+MD0oK1j}8di3cxmyUaD zv?co3cV^v;l$CyiTk56uAChmu6Qk?G)}=J_F&G@69|J{Y1!jVSzx0??wAXp1#8n06 z>JX+G{VpTiz=OR`$MVt|3cz+#W+iTU#8Si%uGT8o@x=CT(!=oZx5ljoM~SETP{U^| zW8U(b>+t)<(- zNn>0|eRHs3daZ#W=JH1=amy&_5Dq)j=X)1}1RzQ1pwr?-!dZ`U4|qRK!W?d$cx;xt zB9M6EM{)knz9+j(ae?5Fm-{TVEGce>dWmh z--`wMSTW=+14I^?N6XVDQrPn94YhE=z`x>XH0*$EBt{+*_iWi|6+88&7>C-a@iFRP?(_85SIVr_W zurRh3y{d0X6=~$Xc;`2cs&|!KjXhaC)8BA%OcVi}#5aPTW6|s&ScD5OxBrdcrSV@e zA#GpfO9-R0mjU6*QvsR`H|d!RQWMGZOYv6!&KO`im{}AdYpPB7vqevOR8N4pae*9| zY%&6RmTdn?lcjuf#(^Y(#&`ESY6RlXADpKJ$-^#Q57257y8pdcv}FEObff)2{#6?^ zOy`my5Su&1r?POll|J+7s|Y$mo^mg~9{7UaCsfnx*H=Zm-0m34KI4#IOI9uZP zZU*P&5?z+L$ohWX2sQ|;n}TZ4rONAUFW1El#ze>JjWs8L>og!xlVxB!xtqQc?cY4; zbTU1R2(7N29({*jKC<^-qRu5_qT!)#u1|~oSy}bREQW15iV_OHYF;aa$2&dC+6DS9 z^sRZm*Gqg zwLi~)EKBO~O^l(iTjz*6o{wWUwU`YV0DP?Rp8$Y6!up$agItPlC({55UNS(jmDl$- z1uxzn38_>|;4@(M{-?2|N<6K!a2jK`OmGht+1n=KgarH%^GJ&0)ECY?_{V`oc#zxy zC6Cl7X|cQI=0^$?tHth>>j5HP(4~dssY~4h!&&_Pv-B}-B1f(*jjqqAr{yD`eieiF z3&>xPL!VrHd}P6d@8U2mwEsXY)1g>-fBDE2aN-zR8_XcJ3WxG>q5)||N?@Y@cE8lZ z2Cn12aqls<-`Yh7Sws)xS>xA9tBZX5XDMwVQ%ErNh_v>0NIwCh%O(F*60c}ffMc~CUsx3X5}3;=05n+&Hz;{Az?QHUmsrPznQD7Pf--lxfc+$FbD{`welT2X)t^%B zumUa>NdA{|ER-c^$xi=5`(=Gerr@u-F0SP|D2pkGmY!ojwfM2qduArCpX*w;tVwSo zfuXxhBi9OeGteX$(JEC{N{CW#^!#)no$S@`C*UK1yQfD@D#0D-dlOKbQ?xbvQeX&S z;oC@75j4~HFus%!%a@AvdfEepVBAG#NktNPslB`%K7eV^y#^8ZP)W$9{N*lR1f#?n zL_|SRKPF1LaaTI?FoZVd6(_tvZJKBFRU*oK(CgxtMXtDCkNC9ECKJJMXk1btsYYi; z@fdM}2CMsvQ1=XrSPb;8Rp-?WKH<7KbZ}f%E;HE5@USCn%O#{Ox$cmn5x=nt3T)5a z1r8HLy%6IcU^W;R2JA%)J=0MD?4?$%=tFHwy3Tpci^XLN?i*BYkUU224SP3qN3#Su zByUUb{haTX5$atw(6$OaH(Sn}t8skYBkH|2J$o88$7dTB!{0nfQ6p8=XtN#+=2l`=48dl%t zi4N5-W*tsYzR5$Zl}5yKoiI3leVW@VILonW!<38}P3DQy&MY(W(@N+#L=$88feIc^-K?>TfB=(jfnEpKi2jNTz=l*CawzU?@{ z{@b@_SC{#Pp~`_|1DTaeY2$Ku(Vndg1mX1;x}pU>Pld=x!XSn08`nOMl4l2HI^J~j zUo8M-aRLWv?ltEU!tpI=agU0kG)AbhZc0>*C3V`EPNSy1LbfR z4Y{!s7O{sD03nusE}Q7tVJS&~V(7L+HZ(Mt&!?3J1qH2}dan=ETYc+I4LXrXA0~cX zVXUF}49)(SImyA|L$0`-tQ6i_7tB8W^?XOWW7Tx`@X);Qeq|b&a zgMzNnXgjr5oWr0ej80Y`4&&oo4q2Pg2_AxBhWNlh#Hyag!hb8D|Nfk&|5llN8z=i! z*_ZawkNotg<#uiQMvD_br@1jW^B zzsI}4CB@B;kdj-Ojcsyy0t-z+?;E4?K94^9^re3EAy*eWPuIhT1o7F%&%1p>dt?kp zd_enW(8`!*N3o}4KIXCImHT2*kUbTj>Ex!d$RU6e-dfP}T1x*sne}ed_u)o4zj+EZ zzqAJEn@}0n=IacaS}sazoG0wAm?0y8B={h(TWJi?p%W+6Q#nQbxrt3ho|W$fD^jBr+kxviBiplbXe z24il`Dn$yH0czJy!|K(Zh3A-XEa|wIFXigTwCD?!?il73b_M^~V>i_eEO&KQcbDge z-!h2fM;~roqn#1%3+sMfud$5fcW)LaDs|t9NY3OSsX#u#d7d1fO8|LbxBt)w5wzo{ zHv`cSNxHy6;ajC5+Gm;P#|CTQa{4nBS|A(Cz3$`w2Yy#R5mIKFT0M$m+jVgRBW-zI z$^Banvl22(h%v4Q(z2q@D>5R)%X+s{;K-WnZ_RVa^CRsHcxzi%uB&75h}FA}K>~L{ zQ6C3~S=uZWxzA)gn-G?`6~c;Ujr=w6Z8=kuK|XTO=MTsDxycbY=V}$bs2=)(iWdXS z`z!71!)xy5`*rKZr3$sI5%rcOCr`FQv6emR9W~~bpTx&m=P z<^@5JpEQu8q-XZ8!Lj7il4pM;2{awo11m0+866IDL)NnOrQHQ8e*N8`-$@ABzY_08 zA)Oi7R!rA+?W0p^&Vgzo0!aQ2faH&V^S7CmcE!MEA~a@5k$o9KI!tV=O$h;5I)b;FqeY;fucJ>ABo5xY_GbzE z|1@iDq`#e8_4MO>VXDUF@G(Ea(x8}U|B2udnaSi+ilZ0YTLa7DJbjHnCbM5DN|fc4 z+@}=m^v(hW_$STL@>FFrj8HiX#2%AcbXeHNx(6KEd(8B>)6;Jte`u2blhosL>n@zb zSeekK$gXzFC70`$yEx4}SFt&08@d=jJ}BjMKJAAJv2U@UZayfU1e|dc=H&Bg7esy5 z-h&!uo8!zE76mC`>A`;TBNQs*v(^^8zg(*Etqiv#Etveo?kqL&A#th&k$q1ELE33n zw`PAhGZ?sgE+Nx1+MW+@*N!EmK0Z3+5G z%fq(iGFOfo-Q>^M4Gq#tpZ^s(u8~ZQ6RgW6)@b&>AsH&mZEt0cf6ezoj4-^8-}}fn zRHDc1eC>qwYYx;uLBhqAYhin4$EMFmkt5SSrF za)uTG0R`#q4(U!&LQ=Y8=#)@GN)V84DQS?9?(XiPhjWj==Y7v!d+&4B`}mJ*4a$N$ zuJ3hyu1_3Or(NbYZA*InBmjKv@FXy<0`DaXlatvOF`&PHcCsvxAUHBe=r2j{lPMp@ zxn+r9vvt2sJr%h-O5soFqG57FU(IIR}rj{f{3&zlG=MPu`Y6h8reqp562*_<9*)8#8Wzj%Oj?=Uh)35fz5>HXj8` zha?X%rg^&F&7D}!e4XKpcxAmb+-BX!;>T?_y^42PqHT#u_x*=8!I_? z*(5bm_B5;0wPdW(KP&N6wjz3&Mv&BCwLJp=n92{7a`L?ijtBNRBbnVhY^?Lv^+WCz zTj)cXdi(GuPF$T_@f#SL@+NlY>(5up2t&h-)9p#m3a3$8Ooq&PGo2R3g7eBIE>Ee()W4)0o<<>#Ryq^ageh zojAD=3N1RY$vmAYemJi-Dz&+Nn)k_-=(Ofp@~S|~r5K)o8H#k_4DjHjF0NgS8yI?& zW|&%Y?uyu|cRidNhb$1EUj62IpWv-b(lvJTllPlG@DDC2v&gel2DV7NM4b9P7*ASE zs+)b{N&r*%a{L6%f3ZtNZ~*!*B8@l35pUp^hfe~m*rSn(P^K=zI-iq#FPr|4yW`Ge zMTK@vkz*b5$7LR$XgWIntfxm2-3?UvBK{`U4bOn`d*s&E7}C6A z0z;%@M3 z5ILt1)9Q>zql&^F=rIoNRQIMdi0~2`+@g0lFYFpB>=-XZ5m#4#Hm7k^5m>#CLAX$HA?VcM75XU>Pgm*oICvVHYYd#9)9MV{7K+!glhbeO^oI5 zL>81|yKaR=q`uqQCj=n)oK8PZ$g2f=9uW>PtfAuCR}|O^N453s+~gaX<}Jwa_z!)d z-Uijy+HjeQ=xYZhs>x(L^n;|+3!O92Pvf>=S04&MKk&=U5MiaXW5NFd1y0BmH2fQI zg5Iw{<&F9h1b9|K(vUcl@4l{;TU=DO#%m@j6(QA;(>5PVD&G5iXvCJ4vflU49TzyD zp4qn$IWuvCW5s5l3PmHQWC=N8y1uggKTufT2sD+l&#g0}&_oRznnDss>JBe}C z(67U7?5?G9adQ62Fw8nrZ(fLlhohS`^T_y1V8~3SpUr-n(c(*84IWlvVoq0M%nUDrQ-Hu?6S@0bUtq zr=EZb8!#@20|gd;<$oU+(g5DS(e+^r-uExI^*zPcNN1O>w2y&*4p6IkY}Q)p2JK}( zqJyZLC%!;1r&ZWB!nj7=Iq05HYw1zCaA_#@N#+?|N9uFKGXC`tx8>lYL|xmmn#MgF zM5LW(8xmo6H*Rn>oCG*U{BE3u-zDm}-pU`8j|QE~Z+FBqIm%75V)~50oam^t%zl&> zgI!g*(Uq=(U!MZu9=Rw_N(5kY&);yFZr@3Y9R1~{lE@C@l?dc{@dE6XDR`CQl})+5 z&R_RIQE<8*rKTU?JE%n2N;eX);XvHgo2U#n8Eylhrc&VFlMNoMr!1XOQsby_#Rk$g ztLlfz!$QCjwDb78;r~dw_V;2(yP?0yE=b(OC#6DH^*L+a33)zp5?OylJWtEhyfuEk zi^+Z4%7qg#{q2`MnX|D`qlbYj9mTtP+LAT_F_%*}9NR&^p(KxpB87|lz)ODf*y>%? z(pEK22M>N5$oLwJuOigna2mAIbCRXFtFg)CFrk_}*-KFMiN&%GR{WVm+wzsoaV?|v z-kq6FXLX?$$3&Erwry8}3p;0FT05^)Tk$u(6WLbW^2rl7?Ft-)*X;){lj~(;@7a zH-ZaPf`nJ;DuYS_-V3%kceY#STOBl}Rqh0RyYKap2EGYyqKTa}s(@r};wgyb{Z zDV9g3xK{O5XUFx*6-Jdu|DZh(6!MqiF|>YVt7GxRMJF%GE~)dgobBG{{P_fxbQV(e z6U#YZt30#?9myLUJoOyAgy9U93Ef=|iaoD0`i0JSy<1_k)EWfU6PFK_8g9M_Z!R75 zT<1hg_}oq)3N#y^@yDrFPa6hCfv83T7)8~iAP$ODH0Bjlt01z+-x+q8Vu6CN&=GorU zxj5TRi0SuYpvHG&1>-uA{zy?ubZ2?IoV6>3hbe65+7|8tt6g%>j{sI-?C=4g`gmaJ z&2QTGLU>kgp?shyyq+^^CBkySHZs=I@WFHr8vueZw-)@HHpW7@<<6T5jT4jPH1e7U z)^ESidE?smz)6}D5(68YT^~fdL!1}a_}m@!SD(hT*?g$9Ae$Al8sYshG-4;2H<6g2sC=-y77yB|w##F$lC2BR< z`@^nBN%dy-#)s@P_L?tSTYHXV>9}O}9<;k|$({4_>5SaFTrb%%WOU;a%`C8_z zXDAzHqO@l1x=MJ5qjc)}aCJEb*Uybg_YqR_5xVGg3O{EaxKV-QC4=Z%H+{Q^)Wa$% zNWlb&!cLk1tJH`alym#k#SFL+4~2>T%QKrHrlzzGvv*)$3BWRc&zD1^QEksM<&;u4 z1C&XfNZbekUPSp{O>t6rj1mAULPMbMdHKKfJ%mXWS$_!=w6tjt?H=a6kTa%U{t2!< zs^s?RBQp_0hl#d-y!jBadAP>rLRq*c9Uj+g`MpH9*|>O} zM>+kwEDqP>Sb6aFe8Dcs(7O%@2={`vdIFy6R9?pOndJ@yABy^|Kf; z+{|qzzorTmZkrd;9~h{8X%~M~QqWAB%!0JH*i196!~IIC=#>bbuc+Otw;G}U354T_ z?gH(W<}^T2GVoX?P>MV%XC>vnmEqcA`P9@BP`92f5+mfGZ?HGeMx{FI*24@>Tv&x*FHk*m3fd-^O=hEG~QX13g|A0PvT93pfk%I z;bOjCbIub}fTF&`DC$oQF9XlrXvVGioEaJUh+@_4?n%@12>o+f+Bwa@H-GK5|9{p- z|Ld3d@%<_bo<&rAHnmk-LSRwY@-1lyb1fsVKr&sk2EpWbxXHK2#n*e5?+<{Tkw3YmrHmMPp{d+#WDw zAdMR?*`tp=Sg@LjQ?qcCUCvDI22Xa-Bv-RNX5{$9mX5y{7XW5ySJ4iqB5CY@T7G~# zqJ~u>pi=xi#yb4=rLo0mUwB^UWRC>Z+oWuNZF{{amR_^Fu=02ngQl^eA{y1a#!3!1 zesfO+YJi6z6+snmc||;R+o9I`?49ko>gW>0-0bMk>!76M4VUED*3|Y2jRx5n=I?0S z=_Snm3R4Z1iWN;tix8IMr+SdNy*GVl8~xn+p1fTAZym1>v*Z@u#vWa)zZZJ<9Fj11 z_|nzB)B89>iV?W@yMR>#YWRM$2LjMP5|L;B*?+d!z4U8P>KAy?t2;?itG-gE#8A20 zm5p*Q>OH_(1y-e)31MJAsZameKoqEzo<9Xb+q5-G6hjmLuj?vnU|l6OY;})n$!Rv@ zlxtHc2P!M}HHrLExHs|{SV9mOtr6dqyn2y)3&?)J=2{bIAb~*X9Dy|^rO*>gfgNoX zyjGEIQ$g?~yGkE+E6=t_ds3D-hVLqledgWU5KNVIPCGMIM(Ji$;>+4)85%o{iS+bW z&#>dy4AlE=%+E}PwScgRhVG=5LJwWI`4+PqFarzw_DBl0d$q@Z91_9oIQa2}+ooFK z3wKa=$wWpJF#GxEf8l)_?vhVn7YB!uEFJjpy_4Q3NKG^xfs~7p9bVCp_j9C5G2`?0@x_ zJOA4NQ7%n2$z=rSuA(yEZypwI)igNP|ddT zY{&49cYJ>XIQ|dauPl8KmP=>xXBa01jIVfC*hYU(CX-DI?v}Rs-`_gDKhGmL37#N7 z>z62h17X$UFf0QA2&IEl_R{(N`V&^5&0oNSGA+*luEzaC+}qhcl?u0GuYOI!O<7+L zTy4!DK~qhEIoAQz)Bl)^{+|YN|K}%uE*P#L=aCKv+b6r#_>Kq=yrAKT8XMt(2^zv8?56(6x zi0Sb_(JJ`#^?5+|?uOOl^%VNvl|)XJUJ2?l{xIHWL+S?VyL@)c?KzYipK6^0sa)@} zqKmmAqLiz_!4Bd^v$320TF0vTDoNNTjZGTJP01+;mOCRxaEJZ%ghqC(UP6?j)E3;@ z{5x(GG+z1iQ7lbYL?MxEVn=dWkSzO_nLrRcfhQ|(?RByZRjRohmd(aM?LDzi@B9*_qAmKfY%l zCwAev*n6Q2MdhYRXIgneUwn!`W-fTqy$qTC`F%q~dRtO}PN}5pk^^BcR0Lz44q|Qy zgd6v-e5zS(1 zoug=$!R{T4mSl&iIk`8L!0 zs#mWi)^{`f&1{M!iwj~};-m_l&-MHU30jf(R)^UV68RR-&&p}hrM z(LAmJf)SzUA}}$x7`4>;0R2Ii9)T`?>|!0Qh($!wg{Fbr`O2w@`0n5O*B=; z2W9Q(F}p%Za+BhCj5t4+x&yyhVX4giMMX(3YAv&%CLK1RsAcFpHYOOnBYNl#*ti68 z4-!_x{+KC1CmT2RJ$9>S?82Ky_O0>+dLA@{bm@KTCh!Je#hMI26b2m?2RAyb$$9{0 zR1_`H$1Hx=^aT)XZE1MftLaa*6Y}c1VMAark%5h|Z5R7;M|JII zr+5#V#=ZUPy(?YY8l0I~gjruucBCyCpt&+l|JWLo1CkcY2^B7T*AP^tk=c1VeN*e) zTQ;L`QCzwi7LX{S1(In@pN%gh$`2qwn6oQ(m3c7E;EJrdYWuvA)(OLyQ}&0YHxq_j z8N2UTKjLcS;Liw-Asj4lr8|=h7bHq+3GQ%oU6PgBoJ>%z9t&e0z>bA=rKEdss7l$I zF|}tf!C9`f5?J_4hVeReK?Wng8SO_21Wb0dqp2)^+U_lPfnLSJOG&?ex75AC*7vDor`~Sv?AzJP&b?Ct z&FPgWo=M_bhT#XSu(W{rIvxuGB;}?<7rHHc1@giehv(ITzvNVZ{} z-gso00;nb_7=>!iJw?1vHPvJUP)*;w=l?(+%J|*aqq78!@qBwsN0adcI@K$GS3>r8 zY)~uV;c!qN2l^~GDzS>*{Nqm===b>dAIFye0qPY34E~XR12{dkp)gRK9v&JiLb8s2 z1%Pl=$Y3HEX+80;ngOrG^RFmP00Nod*S+$rS4ez@U{37i-*o_mko=cO=t7oyKnaAe^1N<4DI) zIRAUV2%tFvNnJ$4<|QT_3MTqRZ@{fttVc>ie}M8w1dFEw134mfgP-B}MH8Xdu#|WL z{2VMI2w3WcN7jQoRFJ5jZ1jAl`F5tP=`bqvb^KZI3xXxa))tgj92$2s-t6s+?K=RK@IrQXe-6@LtR9fx>= zcg8N*kOCVP_r<~!j{sRtah6OOz+WHKF{}r>iKfaLS>J#IpTsq(;SRC18jn+WF{B}n z@9+LORPJLig;LW>)b_ka#bSH>)}6R+D^R)iM3L0E>@n~i&9n(3GI)$A zI1NwJ&I#5)rO=j-J{VV`Gr+uwH~miRU+gb{jI^5Ap(SwKvC+X(18IG6?o9;Q${8!k z#4A0Wx79<2`?Vh{Zf~kRtoJC+rx5mo6Pu1`--Q-uYmRjC>|9^0p&bS>NOA8lidoeG zx_|ddDI!Wi9?6U3as5vXv=S*jUfRaHI$WkI>G@eAfu#gz<@QR2KYz#@gZAu~9uYvz zpWR%Y3cyxumflo1`N9q9iExb?{MSkl|`fu`^J{Faj`qPr< zzLksk#@)yi=t*_EDb-d%*D5tFY~7X4RlX-+WtYUekpjtrfH$DlreZO{Pom25UPSUQ zAQ3ftq9jvGM1*BC0Mk$GEBw!X`EOS2p?M$V;2jT!r)!lsSek-{CfmR;WDYQ`Lex(* z4m4f%+fDmi+ugD7`wSC%2}i&+|0sDb6a4jZlQTGuTLiKjf{V2^Lg3ENLa)wuN0=HXAc$pLi490iScNfu!JfEw)p@mP(nvzdXT2pDZ+wL>M zB(_~qetvB3L*b&Op``?VyO@H9euphRlMtF=%2wH48jf24)zdr-Tm-W(q3Xqx-#5rh z=vRrN%d%*%KIHBovJXJN8^HE346`N(DJ;=*;d-8AS*778jJRElZs(o_oCJagI~8XP zzW`T97|%-7Q#8$sMQrVGb$lt!wENJuV-aQ$Erh%PYrr;h?nVcbr-W8W2jTVF*dR!X zhjNIt1 zP8-BXV%yixY`5KLmFZ7{A;lWk%Odrs414V~Q{a@m=-nTr@6RH-e*K zTtS@k29Oy+IKrsfZ`clCe8FURk2&u0M)4q2htOUH{Lt0{l-i_)%rW1W3n zN3Uw)LoF)qH$^`=j>Erw#(ZcR6^4}Zmm-V}IwZ0;S!d}IM`j&4P(kocL>oy9x+L_b zW;pI!&KrRAt%7cN1ZxgHWHQ^U$T`gpii*n$L4xpm9!q8&2+()xkE>wG3j9*zZ%$%5 zmcke^pDfErcuQ5zqWT-CKZ);u#Bx=|__&|_#NXJvQuF$`Ci?Y-4KIGJOGX{9Oaf~_vhf7~;!{K< zLR%sp<*GmqP@T}keXlJ5Tbi$r zJZg&pk(LwSMHD!;AM%w$L3CKOyQHHr`fj=$jI5~ zI4tSjC0+|ZBv_*L*KLo1?|{DpdE_Nncv0{(@QC>Wc&-r`=4+a-3Y*JO##BFe-@Wln zhOM`mZUePo7)%Ij%^r-1FDn~5i1u8i2|hdpoKkIEStZor_rPrVaJ8csp)CX=)Re3c zlh&xFSR^2iWeY3;bZWN0nV&f?rk$ZSY!l7T${jzh*&E7!&aHQ!`3ig1Rmi0E7pxIwVo&lLrSR2`(pa5 zyQ-vnvsVKbOkik%yI~23T{7_7)|+^T)$GAjY&kp zL2mfq8grgtUjqfO{?N4rSSlNx&w53BZI5JN4bks>V$Z#I0T|>yE~7`Ej3ndkbms%I zBWwUBVHpxq28;Q2u=1``X6Zn1NIl1WaUq;#*z~S6B z4&dCt*fvM<4Ax3dcCl5;7y@u;*Vi|V|6*xfNf(p#+A|8qRW#G>IuhKa*FG|3nQhx% z)gM25nQt>`fk@l2EzOvB$q3(`Wd*V2u+mEihs8K$t>dlWsbtN-9um^B`s&*_fzol_7sM1jT(85IEH=U#%*)CLN7{>dz`T@agtrP%D|X6fb92h4 z=I?N(gi1JZNy!}BB)=}WLd-ooxRxlEGRS;lboL=Z-zM3ATexito1~=XhZw{(GfFwD zwc$e4;y=DFj4I%d($7uT!{$pk108FWOD5`vo?tz-#T*$r#N5Th1^D6>>&*3abBS!* z6&o2RFZqra70IUft+CyIS}SVyKb)oSt@ugtN6(H=+MT8J8Lw7^|HP_JJK-r=IziN5 z)~oD4EPPf6lmJLo-TN=e%5T95y<@DhHd2vz#4c~9!&FT1?Nqds1YrErDR3=5`FWy? z|6m+VcZD~cS)+N_JxZX*;1ChMd+L~OT!nO7mqcpV84VtscP3Ds-R!#Q$h9@U9|L@U z77c@4X@A$|UEg;IJK**1wn`yIJyrHDT*wdOZpl+=S#bxIYoo2X%*g+u*v}iMuO9vFD-Z630uV$ACjs0)&x)u@eoxOKSmJgp}{3^2yrwREf1Xnd7xobgy7NJ zoo4TWj?gxjr63Z?8D@>5ZWAbcH6Z>N#C@a@R*L7xoUVFQdzs{OnFMta$B@o|?B?FX zV_yWu79{w@>!OVcw~TJ>`vIz4k@yR~rY;vRf@{i8Lub9O_n@aYsKEx@iaftVF6^PO z8yypc;}`VHkgDZ31P7H7WF?}ss>{1PEtyB;ezquUr5fpDNVrU31r-Xbi|3&g^JKFoS?J(?WYS4Qexo(G~ z56mv2nCEn*vY3bH(R>)F&PMZD@)Em)z=si`4Czk}i1<(9sO)M%MkyZye}bYpb2f>I z`+PV|4YtVa`|glfl`>R7VK8hT`!@FTb6ZWQ3esFP_c~KB>mAW;aO-Sv|TJm>9X?y4Q+nXXDc)i*=tFHd3pakf=?xh!Bs@FtJ zGFlL z|5T~HP}F}YhS7#W^m@`CV>|+PYu3ACSoF)g8wn{XvtG~pz7YW=+#axQQTWHL+@xSv zu*lQpa+KDU-)4CTBBJHK*H?X>(`dD6;l#_n515}&#p(w>Y$MEMcL{vAl|oRG2D*2* z%!X_|oR_A?qojbC!s>5kHv}yw^c)pjbH$UxKFVwhzXal0CxYGrqeQxd;raB$lzkT! z$r<(Izz6BPRzmATmy4vw!DO}|2#twSV8Y+YK|V}M?n>UE;pI1m-}!$G!NRJ+-p#jr zc6iV&z*vO%%#!jdI{5@}4mX59gv7y|#I5VRZ?6CumPlYW+-#6{rwDwT`vK1Y&In=V zn6GJAV;Pcau!xhqJG{C?ow3k&9W)G-^bj(b(G38?5Euv^5xN8ZK@zthM&qG{1*(;0 zaup~{=_>lXmvi7X%`u@+!ts3z$P+v-Q<}vgLUx#_Rzol>P@+Y~uqV9x>;Soc(E5G{ zNJhmH1BXuxJO;W1WXi(brO;j8?JueuKaY4X+oJpHj}OY=&YDG95EHr1e)n%US1mVX z8?C{MsBB)WCf9}b-}HWEtxOO4PQzc16Rl|}!L=5SqCQT3&r5#_*!H3g=A6b>#h8l9 zf8HpP;V;8a-T*>-8KP2j$BA}6IoKiZ=79)aFZI(jWVr#`b-TGsKX>sX`{%ohqIIX0 z;ayX@c8z0#h_dJ@pnl%*t>X=`UV;mjA0;`Ld0sk*Vf?;M=h@rcbwI3?8CZoQD}qzx zp8VljRvF(%jfjl8Y4P?xSbd9szD8%SJ3Dn=hl{9SlI^f+cN(3y$rbYf>Y@AAul|do z{XZEq07D}G0&uLNe8i;h43YfkEp&9wQ4cm@&R_4|5`TakbNP8$?E&ms?P@URB(@qJ zAYV8H<^+?disx)aj_xV8o(8&y<5*ehyvrr&gT>DjxDKmBzgtG$G%@3}VgXh&Cb@oE zb#|XlZXjzeG!l)hA?>DlGrrK|=Lx<;-`_Gn$p7K;b|_xVXe-?zpRQ9lSH*IuD=U)2 z@oAX~>q$jPuzHflipy)(t5-b{k5#e{WL9cnw2`}~5WB3kizhU0zfIs$*%8>H*v4;F zq+)-a)b-0GNb!Hx9Tj0Q;A+pC!YnBu0zxQOvhsddlgE(Hod;|>rc6K6kklCIef~p# zd?@TNAf;0!xbCD(l7Ka4|HEBeX=qziq@%UeM6o^@;sY=vJR*~{ z7EWT(CFZhSee>UIuw+`G@ zT!>OCK!VZYvT*d@RcG>ljf@~s1{`(KJd@SLtv|@IGiw`nlQ=cCSNH%)QKFB-yM|Ed zSx31|&#bc_8xYXQv2n1Q_?Y^C=}|SQE6sJoN?? z06PAKdFO+e$IvS&EVwf~Z#+r;;v*Y}W3o&!B z2qo2!EJVcqo{ETtY^IYhu2sB6`i5J*%szj^IkGv!Yu?$>{Y#~coZQvH^q$)wj|UJA zIla($;4$D)-egH3qs_elq$|*>KEEo%nlXcBXLKY?5w*2`oF95u* zO<-EHYfXu$jCr>;s3&^dF4g&Gax%FTor?ACq_M$UOsR2v@j1hrAj3*hPRkc*JwEF= z8Mo_1Kf8HjPk{xmJFJe?u!(=m)O!f8r#d^EroZi10HzwT_I3(McWR785616{X2AY0 z$GJx*FY2AGf^ zx1A%XJjs94o|5|*#h>Ae4{to#RHg!9p!*3^ga5@}sYGb7d=8jZ*`y5v5s8X{n%%1^ zmT?vba#9)0${!1E!}~r?jTC}I#`+x&g$3`cv*0-$46)Loy;%v}5lo`Y;cC=^bV{^m zt|i8zZv|_^y=C5n3O_R*l$RaV9LMl`xzjGl7d#z8L5Kgx0xTOMek_-x7>gC3dedXM zEnhF!1gTLiXEyGkv(eB9tLo;6Gsza8Pq03wKI@T8_gZH@?s}Ko1}}(9R5kquz3$s( z;QuWf3VC7}D*pLW@h zrooM3hfJ_<=~nVKG~DbD$ppHz%Td=__AfK~X6B=PWYVpb@>O2b=*V8q`mV$cE2k;b#S>%fQGSi^~RrvI_VZLkXf10_QwDrKZ_~U!jDOV zUUQgCy=JIpf#(cj^luXU=N=rINEoeBFuzXSap5yOuwQFCT9Jtr)HA;N0Tv%7*{Kh+ zH=G51SRfZ44)=%}nE6Q^hgEPh))Tv8;#BQka4Wi2p6g}6&nDVfh|-0{P<<7lr9fL$ zOBFR*3CD!NF!->XA2fb1uK&gxJJYRmxuxX8Yc3sV_9zqIge;Jk;VxFd0Z6rwK_RM~ z9Ex$bW#7MR^YRji6#v-EDHol$Db)BOt4#thI8vp3!3W(Azy>!X_}9!HfN zkANC|f4YhpvPXRgt#CbB7JrtDM=J*^HtmW~c>fr-WeM;x5`LW|d2c1*KS~tjPxYPE z`o@mf#EAflK);BFp}{=)NsPRU{!LRGLdVYx%mwjohgNF zsQ*h7b*n$LDf|9S+H>sK1b2??xRiw5)P>7|kNDoqn#J>)g({eF+9{dS85{vNy&{pdTi+)*0;c8WQ(WLR99<>Lswaa_u0pPq0eWhKU z4P^$KQWm=KniyYF?k09Tqg9_gqjt|fc#THMHZgK%M!L>}n!i{P{?b>TP)e77TO@$0 z!jCSlETT-V{9Ll8D$Ta0w_Xx*pi?APmG+LFd8?obFwzPchriY_?+}f|c{2*n*Zv-9 zouh3b7y1c{_Y8JSnDz-mz@wNT-JJ%Tvrk=ar2V`)Ibu_r6FmAG>!mR5Sn(*+4h>5f zpR(F;ECmCUOr2}^xmtmzT#j6a80{-}QtlL9f}S{gOQcASyq9Wo9D(`M`wqDZzldCa z=yO>-;9pceel(_?IS@{DJ-;(3?V(W37RiuS8-eJtzhv?$Z`~wX$-2nRgdU3fShUGx z?^ncAG|oTD)}~io_p7^K_}qe?jHbHEn3r@l^|;;Zb3jq%sZ2(!>6;PGNU>kD(#{*Y zN&L^`j@TRCHa9hmx6@Vm6_03ujqBg#FVyo*@74!#?se`YYBh4i5no~2sOv*%J{1VT zUwdDcWsq_YltM|whcU!GG0+FWXeQl^?Xi%VPM$Iw5n8WcU&)$(N;U}{`qbFyfifpZ za$b?|#ihFml1T(mV3|;X8a{v*n|Ri+8KlAsXQsBlBbYOOCnDUA z8bD{otneHfVZK4NZY$3tVOnPn9ZO3~SfL8$B_0P|pa?wGY;Ltnz$S*Bi9bI;Ih55& zxQ`}&8Av-Kes5z#LEi)oXMsDQq$6`acehq2^3k&`!rj-vL=g`U2IE6}MV^YY<@6|g z;i6lHgoWzYc-(+4yn?Brv4Z zcx|g?$W}vBMdfdXlbXy>>=f$`9A?1y`%Vjn6!}_IQlj)^k)X-wd;YEXv+mVDR0@Yp3=Bqc?K;N}z3}XsZ0fiHO$ax`n7_22T-utm} zM?VxUO;%g8v*hCyFb_-VE;HYH2!0;>KnYa3c>j_hi`g}R0mb+d>$;t9Z{2W5sA zL544+eo+lG=4kA4+AWGDYIjFVMN=whzk~K0 zcRE{C!gOJ%iOjQ&T5MlDU{c+YL!yk6xA`Q zeWUe4Exib22pi3k%y0U5Fh*H)tDn*AlHfl&8%&@}tP&y9%Fb|O&}FU_IqZ0tOx;#H z`EwyA2wE3sPU5M(ae;S~WYZNz5n6fOO%qKkwBG+E32FOR&7r_Om(cmjwDa+-{FE0o z4hg_Zy1n?nZ(dNI8fR2V{1S8oX)K1bO`5Mv*3jON`_%SR#|d@`hg|);rUBJuEEa*l zA`ddl4a?NM#w8vry=g?}*!~ndx*Mn(M=2=q_C2?4jTF~@dDv%3AoSiw*sS+CnN?Jv zw6I24x2UCL%PK$3ya;W-bU3Mm(o2DM_!~xN50jgur(=uS(j(~rJgTmMelxwxC8V8X%bGShFIs|nn!dU2!nGk<6HPZ`O zXpEQL9bkOY8F8vI*}Z#eYubVi!<${UR=-~+48%v%z;i;kK`LC?{Pb?pC8un$hQFBj zH1%7fIBhQQAXP7;BBVcSI}I}pSa|WY;$bybcom4|ap$_|Fgw{jMK9MUWN=z2`K z6zdO^hDxSR8Mg0Kn-kc#60|?S@?QFRMXI#JpGAjwl_)BLMmndCbCae5RdB}jbS)ys z!fI3v!TriCOGzKZzeoEvQmt5kWkeWcsSo8L)WH#=vro%xQZZvsQ?f{J|EbjmMWBnh z?+3q(SNAGS<4YKj>G(T6!g?Ok^_gLjnxLfTxFE0^@tOsqTZ^oX6E7!-Nn zeg1PK8Tu^lM^&{Xt(HJLZ2;}m3+VSanS_W8vw93R(08zWk2J6?uA#@zBXCCZce58N zYn$~wYkx%WBeM(&k@)psnFdeqwT0khg$OI{HFJtM^b>NrY!SW zv@YE|LzTdhe&?t_d|_7yeE#hO&8*6ca5(4PY)e$mKMl>qbbS{_v~Me6F_BX z(S}g_zZ3ql{Hj~FV6jLs&E+xUz}Ii{Q7)f$U`*BRunz^r1ea~^Kt z!?Iyzs`4aK7|CI6Y)f0dxPCM=IyDEnJNnE6E#DnWfRA8o{zA_ z*+6^51aq6H3qKA2V9{3i^paLcj>u%j4~Fs#K4Y7_B&3bIG8Z3)n5lY-1`6Dc2=Wa$ zUE5nlf8aG^bL;r}hi^&-rx@)^@vB$-nP>9-aGKG2EIZzXdRjKo&z<~?5zNe0=|Kxd zhDjW82(6A76RWUBE-UpkeGa$O{tTY6Z&8}#s%M2m$AlR#f2dmU8TabQt*}J$Yza96 zQv-%Hs;78@b~jHQ)o-dA+7%v=Gx%h9^T|Ks2TZ)>K+y{igT^k8BGFTzS&FeeIxmiJ zvyCX%<8t?-oXFAc_`KD*=NdEOQ%&R8yLHyenRy^fc8rBvTU#wVwAARqZSk`0=LM^A zHaElr?dKB*q__FQZ1JatY*p8BiG&|1etS>DK2gioyu($R9x-H$@V=3{~dSe?vXYv%UEO?ZwJK&{_ zX;)NPVj?}+=1$qsiX`)Iv&6<2A>peNF=7Ye4eK@%b#6~I4{0;AEZP~G6v~5!lYxYO zNb3{8;-3f7XCp-BL9#eq%2+F+>Uf-SJw7pGX?S(OMi)18282`o#b|ohG{5a8UEstL zcy`B4aujqZrt|X1-vr2mMB;W+%^U(>z`dot!H2HGi$Pa_1J#o$8t8MF2TGoS%83-; z-OfuZ)!?#h~ZgF=Bl2rjvsL?&EGwfciM|BC-pUfyE*lY-IEWDv{qT-$?hfeMV z&kBVML4m1zWZgkO6WmS##$DFmxSreX5@f+`3g~;$1M52!|D-no3yr9pd5URJqg%3< z*Kbi4jRu|?W1_30qnb8Ivjcx6J_AH(5cr*93SEf6%0R+zD3Uezq;XEI~!8-P6nCe!96j*p0V( zdk|W-$Z(Yw^N2LwUts&KsVy{s0}ytd`v}RK1us5kO5!m}^IHI1T=7MSC^r3DH4R#D;v#nP$>5m)~`ga@@CQQhwtHCX0&JiIGvFL z{z&%B@@F*L!%_OX>Is^g4+UwG+?zKXqLpq09>kv3iSsyN{`+xgL(~`ath{+kVl7l% z+nC|{VUa@S6K92fm&MhuUK>a$o53SiGDbCeRW5i+jIOmF~Mb&ud&cz zRwe$cvIMmF561O5$!wpAp1aT^ncs9%VbHFNZjrNu{eG&Rnz&0y=%_3?`(Ok1n7*75 zLvFd*tPs?rDyS>+tB;qJfT{8YBYq}4@IkDMjq;aMTqa3V;nhC?K7+L{?Hr>hVI>exnZIapij#>~V2maD8@+^7;#iNWhv0I3qnmC4^i>0@;h!Ap(6Ob?sAy{Rbs=n8 z{l@?!*d=bw35@^t5%vQ_eubxzp13AMN1%aa`Kj9Cmx1y|tH+yd)_!=TVENV{dtUnUb-qa}U+$&7KPTy#AC&qXfF? z(^C;#H83n_<GjFdJq+sN<4NzfIr5&0tzcl}SultkPO)tW6U}=^=0zr?CaI%c#>v?PF$fA z_u&QJH*2GA9!F`aLw{-6YB^AS9}NO}shZ3N$^yRxV7NOw_mM9}RaLL5vN2W7oSh>D zZVtslr9JvzO-ura>XrC(J3Xnf&`HW*j=k@}dtlIdDJ3Jabzi{jW6Fc2C;v zR<&sKDz~J*X>uWLyZd%dI^2ys6c?GOzbj_32k^a00=-();wF5e+CNLh~zwe-gDFIBjyO#-;T^{Fh zW@V_7*O%)2-Q_w|zsM|*uj~oYe6Fw= zC^Bq-S4{YMTIlR|u(?gxy#HkACE@5B-f<>6n&@p|^qahi4~43<66X8uW=csnDqg0h z0XU4oIl62d4EFcf{uGaguNM+xijVgX6dRPGeX=V57P`;%@@sOgpRGCF9?|#8LHGKZ zR}UK>Hy6*lCp^geD1GZ3k(OzaaT==3=x-y^B{1h+R^O>_Fl9va=1fC{$^ThXSnc;g zLJu*7oCzO1gi-T(NJdiVpKk1C=E4G^6_Kp_-P!lUhQ2EuDcN*IPuq8-s>@j9=O_7v ztLx~irLDp@Hc8N2q|2z@Jk=F3eNOyI$i+A5^U3m=Y=`@1$C7YCQ@}QMN@a7>McQ-4 z9F2O(SKM@y*QX}P^m%V%oj?B%XKxi1*P?BUE@BV}ZXtN#9!MzM3n(Nw1cF217ThIB zaH&EQ+#z@Yg+l~)cZcBamgG*>-us+(&%5unx9%5TeAS#|_R(!<^Q86mvW0vy80LzK z*is3&Qh6cEQl!^-?*GE#ftsunQ%7z9pCcO+(PiKPV~2C10`-`DvwYhfJqsFSBG5!F zOF!wi>`H@z+RL14pB;G~D|F7;o8ZT%I-1$s@zGi{&_3QjQZ1BP;}@rOE&WOTwv#XL zGJ3mpnM56d+Pb2SaH`Mv@*~~WXUZ}USZ!Hi)n<3;B$kLH1oh1%8N(cv%+!hj}> zmg?WgEk~B7>2rbZjWK(@x`=Mi6tE83Vo2-L9DNrLxZR>bw7%Tfv1)k+DyHc*OsC*3 zx3?%MoUQQT)ScbzI0cP22~zbxhPym^Px`(W*FDV22--PFCmTb5LItV2xN!6Cnp-lC z~XsO`_M!$K|@7;PZpm=Hk^5x{VbyQX>k`={aWd67Fc5eTsC|wkZqE(>xB_k+8+CuG)eKSJSsY5i1mq{gIXrL=IF#K8X%7OfQaSk0 znGuHk^|UxHDlem!AduecpzV)eP}mjFV9sII9L$WRN+3+Di`XVY(&%s;f9TJJ$(Z%S z&gjXR>6MWxzt5EaxO`6$5a*kw7WR0FFE=tZJNp^gjL1e{Jvrsg3!Q>xt~&&*I`;?z zb$ElKz*Uv!pLBr3UG9bK6>*L%TR~Zv@C1=yxv;#NT+^#VIsW*TQy_eQ`w|8F98!wm zhYj_X=8L;iW-~pmd^6#lU`#UPSKaKSA*QR@Vhkj z!dQ_D?eFNL49@Gmw1>YZ9e!!OSjxQXxs^8hwH=HNSw#`rp&Z9#nl2Z;30dM@JAQaf z5|SAL?cJlnWITBJ)WCsfNJ0S>f|K45S~^Xi%Yp(_?^}N>yA^UWqaKfD|39KF9Cju9 zv$d}V_)^4O%nbPK=ksj8u#Hg!qNj`kow^hc4JX-mADo;3qp+>eRhHcO_})KgWzbEd zfYRkzMJ{$T_B|)V-8AYHu3WsMX42;CZ>b1%%mZ4zq-wB}yRI1x|IU~|8Woa@f1bb^c$ zgeQ10A)NC5LYu(LbrOZBg(p7vP6NkbNJmN}DNS6ShdpEERidZdIjnY!SfJqy(@t^g zh@lYkl;`qF&P+T9g`%>CpWL1y&JWZlHPkB$K3c;chkLTVt1z)tay!>;;!mjszQQ|g zzZaF@Q1mk7%M_jzaO9be;SzmsC?XzB zL8E{@<@3Yt>IBFgeSSgb!(tZ~=ay))3ESv%UKSiH@$?uLt)1nS+z8-3L*?{-vDqy% zw7-<1NUXNyp-Bh%@ECsgRcRkh7*T%%<2B2Tz7i4*vszi!nCn@eV{TE@f6pot;z4!y z_+ePB*GvnHP;LS{drdDSrU$CD{P*NyvZWE0qNgMZuP^u_Y(^FWeOFLcx0ZMAQZqBu zwvmsr9l1IyRLPHdN2QhDV8Qm&Hj&K|_M~?6Pp||k_ zj&gl6bn_jxF1BjoXl3Glkn`4+Hw9G_#%hEo{Q2QSv1Z zqmCdEV*M)*JaG39w)=e%zqq95$(f4dUHu5?{EeKL_VvScbapYACx55F+|gs+F*k`! zJjz2r_=ZFU6M5dJ7=iR4zhZDO#zzj@`h5%2!@xAQr>3MQsTQcb&x%QLn>398jeLk) z^5}Ay9=B2t^`Ad|NZm$TR;5Z)ttyLxBAF%I?@y?vU^wXlok76^fCR+`7wdU;tuA)1 z4t6*YZh2b4YSw@6A4=wdF1pRxu?VdJ=Pr{sR`0_HRT6tX+X{x(HDgauTOmb*c$wV%&zl$eSz8nh#~9pCR7FgOSQ=G^q%IgwoGONSi6nCct{EHVN(a zIs|+}c0C9NmJ&uA?0#+PICh}!#GemtK}H%3*@&~vk5j^>;5UlGR-{RlWDa>2`Dfao z$;}RV3k)=&nbx04y3cZ$MPH(Z{4T1)v$|3$T5qhqJJ<~1wjLyEKC&c|EdILv*uNzt zLlQ8+aSWfRCl{}d*9fmG0c>Y>KyS)4y#SaQS-e?xiI#??jML)G$o|}C#|jm*09+|& z^IUSx-}ks}@1g(i50LkHK;*MRnM^@vt`sdS1&@aX=HYw4A@7~KCmH@JrMoK-4-VeK z!cQqJyTZ+Onn9Wsb3M}8h;e%#w0wJi>-st2ZY;OMQmY939U0$A)Hcvc(I7GS$Pl9& zFQn%Q=F=nr+BG(qDMo%jxfe~AB>S)Er7P?vAb~o1^G$hA>Onf6gTc)lP+kql^@_U> z19@yR6tNiAyIr;d1`Ew3H_oPvA&|;5n5= z^PYTegWXJ%63Eh8W#Qe5>5o2*1=>Ch@tA)4j|KQgCm7<9L5~Ep((*uRtj_C3nz`5s znzPwB)!0Hfvp;N5Gb2iHmc)r_WVygk%RMa_1!$m76xz6qNm*VY zFXGr)f|Y|(GPzfc2AEG2RT1OXE5-(8AFc) zQ+BrYG|X-uIq@U{sXf9>u*ZD;u6!?kVbXagtX9doN})g*sR|I*hC9_ix|F6rtQGPO zqLmaoC<=NDDo3Wxu<;m=e8GH(djH!eb;+bad9>21if0Ui=c(Ax=Gl#MtNx__)@tYM? zO0P*8;b8fl`zCn$Oy~^;{&9~#S*?88CnvZRR!~F}u&kh&WT1d>uuM4U{p-JF9<65;G1)% zd zlOZgCe+eWsx#)Q~a51|5W&rqgQ~Iv9SMS{rdC!@Q<2|MrZ#t?TLh2FkZKIcklJhRNG>C{b~ec zFPAcqT2ylK4lp-m@Z|F-?Ma?NaAD$ip>dezFariQ#z#<$kFX8;_zhj)QXT{rywxK` z)E!M^8z4jvIjd4lNhV}cdLFD3R)5b`*=_WHa;xsHfw_ffV19&M1jor0Xi$yE{X(=c zY{YYmFaH{JZ;i)Dq`vx!POt)xLSB8n`a}p#jnkryLCW$ucL~6>2mLoJ{LK03m`!tE zD#I?<(RhE~bf!F~#)Z?sR)re7ufm_f6uK(_0+Mgvl=@bCRGLvItn_bvvJ5zjOOIqb z?G7rsFU$uz-Qqc+>C*vuy=ljc3U@zgCo+G{WHN|cb!t<2EPsHMnn#s7BO?R3ZGyhv zFk*3@4mNY+&U}8C8del%`RVZbCKO|KxNmwmlJh+pwNIgV`D5ova)?G)N2$)nV+0#a zjc0xJp=kAHS%S}@YKqWCwAaSgHS=#ie87hEaK94&ANY^{{TN35B!+o3yMnn zl_I9pC?2ejxUjR_e8lTj$)3=Lo-cGI}x}^IxR-mjNMF<;l67pNG zq!e+2cE9ZOE1Bp!uh8~tFhCmG*-SZ963TxN)K)>M;fqIt+zDRABYh>$V1Gr(v66nM ziFl4TAYHerU|;W5%+XxhW34ffombH0<}!`bQMtF^uc9MJ%th~H;h7&+v${n>d*16G zR-8zT%;hIFQK0eB3Rii@;eS-E>>6hru3D^iF}|^(%F@To%^@Ok5_CMtw^cvo1(7cw zb8NuKqvr&%vGh=!`LmV=7P13xh9EEt6?y3VvuNX?4+wZ3=}ty7cYqKP!?VE07W8Z= zle>pxAli#T}zZ(QLJXn0fsAYf+I0bZztXn5!Y*su8-tLpAhbb_9deO^Ak!qP}! zI?AE8q*gvWxBx1ilEU2a_GmaqW5G9YX{WvEDi(FRVBxT&IIiu`H?1nPkL>5`N8An< z(|4|&LK3>B<3cJuVv(_kGNK0{LE49ieF6|Y89QyHBoQo)jJA>)^t1T&AUf4mcI}Q` zNSrq9qrgH!xo>NK)A~G;M!InGQ{xhbaozur>; zM-Qo?Ma!X-&`PD7`8o%~&+hLxBs+sFH{u&U+=cnMR5Q}F-tbrc==52|^>!J}YzRu} z_X;iz*T>x5KU(>L0xCyg@u8>7iiVRc>k1nWgsvnvRKv3HtZ07%vZ!qpEGPuySyG%j zt>q$sCaoxq&|9v=$!*Xnn;_4gkWN0@eT3L5t6Tis8R7feZ+grfFhH=(aoQxcG2EG# zPBZp#oIYiFp`SJu%f-7v@ZdH5yZ2wYU{_5>IND;Rc7RI3-Lz`nZhx1%__QhNX9IgF z>7*2%T&6;Tl>0yOOa48t-rGNd91@l(k;zGm@8K`mXEjgG5`R3JZWOsV>J)Knma_YK z9u5^OQp}IwhqiwuDxz_s(s?;UlWTss47)|;M4ajJ=nz*)S zh)HyU9Kk{y6uq6OtXykS`EK8`?jXZHRoE?Rq2A=vn~XrEYRb7AyMfuReHZWKbDW9p zOOo@cz7tvm)sjO+^MO-~h7U6O?ehqNs9DrQUzFD`ux`VC)&w7zNsVy^8VaE)V)zr<~^?%U~A1{gZ;TwCF*4i-vb4``Lt zLoyw$_F0Hx;$YyJX5`U378920v65#cB0Ky=9%Z zvFt~W#vA036;6W{HL-3hccLsu=ZLTeiTu!7FFg5dYEvVr zm?}xeb+jkoQ_AXX-q(9ZO|_$5oqk94pZQ}_M_ zpBgtOQ-qt^r?7Qb0A{WZPNWfzXQH4X^|-{Nj<&nmd|ZYW7S*d)tvQP|JyQO*S1EB4 zq`2SEUvuFpR4o7ibnoTh&CN|P*1G8=&FO)5rTr(NBSE*bl;0BBpzAQvNy1hhPTOJX zCZmto;7ZeHQL(i+RntGKzWKZa-;5=TIFzy<9qFA9$$n!*-5V*hD8c`cnEnCB&qS9M zhDQE;r&{zExu0rYo9M{KED_`BkHply53WsbRC&P~6P6)6PvCEQj;Yv z!28sxX%#sFdKv-!LYrpEr(0_ry3piSxN2lgoU4|EkprH#$hF1-Te;+NOk$09DVO4h z*Gy^IPumsFDn;C}NN&YpB%Fjyp-w1>C;)1q#7Yr z3^XV+5lzvmm3FFW=#9p87Q{sp;qv(HSvGBaVLOv_tfrp-6J|H(uXy^XYV{5nx{$pc=uqZvP{T*maFX|5e1vko~v`{2AAra?w*gHi+0r4)I_01 zOuMiK0@H;#)Jk|lFZzxje1f_vmi91rOpLQ~J~pw5_=H%3Y1&y9Ob?zfl3Gq z3Z`fuNIz{_^NIeb_n%MK(Vth3fu@pPLF?e zR$VAHZL%3wRW$FHX}xmKUby(ZR99l((9`?*OiIxwM6$ua>xY93#r7s&?#10O%Ui`3 zgRSp}%D+#)+vs2hSx-5<@%!sY=%w8@`|b|1>V5%b0)6#$2EL+UJy;j)VR@eg%lYWA zrXs5+)O|PJodg^F3t`1XQjvoF0-nIno*s$(e2Oddt&|x=Db`DSeY_@ONbpUGr*+fL zLlZ;^>XMS(`6VmTH7@nJk96bXfZgzhD}_))oGE6z!Wm60_F~>*b>D+V{qPX)(T>r_h?n-0QTZ7@H628mh z;ZNL-gVd0QMI{V0xFDt=&DIHH3;gja=ywk35{=|ZWwPkBGyB3@7s;&t*oWz&gU$X% zAC|VDYi!Y!Ekw32ySAKs(_Z1M>yvs7$J#OJj8Zqemcb@}MnQL$JGU8k9^_ZK8XZQ& z<6{!ZUb8ntqmvWcYD;wE7-esmY|r#`E6CX=&v*Tunf#L{XEb`h#|~OYLcde}8m~6S zr9Pr0;JER5!(*_%@MPWKhKG7Nk*iyh#0(eydPRdE3-@@$6HK(fY<_rVZBsN$n4Rv2AAccg_JM5sG=mL>zqH2ByAL?j$b?)Lz$ zLBL{CPjs>h86DR|>pB}iX0UcDK)&+KP^pj%iJA=&O^tU(lUqb?3{~k=TbCC0*)C;B zp&U<1gq-BLLMy1*R#yX93JZ9rp3U}^>)W1k71yqH5l7PT82{K})U7)&@^zok+9g-< zfv<{nzn-m#N_1wdn@)`6s_lvIvfeYt74;fEFszObpi94)+bUp96|`!OCJ0KLF8chg z10NsDv2jdkt7ExK*;2?)xZ}g?$Sj?F50X{+odnI=a@6b>$ZHYDJMCV1L9@|EEfg&y zFCepNJo!(H?3RAp+w5}A_8dsewfw21v{NV1=)ltKN$L+%oTIfQYSVaYO4t=$_0&{` z<%fA9$f3b z+ywjSf4i+dS*T5BI~iFSsV8L`1Xvvln<;#E4}8JK-y!65f!2wg{#(PwbFDU+Cb_J< z6TOd0ipfWVCAG>_H`G_9Gq^x3$EwZE>7#|`lH+gkG3tJrJ^IcjW0lpVgrcnVBuw3_ zt!V8iUa=da1tYdF9R+miL_# zaH0YSKmjMJb(>0qtyL!JP$Vq5S}{Goi^ln0odj^rXR596tS4wVAk&P$y09O&^I>?$ zp{3WSyp^?wk16mZrVgmy75^<@3It}y*`Ik#Nu4r)g6&-A8@j~a!qah8rE zMH-p$_O;PlNoX(yb%uXQae<3uW6&FcEkOaysF)Jh2^DhMlEsKy9%9r z9iBbVB~2MpCCLnPCR_J;rgUd249kXmEKS;?(s^FEo4?@u^Ldm{)ZQ_!6ZP||>?tf$ zsV6*)zGS4@>gWd7f*VnSRKIa{K8SiOvu$p_iQ4HC;ISn-Gp6=EE3CBmf!jr3+e}G0 z?i}OGHSUd48WL9^=U;x65&&SD&bZAK>|X|zkz)N1TWLc%DtqRfm$v&l(~LrY;(PN6G#Q2YOjSYsW`c za@(S2MzeAva+Oa^#Oi3_E>K5|IH)wM=2?&zLiY(mKPluj-JE6-Cmq5Z8Lr99(jnvV zg)Bz>*mn}5qJ5)$6AFur!#n2Ggsf^%L|g^PzxYC0VzaxwU2T)Zfh;Nilwi_>b8uLh z$VOegAlq2lXx!}Tb~%&Mh?&Z3R-@nWzTgc$m&?BC?i*SP)cYREx#o(o122~nXu`rI zgOjyRRhMAX?EdU^@-&+RaGnszsw(F7-%`)!^yfE~NgR`#%1q2gZLir)_HP$JGQ+QQ zf|O5=^14f9V~F;@eh5NYT-tB%p&Zw`*kb7ES_hk4GTwY1&xy)2Z$eSm#52XrG&fY+ z?OApVGv~>Ls}Nd?j80_l7d>y?ovfSdmLrifhrD(QodF)}0RdUVj^wS7Ac+9>o z`rbELt)2pt97ug>saDbyCca@`qLKKnE!2?%PfK0k)z6s*e`J~rD&0X}4*mDeA0k5N zTa2paR55(HT4Zl%0)r;~4r(pbu5;@}(|#gX)udbmI)Ys{5%%SEs@FivU>+Jn9Q5aN zGPzKBuA8nmOD@kDfR7F*9@=j$mi7w#E&#IFO3=56(?|*b>tnPm9WCz0J7BLv83wN# zvnXNONaLZv%_Q3XLA-O*|I`T%e=R{w{o$)LU_TfD{?oExZAJjFwy(ION=Qg^0VuIg z`UQXZ-qSGilU@Cuoz?|qZ_AlVR5+23$Bt;+eIpjrsEwu+lEMA)**2>}*1?Y4PQ6g+ zZxPT1MDmDZaONXd5#60&rh2!9`@Cal3y}91A)jNMPIq6l;#>4E1sxhc1f|7)o4=^8 zau*eiPWZ+dtb(~N!z6igRqQT2IuKNOL4A9cKiFe)cT_mYH<->YOPR;NlQxcVjcq~+ zCgbaxcD1dA}Ys-mx zWJo}8OIhUPKnT|%{VJS-=S+gM>uS4o?cuqRl0@ijK;~9~LoJo1)Z#^zYHYb86PZ0P z_03RqrJAziU7T5NR#5cn`PERPBZwhSDdro!@{e1|o~ z{;N6UWu6Git-5S!%v{qow^ZA}rUS{kl`7Bq<@pN}LC9W>1pYA%Lb67IOe$Z|@vk^^ zboEXdB-mVsr3zT!&EOtrtTYIxgbNKAHz$ReW<*uC4mhHhN=L3h<+zrGD_GXD0gX`gs1LXr9V<~Jqp z^PaF#@TLs`pL?V$R%m;K7$PtM4>~U#U)QITQC&&at?gm>fGhF z3;)_4PH4B->Iv`&a_3|7;6QYBOlnlZuRMm zElC=#W`)f?w8Y#SecT_-hWCXgO{XJUP{ZvKnthlXWx!@a^0D5b&prKz5_br@apF ztq6a`g8#>ykQFTMw%O-U_$uUfygJdxSM;}N598yT_tK4`&VhP(azh`@#~(is6Zn@S zR2kiaaX57zdnig8Dr?C&vaF!|`AIE+d zfC;X{rJqPriZ&RQcbT1_Xn$r8?GA^EZHZGi9zP}Xk@Z(sR|lPrJaHV^ABlOx)NV3# zu9nHfp%yFbjR}EbJ~txu-1DLyst;GH3sM#Z-^pY+SM>Fngkl3LOg+U7&k2lMB&-12 zKhA>H?L+;^~}wjg{RRmOVDk|M4Yrejq(>CUrcY=YW^Myrkd?w&Ayrd?}&U;WV@ z0W#(7SLXdG#*_ySO^xraqLf}{VS9G2w_eYhHe;V--*kPlrKFMl#^++x)S4}NZl*LG zq6Ds7p`f&-Q1_X?T3wUJ1~#3GDj-I=iMOuu55bL$qFLE1w!5X8gIz0RNj z8=im{D8dwZFDs!lL3+xB|C_yR%P2a%*eVyC*#-t5Z; zk7RXcm?ogPX4EQ?daA)jTAFa@)@&wwQUiHnl`7@pr7_cIOZi_^m+1=G0(H}Fdt3M& z6)rP*PuFaLPHwRGg{6&__V5?i+xWRhf=#d;qNa6(6(}f%WE*Lz3!yTjig9Oa z&5`0_IV8STJqEQGir?+ORm5E5B4j+T)tuBWyh`c~^l9ohS5z?{$qho;Y`O_~tyl8o zQ7N?#v5aw6eRAfieX9Nf!pbY;>IL<4Exd|0=%}cPvL-QhsbSfav|g$!T$mJXoy95s zqutTcpV{`cKruCopQz)DrRj}e2pXA6;@0@Zo`BJu+rGkXM~XkRgW$!m30+dDB379m zH>a{r%0&&-No`YCHaU&Giltd4BZYU8GuVIwWJXU}*^A6Mcgv_5!DMRO8~uc`OghR` zaU}s+$rW~Tzs|b?m7T6 zpQd@;x0pwlMHXz=UaMU!RLU6#x!3PQ=EZj(HP9d!i&p9I>Mj2j;3XY!5f+jSgtFcN z0p8H~$dUU1FIM8e0=!T+fxdCak+tugxPTiJ@R(B+`mBh9U`xZparPAa8xqu?NChrZ zpF%x|K~X19gm-A0t0c@#bKl3L#m_g#cZaw0+rCq8( z4|v#n)WeNS+RWvQvw|Z=>!mh~wjBdLGb)j+c+x+qQ~*>gGK^+YWg!_;Q&Z#F!99XK zRC;ki;$c)fH#glBpUoD6=fjkv@Y|TfeV9G>qyqCZ{I0sG)aZHA#tyDNP?CeUu~=f= zI^UnH_rQX<3(&h6`r{oy)tr`Qiq`u7cIk zzAm(}I2$9!`O5ls>8{)R(c>cIP)>uG4%ee;nWeC2J7GaXkr*i(EJ;p?KJ{EcrX z1#A5{{kxckN9ViDS9Qu8W4&K`jTicWC6S7{2Vl0w4dRxx3`tB=mF6dV*7;HVCCF zFHqd-LfjrU3zoISHUn4?mRN{=~aj&lJcLc&v^{S^z?I?Ul515{ofiFVVj8jxuq zgzIg0y~lEa*xl3)@u&zzIaKn-3e$kLnVW7pb@weD^2_G@XK|(c@7E8%7m>-rtGTHL%qvUxRg} z)T=p~Rxwk#OFCkxUzrgum^HcWL92LkQ&VjR=LIIcdRz!&CniN&2M(GJ(LuqiHeZm4 z!A!9s5{`NeM^)*jTLUvqk$Gd^pKrXX8&~yvdC|Wki}>TwIzBzaVNQZ>${Sfv5PMlQ zZ{)Yt^=awVwwn*68O_!0seT-OGwHVjiY%krb@TJD3W9^8-m{XK{w)Hue+(0l!FZ>70lMmilJH2DES(~qA2qqox0cn#eW z@82k;TlFEwim-?{$tv{g zK{=-_$CkZcDPCvqMSYyl@$u<>!W5Kez=c zsG$kt+{)d~Q50SFT|bLW^`e3VZL14$*sCA3dcCd?1T!h;R5S1WHEze?Lmx$XL#LdL zi<&o_J&ts{j1=*m=I@NX`$#naj>6nk{D~?z8Wm2rPXyA|1@LFrV=OUA7|N3RQ+#ZFQ(}IGFo`mH!|MnV~%)KbPrLHbF z2{|X;Db-eW@C}Oig=bd%h0$B*R=jQ1hX#R2d~Fr*{EPNeQRx>0(7c?beA|TPb`d%R z$+)a44<;Azi+%!QE(jT6EG7BESs7(aTCq+JIiQ6kENd`3fK{va%ZYub4v25f!EG;eAWbi7 zP)oViut*P8GZeWgjqKAY__x5*svVwpO}$D-qbSyU>KaE?9a=MkjW#WSkL^V1aYEOc zxtHp-jGm2a+oRPJ#1G7p_y$6RDX_^Pjs>86WTPvBrzl!}r18TXSZ!EhoM?*?I`vkc z)Z>`r4mqzVLP_dh@a%eh*!J2ZmD#jlIZ7v`ClDsxR`H{turLmvTuR^RM_7}b=R_{t zI6i-6($n2u1w0e%Hj?uXLs8^5<>#ACb8Z5&q%$by;^Jbwuu4_=yXMy*NukCgYOw{J zNAeM-%PCTwdHgaIbU{>Lm+my%so{jP(NHk7?kdo3FFWYCzRf<~&BtkJOPSI`Wiv&k zOTZ&1(u-@Wi|aDgYaRZL(HlGqKUXX>>U^H&(kpN>PAi*@^XG^>ee1|mn&~+x(&4N_ zY<->@#xH~JJF{6;sN5Rk3_i8oB^dhW(X*vId@XgSD6h=VP7>o_FszY^w zDQf=w%78{|Mu-*LBR@!%h2=$55J=R>Kt^e+FmJt@2*YdsvKp!8-N7)Ybi$Jj?S;^A zP+F+I8&)L7g?Hy6g(-5fu7V--`E6aSmYF!!q(4k^bL87K@abt0lT%YbTgPuyrV^wV zvx6RvUz_t1_Qv(+#TRnYxdcZ|l;<4PT(fV*zR05K0_IYK&w*mo%4agS9m|R`zb#QA zKab3b$OJ*(PTSOmD^@~_$%7{M7LjJ_+KD9WX%4pXYK6@~Wam!c{zCN>fJom70T;hS zay}7cs_%)Ig?s>$FK84d2ir8ikY(T!o2nNgBCmCsAqM+jw7(wrMS3o^T+SZ&-rDvC zAG@6c(ZqEY(`8V^R>Rn2g<&Bru1=W&SX3)-uuqzvA!;q-mKwDm+E`jwI`Z)~=`tH* zvDfzFP0Y^<+3Mdlw&fDDU1`i1%J8-L^cu#^QQ+CdbUT#u9Ep(ERVC%9Ou@+8g$vfy ztnK}TB<}-#i$C5|mxPY5BmK9PtK?tN*Igm|7?#pZPPIhqf%MfTD;Zp4r^XT!gd`w%RRnt?1wtUc)uJT1wL$T28KTB@oT(Ok zdLnZ##(DdoU-;=K%Z_AX8EFS9K*gg-X;S-}B%P=s;44*+_vqx$~CZg?P>x@@iSQZxdE~f}o#25N3Y(+7SX2zXCjO{l+?( zHz7n#;(n+g{>M-$a(C4`tN)7;nX;JD`6EXn!$8$#Wep7vx5A^oU8*sOM1*Gl?{a{- z@nUs?kw~B&Kq@b=sN=u09@9X{A&&Qu_o68wqhcj+eqqeM`B=ur(h>@$Nj1hIx4-=~ z{X-eUYA?NgGbSfF`untx)TEtcd0*yQ5Mgf|nl2c|tOQ%5FiDL+9+ncjS;lp`lFA+o zPmWvO3R1EaxW@54+uh%OGehnfx7;oe15mZ|ZFzdsOhTP8H^*`Nc4Ng$Y_8JWTwuS=Q-(7|Mg0a( zdA5EEA2NwH+PSEn?3WMydZ4}$<-GS^N$l*3-?9t*nCxEh&Tzi_OP4x#?ND%9YD=1w zUh_BS@Ji$9+KK4+N^&gv?bXEOWKvi|ob$+vsYC|XBjk4{MX}kLW|i2bt7lcDhDT_r z-2z&B@uIGI8Eba};FcJX^&vlz6dA6Y=VGm+$)-EoQmMP&m}Ye%i7MOq)<>5DpmWc{ z4lygblxHakFOz?d=PH*-HV*nwgVvmCEO?algwDETF;Sc~S@DhlV3mYpUH==f{)0cu zGj!rLf8n#<_4&u5AoL3!)2&WJreN(E%OFrZPJ(76^vg7nnNg|MO+PLE;S;ZOkOv&v zr#4LTj>rZc=1LZ>5!K?N#4gF&j*gc`YlA1Mo+V@5Z2}(6?lWilp~+$(;ifhp+#QOC z*OwSW+C`|7uXexm(58>=HhZI%&C|-h#3^)oS`vH2}8Wqt~rB`Y@0w)O)eN zkMurh?E}IIl^+|e@dcUY5NzehPF2^7;h>VeFgrX1Q#5uX0l`_>sJV!lRRRmp*@P-Hy6d zQ|Uq5caO2`R@ddU@~`6bh1{os=;aymrZvy~`_(ZD*7GxB`{nJR`(br@sPt(W1w&4O zNkA`gwfY-3A>^Ntv0a?O+KC>OM^@o`3f4y98UR(5-_Ut6rs zIJ4__kqGMgyf0?<;*jp*XwAm%a~KfCHQwH{tds8uP^1uAEO?V)`-wtyKK=B%Z@buoAZ9G7WBp|V z{h1>4dfo9e7kfP1Zc{fjqh?S=A}`TB_|ZGHFRmJllJ>^XaLk188mG!GK_%+CWR6S+ zw(@j~0fL{zw-5x233CtP9AIed^nH69zg)K43=%u2s|k$i&xhSpG|I8!qMQS3$6?Yy z5@*bml;A(eJAm#hC0EBKMdrQ#PMJcW!?g3&9xfB=JJ zTo;J2c-K$3|K#il9_n-ED6}QPg(|*u-T^vT7Yr|1YKzlXUH4{&zcmIlhuMLd4mGt- zjD+cWa(*mn$%=I`vP^`=qrpwnuG~?pZdOv0ST{cG2FXje&+ncL{)A@_x?X2^UB;VY zZgTG8n#NrUPRWtG8m&F|rW8E!1xVSgUDLJc&90~MTXL=2u?TiltNGVdua||mH~aS6+Y z5(ZI&%b{axPAZegJYLk$l)@k~R^eJ9)l~VjktuBi_te0rB>?v9IC*$zJGxGVBKPy1 zqWykOA!U3K9p6@~`j7k}dqCUjR>~OrBpN|}*A&d}?9x@&vua`S{n`WF*AAtc#h$xK z`xgV=RH*H0&RT&}(wV%TM3kv)vhQtqQ)!W-##@ro;;KdamSe%x*NzEg`Yns#QbSW; zk%fz~x&_A7pZr4ao9Dpxi}tZ)bJo9dNGEy0b6ZK~sl0YkZ!(2@J6})Hi_HlMj`f|O z6R}CMtF{plx`ym_q?ydacP zhRIufU$Yli`b)py`-1F@HrLF%s#=-atlsF`Kr( zuqDE4dQrA2GNWa>w&KV1=r~k0J%n8|b`}2N208X9Q~wH)i!FKG!iyeIEy0fwCd7MH zN1cIl>~O_K+Yu9TJ|OVQ(UoTtPbuKl&q>(hI+_2f)UniM@1V|M=}*99xG?h+);KTm zL#q}Tk)pJM)%O}OLeHI#);y zm^hT4z{;~q0itF`uP^wPOpbKgaz&lVSO(66uwIbr3?ZAJ9;VMJHL$HHEotxDYS}MN zvtib;@wrc_HsE!)j$OA75y0OME@=VkPKfq@CzzFG0)z}B4h2O2UWBGyFuB)?>F=eW zZFC(xxmWL3U*Xl)|C_m;N)tA90GQjY`|3r+|IXY3)rS0V_Wmqp3BjG*f{xPPZ?^$_anuFNLat&z|R$&27hlj;v@$IuzN z1r1f*#^At?2>)10WeCD(auGU&e`u~$H=nO}?Ov_V(JDJBktq7)ypO@2`XEMh*;AE+ zlWyCMbd1W}%Bnx4Q0D{GgBV<%v%-4Ln`JtlE2ty+l@!pJ*1`Rlj5;(nvNp)~^69fv z-z`~cjP8D{u4xw&rhNm!^CMJCi?4@oppbJ=g=?*=SGDoX(YqX6FA7y1$%&9r(G}$bgLhEaLD5`dYpU zx*#bas%sF9=~jZ?oiOnM*7UqEwR^HOZENsCVQu&*#eL_3@+=-%8sC2g@48 zh@$tM=VsG1Q<^MgZ{*D5{7Wjao0|2Q0fz#PFJuwLJZ{%87CVRCnjoOqqr^!7&EB z75K!_QF-+SfIugWZ;B3~XE?QOFo`4jeM0XZKXY}zRToMJJmBv#gkI8sUrCDg>U+uILMpGr*xF>P)PV6>Vdn_07ViB(gQi6ujA}a->FNiCRhx znr(G)2b)~rnQgB%>hb+*!SUbfl5y0h5aO&EdCU6KLMACM{kjl)=^J5se{_ZB4XJdP zn-gr2(J8#XxHVTcRz@GWzy&IdK~PmV+kQ>^F6ch$qM)FFjOCaNj!kw{@zJBmMW<%I z3bSn;?v$Zs>O$JX_ooC+C~C6j%(f4A1J;B)t?u&Ae|T)mQr=8A*NYCG0`aTMhDonh zYNu%`0meEh;hmL+UH~rzoRe}D+uL+@2?UA^! zydYvPW3OKKr#f(cj*cWEZ({5043@Di3{Ww%d)!4>2QwWf4Zhq^oYF)VB6g?OI%B|s zq>8pT>+Z|*y_yhpYrB>HDzJMeOvve~XyLN^MXHG5CthjH{lq!lIx1vhY?&Hr_#L*y z|KjYeqoRD+uF;vHK^mk(7$lUIPNhW}=?($umL5d9OGFw50cjXOKw3gNq$QN@9vJew z`MuAxzH{EQ&iUTw{KZ-%MkedvjAB2wPWv+oI0kxB2SX;62~EAm(teZ|rpw zMN@94T_AyQ3vrwcXcuitP1Teg_i^8tOJbRD$nOhVvjCzXTb8_>m)>3x(rdBusWzdd7{hoADs;JAapHvFW*Vj((U;ZI1 z&vD2xU@RlIO_O1YPl`pvIKXKM{{lxi7IM!lG2W=mH-3Z+-CqL{tXi>_Kc8KW5J=e;mrT8hAKV_tSD)OGi^Ko*j!5G1HM!PHrtAP#0CLX_PRY z^pX96O*1CYoV+&;n7ehvXL;p0uAQ$QrV8lLh0rsuluFSb3xC5*h+hrPdX z(5>!B344x{5Q7b zzfrLM!4C*(tkGW%XB}dv#1ZzY(w{Kw5sirRL(zpJ+==!XuSH5mouAH3s7@()ScE)H zRQM5My>fRk(=t3Fz#I|qLoK1(JwI*g@9^-SSX z2?w?|E3{IN7~CE-#s#)MlA$qeouQG+7CMpkgva z^H#OG`+`<$m5TpFMrwP3d+w0Jr#D9w*Aw-$a9PI`)A*y43NC z`9h6J%dn?ww*TZj2^Fc80xr5;O+-@5bR>M{2ZM{1k;(B%_=BC;qujJ=9+R|QZvQjU zQ=gwZN3JV5Biuqe7cxP(ms=qZJmWAnl+sqy?b8bB@B9NPbr-)dFsC)d(=8>{;9a`} z0S4*d_Rx3#zQOq4PlW%|RnVcOG_0670-hf_7YVq@z4N=KoEGc}9p{{H*3JManB2Os zhCAwmQ1PeWD7S9SQJGbB>`y?%ji$V&93-_SF)5ZW+WRM8;#VQK)_aE;+QJlOF zL{XaPEFbdUvqj8kpli_55D22v%1LYQG9lygLvW*39xy@PV{4+5yihY^#K7M2Icq(? z3*7mA=63upk*w$Eb**5g-~O!4LEZT+vi0D%UrnIRY(P9$lCyqo`Oepd0GmB)ELxs^ z`Qigddko7(w{VHv;%su1DRHbvuD|l*SDCi_$QhZdN5^$Me%FzcUOP*-Z}1rWeurW6 zWz|hD3VLoR`4SGImb`{Mh5CXDbMWaz2fb*8hLH>26qVkS2hR0a6y-H@UpgR4YejkC z3+MI^7mEXRKcNj_RdAf09g}XU8>yq>i5{J_x184~kz(O61sG`PFw_VfZ!rDcvXz5o ziP)>rh&`7ybc<}X*(YgU8=gN~MylF7c4fa&(6BC2$+T)#S(9XW*|MMed-!~hk%K2U2{iS?TB#OWe|K@Ef6dAZ za_iD7w)9%xjSxs-cfre$c0iE3m>?GTrA*pP++WY2t(Q6%9|V&W zh&v{NjyJs#43;r&nLz(t@Phxz5CN8ImgwYTm2rFna4~pM<6*!H3TfHPIL=)z{hA*Y zZMVK{INz`Ko44#j{APDYoMBJ8&w_IqF@t?@S0zdALMB*qmja22nPdVf<o-iB_?2gKp>kDz zsa&BE2)FlaVTuRf`F*#M7$6bu17X0!tb7Nd z@KM~-ox#M)o7>;OXK0Eg0r7=60Wths(}|K5IT!GekYM-~Lsdv@%DiH8wsPRPqxY=L`I3#}@sb|mT?tbbvOxkp zai3i(|7S9mz7)!e+r-K1Y%++Xuc=RdpuzT>ir--y;VS5X&A3H!HId_-H1aw~j*rd) zxbr7gY)XD|6uz@=Z=%ET*Cx3RfmhYZ4VY~tz7~NLV1ovNe=@T6aCtd$h?!F8eV4(4 zo^O+-$94P;TT#dq|I9-cs%P(VRWikYdVQ80l82^mJl5NRGZy&w=>RGoh?R{?irsI1W@o%%F+o!fv8voXsVQ!ZuDyd z-FXCWh~s(5iep-&rNbbR#E(`iXzEhjdKwV^xSaMONR^lN`pu}g7BEB{(jgZKiJb?r zmeq;TAhDJOG!JjMA}t=vo$9SLUR>nFig1Q-8$jxCgY0}vhSD8XlMKRO54m( z6Lv6!ljNk#Uqc?Cl%V}LwNf>Yg`%MK_-7p6>y+~Sf$jmhK0^0<83TZc4Zn2}EjnX93xwU0#19S?31R`RRVhj({GptI^D?U*LS8d(z)Dw|&Q(>0|_l6{v)wfzMNa!YFl+cwet*NPEBM&Cj6 z<2ig&w>+C#&tEl)J6bwjI<5WVucB-P!9wn&49Q%6KavfZyG^`}u_Vh}1rm4KwN2Ag z&Py_{Es6m6tAp0#N31XG5kEh%*V>LT0Yw$9ZzxROwCfn_ zr95IBq*ahL(`%$&v59r^?e>K9#_E+cJZK`BUCWq>&@2BpX@yV42+~MF!6ySpz_|n!y{U;O{REDg|Z}@eHtz{tr@q-1&Bs8e{62jBdGEA>9llZvw85s z`REJRD&KDx?O^KYXSUAOZ@@*(s##W8bUfW;-+t*ZMm3>+O^`PqeKFiklvC3$0RE;! z|71#fe%=#tf4}!^&H?5igkcThYLm}VF9A7>b zGQv=^_C$x{a?7cH0x>4|>i4>_H+RF1^L4a9|3QILAUyzv>(K~*Pwq%mNfT|?cp^`? zb^P9 zHxth_%k|4Aj^|F!N;aE3jmK3O?R4jlP6uM{Ag(ta?K^ z`gP9N{;n~thBxw=)wR5b-^v)h|E2A0>-yl+L#ci=J{g_Xr!IlZ?ZL=F{*f8ZhTj%# zmy?yW!(vyvwT>ea=ck*ovWe(Fo}h&RkNKv}#f3?rMXU0-9<~m7Xyx{HXG&oTZah5U z)$H_*RdgU7xVuGo0Jdub3d^rBQ{MHn7j4=FYLzS|Z{poV#7ctB<#L48UXa$0X4In< z!wI3o-9B;Eaw5+nV#Swx*Vk`Taz7Qhwe(r41u*tgvU>G(5!`@@o}NdGj&ZfKtT07A zS%bV^4QNlBS^30Caz-TtjG6o(x~OOKQ}rf(`N3{+HJrYK%mFfDg4^afC*};zr_4QF z2GHt#*puMwAfV3UYEI&~k9lvhGO!LP11h%}MATYz<5p^gMcFZ5_RUH2$89Nqnzdh) zej;6*AndQ!i7@d45-c)=w}lX>znbnZ!Ifty5+ zjQ;S1Ob4YjQ(fyQ(PZ@yo!FQ1*wnRH+0KDb4i*)N-bfR9{(55f9Jl zUjs67843kI(((>%iZz}oBl{UWr4w0AC=aBd+?AS1H0F12)!KFA_{sO|2N z-`j43(sJh-WQ8b=pg&yY9=4=UIgp~iukRDEPIag>p0-FXdNvP|IKMe!#i-y)%Za`& z2*Xp=&ehOjRBrZOq`taZIRAFgN0wOJg>E^V(cJHJxl``@uK8MOb(+`hhoabO0>#Ws z^&5M11ec*B@`qMUqirZ>;IR_wV_CBCnZCL+XW5r$nA_!jMPD^;Y0%CX&(V+zy^mj& z)hRIO$c|qfG_V3xs!SmB&83i`mb+92uRCEz>y>(`EwM+xCr(2=AS3gSXggeg6QzN2 z>Fx6(XSz7wD{jmt`?~l!ddJ2txR$9bc~Z=~jx*BaR!bc#rrm6KP8(9RvcTYT6g#lE zYCBF)ve!>FxgALN!t6l~X41nzebBI+tmf3?ol1~Pz>o(yu~PH=^vukoSV7O~$H43XoDWy4u9vr7!&(?&TpBidG?I4VE2gp ztk3#i8?c$*>)dajk2$>q=4L7@+#~~+;fG4x5BgqGx=Ed&D@~VvKF|zyQ~)NK_F{cIF-+0QD*rL9rl#7)6X@knYA@b5$V2uJtGq4={GG9(7*%NXJh z+o{(2Y?uizcIxMyY6rO6et+aLehb8qW&`yO3muX$2?ye>ZS==bDBjx7hr7%qSKA#9@S z`}fr2-NvN)Et|znGqH>?9+)&cmFEy*^Q|Yl3T@kkgAlS$t+}>@KIij0j!Vr&3c|ES z_QCO!Y1t>gG1B~L(bAGWUkO~8kJO?C`?g25c z?g=RoaHvDo*nzOTfn*O{QEIqz3-3_T$xD{#4Y0 zN3T)F-49&DF&$@nu~lz%snP9>@KYF^uH3%dM1$u_0Qk@|vTI135#G7&fSD%cWi?Sx z9dH$2&hNB5^r%Yx`CRi+bzKzK>}X4m{DZPuoRyxLV&0XqyJh*(;%e5MvKcz>-;SjQ zbLfTy2-V=UR8`uPBTYj{Pd=D)+I?WH$-GpzezuEn(RmnFNo zgt%$(8W~J!akK)RJ-goudbBNLefzFP|AdrjfH;#O1x-4Z`t_^qes9M#4UwmOJDP2) zvVS$S6!v%wh?Rjzo|0k24bE$*(|B&COP2xXHH%F!*t-8~1ZhnH`c( z2)&HzWB4P{w?n_4B$a!X)e+y=J026r>@5e_%%qsdj_VVKOgBNGsT0W~?sS$ZYg`@h zZ}ZDnz^1Dc2&=vHDwm#h#t#yTJ8}gcQq3k0MK1n@vWK)`OSUKeB8E31 z;`&cqVopH8yNyS$GfUkm4-SIvniZe{M&1}wK<1{1Y~)9f>&%1Pgr-YVFHzd}=zVCC zP>ncFkZ3O793zRfMkQ>yD$;QqQ<}nsgOQPu#*69Y<2BnHPR;hb7&L4b;I5NiE@kuU zePP({#Y%hwhyZO7Z~hcx-u8I_!gsfg;lvhxp9R0Snygk&sw&)3U^qSvLVhpX_CoBG zc)TX6EMp0HW3(${+B4F_yCI4}IED8B8czme+Zc=G4b#a4YKlREk%zN|H0h_|vF<5_ z61#ace)%nK1;QR(1d&I4^xFyf;$Hm$KTKje=BH7`1H1u01OpTl+EupsS;yjSL%cw; zB43P7MUV&?ixKhAfMfp~C40#cTNyv-6zPq*rD}0HP~lEkA*vPi{4BIdLuz*n zvq=u6r=T4vvhsWV@wO)S^YNkATmwb_CguL;i;Q6O!P34Zc-GMNbzlXzo36h)elCCLa zS-yTSc*InabVbqU9oj%ErB+f^glw9}z^JGTJcICIJ)2K3XD++THHRqeICl37AZH5V zOWQmJrK_xqt~p@bRMCn`GJ2FAFAbm5Z($lqH@N@nRZ|vN-RnIreWqe9#M`vX zsLyq0;zTBrjBeRGBpq{8bNLO%$DVdN+GBK%n+YBD+LAnKQfDbLU-!{ifKKIk zM^dk1X&IW@cZK2C^1gNM8#RZ7+OLw2Wd%pf7>DQe^Nw7 z!%5_|VO%uJKfY1#w@=J%VB`70$TNZLj@%KVg!f5XQeE^TR;=KV=y2fvVQ(NaUT!5u zO^MH^6t$?wuh(ZM&bFI8K0TXa*ul8?Brx$-AZy1VcWUU{pPRiZwDW4asJF^LrsPxY zk_KyXok9}E?NGFj6}RWsl{u>Fa8qtZ4z*S&?+^gQ(U~pF`4=>jU|09wIjh{2=vti7 z-E)(aT!9~Qa<@tj7*L)rIlo@=z(}r{wBKubQi*t?=96)jA=wotvJq0hlozfyWF~>G z(0WgzH7%JwtroUVP6GGh({* zWYZ*C>*2G5$0D{jskg*==+x;o=)k;{ztVyM&UR#2^2$LX)%hbn^|QV|JljA$=3tv% z0tK;r8n@~GL3OY(NL0F8gIQs={W)3-H^>v_0flLqy;#S|*pq(Wg!A$Sw*B4gEL0GD z6Sf%{c-CGuS)=i#YHXiqS)wV?XU?w3CuixRM`$in#Qi&c0;7FMHKro<*%-KGbBWp4 zVyU6^j8mfgkRbjI?mJ<-ap-i?5BErn^(}e4*41L2M#F(+=J|b;3r!$vpTR` z^JvtUYsH1#Hv~%NIVh`reM3YyoDGN-5v!$-f0AyqHhnC&4n*I#~X=PnZjdxJ}Z+HQ=DFu-1S@br}35~y))~ydsRBO zK<|*SV*kd62>5Pwu!-&aAso`j7uT;djxQ0t-!}OzqZ{)~{Ch6^F)|0fRm;tvhI4M4 zrJa#%q<87DW){$`!^DU4QtfdP%7PrE?ROK^{?f8f!5JL>;@xzq0%S6q-b3a8fJOcn z?VPQEaX}Fzt(l)B+4N=db|pLma{I z$89-*f4SDsm_ek)1QEZ?HG7|Q?73ilJc+)BfX=K+il!I#orxGt)sQ-E?EW1fGz@*O zit4$S(br+8%O`=yG+RQWZ)rZG+j$KrnAhdIOc`oP(Zjfd2xChNR4gB6&Q?|rhvBET zCHi}bu1ZzQ2eOqr`hNQU!gERh7hYyxM~WUF{H>^0!>iw%aX2@(YA{w@bH3{fk|2KJbJ6VoN|Ai6xh?#v zj%cl}=QB0dHyPwx5yytowhNUb9>4c(Q#k15lfq+7uWz4`qdq))_RG*+ivE|Wy}fSb zQRB&X@XbPy)t>0=*o8~eO4}Pb8#>;%h`PSY^)1#Mopky0Mok-W5_YbIA&3$UM$})< z@$o5xQ(ab$&uW66{pOlI!`BoEg~z2lc7%#iU`>@j&VMnZGx1Hk8Y?rKOMHGM($kkQ#gSp2tB~9T#%Xg+i4#f=1N}9Xn35shAY#7WYdi(Dbp>|ra{&2X^p-XjzzR343 z(-Lf2^^x~||FAc3P|%6uMdBa#UfxzG0B0p;>a+g~XNmoTvm`tNqAC}6+@rkLu5D1k z&ES>~kM3?h0#gM4M3{W$;lE_3&R61u0g4IQOdkPmnEn6B4Y#Wqfl%NkfWo;3gT?XG z@f9B!e|!E@>zF>kBac)2nOv@b2gHBgGG2lf(->i!XdG}hNuX&Kb?*A_EP%j^E{1x5 zkC->FXFauQL7i;O%MePeYP5mh)u0E92Sb!% z$Q20^P9+X};uS*SH$eQ%Y%g|ZZ!C_q{H4mTK05gWvlZ4D?><60N~{&&;$GP(L`zL# z5~fk~D*dlxRmC@v@7ih)pq*=4zD*2?YT%1a3dXfKv3*-$F{#%mkoWP6!B_~8*v5Pk z0OggM`77=TW>bo>93ze1?Fgs$AR>l+^x6`#r00JV6B3D#%aHgCWr4SF0Kp6?IZBW4MqjM z(siHN3?vyv{AB7-GlqFK<^;To=ijjy{73g&&P^Jmd{1qso%)s^ z3A&G@n|u_E<}DLs+TvqK$q;n>oMzo}58;pucSj5+ajhzVwnrem46XjQRAx(9-5rlBlbKT$lh$*Rud zJP`@JekarXMj|h%$u&9d=rCJ!SBbZWuXvkP@K30uIqSWY`s9C0ssHn>ZKM`*p$1Mo zEYt;%Zkw%?f#UXN#Q5?8b&>xcn+%Ad8vHEjO0ryx9H4QE9jWAz^vJF3Gx2 zQIvN`f)V?)UvI6!L`ca#F)&IeT3Q9Dl+lq)GpbBEel{DVTVhlmm}4b7 z{^H9$!-VnAHndgGLpmbE04U}WfMRa@|Du@xvk&nrMqxUDT#w{nQXCD7zNHHu6Dr92 zQcPApXu|A(36d{-0k(aAyM)DY2Q+6*GCy_WKOG6WtqoWMvOGQaz$VQ_Pa^tIt`n(_BIgd+)mETxHVvA9md9WTJ`}=_CFqS(JcETLFaUT}7Tt z6hZnesoI?%@{U~btgbSkoX%%8(Q9*8#_=yaGBA#&9tOYv+^dL@y(Vq5TJ+L#}b zqx3GzKuh61=nr5B-Ij*(FyZu(>Lnh5IUx8Cg?#adNXz?)74ftL5x3l0E%kFc+7nfjx)Siruf$9mtMVC2X6a!Lc%Wh)aT zh5D)1R1fqCdGb&V1&eQSM|$@7LnLY>DTUgfAn!#%Kj2lj1Emk10cElWD|vKNoK^fM zH}|y?y`2;WPM`Ua(OgY^try+g)Q8-RygQ+m$5i~HmdR%>$3I!;fk|aCO$z$#V>a^J zC41z-iM*tH=XF)0u4-B6J=u>eHNELK-xYCRzp%mOyal=`L}QeFrhfeiXV~BQ+m1%K z3pQS<4T;UUyWVKcJK^o6UD+X~ylC2~IC(rGy7QEQ=I~hnTuQpY|6y@ZH@WV`HEB25 z-qw?iyA!FqiAA8^?5b(jt|*K40Va=i%&pK1DbR%i=6WQJH}n?#{+HkPY!of`W=s~k zQjScqc-DUbi+jJw|8&TSAK;QDu-t7Ex-~AR3n1t1D;lt}r@CgbV(aVnj!Q@s=biz# z))?wu{jB+p3mjNVSLf4cKP8w-Kr%P1{^QI^QICIJL7*NZmchPvMhRrHM7|nhg0sIe zR6Ek>WK$jJi(&cO4c7_=hQVfHj>`$p3BdInFN*rKS}5>-MsNT0`4RBwExH@T1Ck8s zuSXzouFGnJLohksmiWsV=seLZ>M5`G>VH#ktrQ`-9jJHQ3*v)v*fpCCc65dH-+ejk zXy=ww5tcQmRLr>uRcEDlSmaVqw*7<;DkHahNa`BPFn#3X$WMo$Pw4vFZaz6Ux@nJ(R)njFM;LvcES0)JPxjghXqKMQ zL8bCMTsAx>9`jkAQJtLTp=I*?l)_W;c8EFYrC=7ad^3O?TFC#NPXcxIcMr3YaxcJ1 z>xAcnT2#ZI7A=OtM?1B1QZW>ac5?OzW5yDH81Nt0RaAim9KEiU39A>1Vi5ZT&*60~ z&oxCK?@+%8KUGQ~>)>w3IM(Nj}ZTO)dY|E&&izoD(~S*75<*MERB?B{|)CwXSn>%oTq=T zdHW8OP>mHA%?*~elMa)*J&NB08VZ8Z{8%$x-gg!Fn}dE`0oC&BqfE<;8jk=v(j$Y{ zGEBw>2B$FfuQm=uts#MWs`(BCjL8m7I5r~zm{HDjKhWQxlZl^>%Ft<|eYu)yXkC-$ zxXBQ({}_@0bN+?V$^4#8opG75efvEI9xW1m5IWA<4qaw)VMM~zz?#gR%!y=Fz2TCl zkK+53=wOmP;O~l1?R-m~_L_lcgqWd!!m?Ks9W#F>rK8;9m0(B-g}8OVQFLQZF&=#1O(wAR&|RTwvT8V8E8T{v>zZXcuAUS{u9 zBY|2?CP488`AdQe^fyj}C8aJmE#HS!B7mpgiR6Yq7joWN${C0ia_XU0X9q$UgI?X> zd=y>$E!zx$j*7SXlK+vt=^tSF&I#i}2(=g)R1l9YtynhdwN}UO-f>*#H7Ou86QEWv ztT<?mq<0!t)?=L+vCG{OIw1s!;9a}-2J)k`hc@w}F*3+2Y(VcTn3q;@Xyhc~4>M^``2ci^=G$NoCX zR*y8=o={p;8sN&RTrS9CKJ5xS?ac`}mSyb5v^@6xitT_aJI9ri9MwOy<)4-RW?aZ@ zJStc7*lu_}O@;m`0d#(dkt+K5H#gy>&dpH`wU{xZ`jfp9C|H44^E5gDNU=Mc!h1+g zS-`rap;hwvHEoJX$^6ytFYD&=vA`%ABLHoM?P#sDPZ-1C_jUksEG5G|VZbfP>xszc zN>_mH6`A9Jk*UT4+&Ae1FIdm>{>Xj-*zp+$jK99!OTCbqkqCGOr-jbHOldRwpH59y*VFkaR37qUqlDrtLZQAf^M>Z>1kfuxI&_BqhY32&&xgd2TRCE|K&; zRPL|;($yksf(K#8n==y%7t&E;Mlt|J)kaw9?N~=3abETLEX(9-E~}Fy%C=oC9Eg5s zd@}@GFqr_G&%8-3a(v>Dnobk_6*@ge6k0AC8#HNU^=C32qm>C*8hmoUO3f21(EhoB zYCf)dq)sc%lBit`7RLU7`%TDmTN_Jh>^$+~+r(>BSr*j54kWlwizF1v;(J7Mls({#)52q_h5-!WoBwN|KQOJ%)jzb*|e7WCB? za}!4$7u_G=nuLv_ola?%(;C6AtT@dwP#6{%r-i12Sf5EyNj|-AG0uSK!SWQG2EWjv__*POfrlZBgv-iP zR4)7)9$T#Te*tyj92v|Q*-tg*L)4zUF zya94_fLcph3-UhrXc~K{WIxf?-LR9hLQ$c&!MJr@xKp;&PDciKpkKem!tQlIL`iG* zPfvmt*u(77^1Vg1b>CUxpoqD#;lSIa*w@p@p~#^ZZ#gP?v(mOm0a`pcz>v<6YX;?Y z`_-)xJ#rk+zx*P3XbQIf+e{>(Nr&PiJ45XF6dmbasr-69f>l;#Zt3uvt)}QZ#Zk7| zY(b2#UtEIkm0aW*?&wpMQPH0nT3Hst$LX6%BT+Kx9@U2p5px)yqJqETFHwAymhi!H z*jBo!&?Z~d#*v}~X?biC=@~r9>gx(@=qi}JsOdky?IYUB6~$f4<80zUwb~Yprk{6* zO>roeScu;ugJ__IYOp+m31d3?SVV=PhMA!bcAit6WxVjrn^!cB_}g!!$_pPmf|JGr zUY~8&OLuRo-#Va#PgsDFFQ^~<&E!a=Q!U2wdf{*gijCbGQIzQxMU0KHG>C0m^Aq2y zcCTfRgB$4N-5Ec;F6-6ePPN}QNOe+oPD za=K+vK8E(sXTYt{hGZ){@EP%=RfPJoSr*bKaz`RwN-UeKC)<|E(yvLZSg1yR!(~*q zQZ`du$Jr$BOR57K;aLrQuU3Vz$3Qy?Cy8G=It zuGwtWp!D{X_6pb+>15dpE7f%Go_2gFP@m>VZbq7rdW)tsE+~{fnwjzHH1;&D?Yet| zic=qNkO9P!&AxQ$+-X=wW!&`^rpm);BQ>-UP_a2SjE}#4dq#dWf z-A6n*_1tBdt?4Xi7BX=k14W^m$LQCjZ zYcCKc8LDyFuan z=c#XvqtKFy)?QGq&8Ke!)rfN8ZqxBV=P!{SxvLma4Jij%uO+m0Us{(s7hnaN#7<(b zo)yCvt8g9F8Dqx6xBd3!=MC4E^1s!DU>by68^Yuar_1YfP)vU&I%WE>P-v~>b=uFd zb^0qm@Zn#0{TX?r^|q0x?{{9bzxz5bF`BT0vU(c$$g!4;V6@&`$`J=^6 z?26ADRfbM3Pnp)S+}qo&N7E%WFcY*By)Y7|o^aR|S{LFM6D#@(Gj6f15hp&A)@;ZZ zrLMdVGjrUslBA`h}5-m+w#^biMsfP2d`CoS`NdzAJ zgPqzASQV+~)_^mLkN@Jc$73AiOaW5p-90Jv^Z$NEL44dr3mkpI0D-KZfpD28@B>;* z;>V}@7P=-rg=pC@?{*t$-;`LIeo$Wg-T8`FM-g|`y^rU)X0CYt(|q<^T4GGFTrl=M zQ3L)ELbr-%i~sI{G^uTzZ6qvQIvC2tOtN>nba%5PF}_N(bRi%A4u?%C2#f+nJ`SZ0WrU?vXWM znR{wqdGQoY6nTz%JjdY``5iam=cSnwNGY;U>Bo$B<|VT1a)uO} z^oEjxns+!q3$RPLzklN}sA8)aD8gCx9v(vz5Ujn$KxCg{9T%LB`VC6Se)l($fV+U( z{m17wdlLkEV?t9{Ir@xR{UBGZcv;z5p*GY|_Q=NioPFil2$}uGNzUDOh0Zm80f0IW z*QcV1^l`AC)Ov`*f&>ir+3c3F&M7FwZDHBR(yW>QtjILy%}N?2aN%*MS0tYCpYI?J z6_D!;|AP;e&*81l$ED^2lnu!eJrJ+A$zsWX`wk^yrPpebEOk-lxReGf(k1?{KxZBV z(v<_uo)2?PhoinVBo z0yiq-C5srjEc}7q#2h@*omh$k9@&oViu0|vk5W6Z^P9DF|^B9Z7kbWdr4jLYcDVn3cg<&V=D1Zy_Q-1{q>`hku_~p zg*#j%5Z6Z_X&JO-9w%H# zCfJ+AJf$zIJrgh@$8Wex=0_bXgcpb1y9itU;5%2d?{+xM>PGx zcLoc=e7xCqGv7ALaC?Y_NX-5g=}bB2sVMKuJ7hYa~%hw z6+)8osRGu?qz3Ju-{3G~@|5DbFSJ1%?Ee3T1K&W*P-zCYT)W)Zm8nT#cCs@KSCCBW> zGV5N#^$@Ioxf!>BhGLx@8V_*3wWC|M;Kg^aG+J#OjnMEk7t%ufG+G3MWbGsj|1ttI z#eBDn4&TtHd+upGs&TP^!hl8b(&*(H>fihD|NJ7%?1XH2Y1NPQHda!T3hJnZ>?AJ- znoMY*d!`sl7)w7H@B@u2a~czFM46E#eac_S9^9-e2s5BUF- z{>x&_In<|f%JN(@^4?NeRA6S8wm+z3gm5-uT)|`nqpqr6zp_27-9$D9 z{TUiI^H*zG$kULZG33X31=HYeThfRJ5eX5g?P1A}Rop%iQ6}+$X*7|50^y~Xv>65} zx^LU|%{PH)K$0Mj_y}?viJ9evVPSOA&m2H3fhQSDhzzHup9MVk8i-fcHyjZB&Z(wZA0WQ3aTpA)4OVHCSVb^?_(3ygR+BZWr$!e0b=g*!w zFN%wu4Dz?+#84EwbbdGrTp^7`!@a)B3TiODzTy^#Y;;qY0!v0eo9|N4(hV}TGO#;X zgGmok2syt2#1oB0f!lDZi+Fs$-^wAFC9ed#sl2 zAQrROf%$-Tnc6I;FJ0D><@mAmwnH!i%9IEB6u4{2063S6D?qt}?8}@kJSQqvYPnjV zMGz;LMBlVPKCUL?&bOBMr&mu5l|-V1{*r7PAnE{ZV4??F$n5j)y`WV6C1`#yBz}Cc zSL)VP?Dk?Mpkg$h%=b7QFCm2&>zz`g9)F8eJUEF@@Dgk^;LA$QmS{k;O>V9m6ha?# z?b^Kd(a^{{za5e^-Ud|mqAulydgymDC2~S|EqgBX#u#8}p4~P8EIVb%k31H6?hezG z43cdxpCw`*(Fh6;fybLEf>)f6k9o zrQ;qtAGc^-NF>}jBp?8fA$|sZqPB}Ic-s*>sRHW^Hvu?;Zff`#5+ng0aIZ-t7}3MIbVvI zU*dy*lm8OCuTdU&L7*63k3&3*`3!pN7U*pJ&PlSE<6C&+Wz~cWyFX&SlT&{7zach?AOEG z?o@$`_**Owju%X^QcB5-%u1){JatX%bhDY>SX@33ThAn%3k;{X5C|c^{u&f?lWnVw zYWmyoGQ8hXp-rVswT=C)&-Ykl_E!0pVPjy3$CkhMkyv65dF$3QPA!3Z#_O~kw3I;# z-80O%b8o~+dfR__88RXV|L0bG(!Ty*_nd%dXXXOjBq0yQ{|P$)oq;w%B*DTX!YdE3 zuq=43pCjwK;sF!)TY*Jvm@5l){%{!@42&tNXhG9^FR z7jjGY_Z|@!xW)aSB6F!u$cSIrMOTBU^0!bMInLn>f#2pqqbwR>zA0#@R)OgZ2swU` zGLtS}gOob-*S#uCKY0?t9Cz4g{pvKesXa>QR$||+R!=B3qV&~zSgCvnSrc|Thp@Am2dltvWeky+d4G8lT@nN`%{r>l& z{i5WGg^Gzw2L}D#DLh%#ZNZMFS$0|ujVT{fF{*yGJ50v`dTg5!pf7XW&n~TbN-OFA zEd*YMpI-#g^@9BLg#lgmibONcSL0H%K>wbi>eL5Yk7 z1#PDI`3hshTv^_~@zxCoC+>1lXZhWxmgbbtv+V+^VqMoZh1JuSu9v|f5iYyQ+>^1w zUM18QA^5O>amI!OjQO#MiW24m-ZDvKrVDY4l#6JRGNcE6~?&a^Z!u>uyjmWs_b|!TyOJu!T{~@5{wFfQL~d? zuC$jCGPuSbF_KJo{f&c6!|bfx0UYE5fP-NEf8ijl&^@?j46(#3zFb_CP-JGmJ?AWE z$$#tR5)g>E*TGD~AVE8V+kW1!NK2+8>*^S(q+L~Vd5 zopa{D)=lNzFLsnyTCY!4-p)|RmZJDvUjdks#I09`n zZiBj}7)p#lze0L1i{iqlvMqMKlLx8UKk)nD_vicPGhk9qU7wFc`;E^ZCDuB+=$7S_KTz0VWyu7-=H^b>oBM9)x%bEz(OFayDLdEE%doa& z(yIC3a`O5+q5csAw6;e6jtT`r{(PH6Px6?~sCtyuA5WT*gsij)`fbN|(oES;9z}kY zVo8FP={KIt>|thMn(L8qabARqG#}ethkJ(V##k=iNWdHOjKk`k$>@GC>}Hx&I`ecZ z@~rpwxJdDzctRT1?&pS@3RNzrWW2uP+wS+#PFEEb#wMxLfI{F1w2F>RE7O{wbBr}AKqffISCh>pRxCJ@A{&l7Z zgkgRk8yQ9xi0+Ai`axZhd_h>~bW-ee#3*q`V2t5-mJEq>5EzYt(T3p^c`d~6aV-WA z;_Gb(um!%^T@O4YZr<(XkUtzCUq0g=4y5r9JuEaHYO1;Hz_!zf0zr{J0!KHZ`sCRY z9?$|h6NcTGkfw{~5lzN%gi>ZTz4w>a7s8G2&}++Y^1l?K{HGT ztTZCB3lAyi*E^Qt+s;8>?fSXQCrh>2p(jrvc7VggK-L5tZykSaf zOxe0!Pia^W=(CyZfk3vlc<3`^V{LM)9vx&jqbTtCROV+b$Ahnp6mv~c{=^kVEA&>1 zL0^lXRYeP`JwEuA4x-cHfO6ooS8_;L^pox8QZByCW+YIME!FMNTw5l}y7?s43ymxF z?CKP$L>Kur=S1NQBI9AGSjTp)lREk0`p8EVkl)_F9p=wgSW9esmsA(s_V5S#idOG2 zDW+TDi5+D7uH;c4I@MSNq#!p0<5KF_f4e!BbomWX;}e+}JJ(Vf5R1g<9aU_t{5w!HIuqgNT8$C%DKG;^dX%?>3X#yomZ{zX#!m0TkGjH-pZ9n*CWG2O5?6E4X!=vD6gdP) zYn%h7{f657waGYkuC-1QTW^{~kYl!7BEg{(nKtj# zrS){Uc@rFBzh->Fy{rtuBT=56Mmm_Ww?7Kh&I=x?&<2Wfw{7fVd}M=qNK56Nr$&n! zRmR^%LyM~~s$ceX#GM{>7ngAPRI{;7v9^;vcWF;a9-GcniAcI5%{bRI#On>!8``;j z^SO|EosT#ANX#*n9l5sC=OOcFyhf&^OK>QalP(Ufop1gbr_j326i`$J0Pdl-NX?2r#a{mIaoin!{*m54-vID`4ckXtJ=bG<*kc~VX}($G%jbKKP6&fs zeAl2K9>+DQUB+SAy~a8a6_Omaw-ADt(?5=rYd@M`U0E?1*A$y^$_cBU@NM*Hgg6PZ zKbW(>!yg<2he(*qV1f5!FKM%>Xci;+=dB(vNQ$REzvK;;2wnt8Aon7TB4LG&J~n$C zfdOd(UZn!c0{(YCLm2oXz+>el0ftJQ_yNz&Zrk}r$UxIZ+Omj_i;XgdTy5ZU z*m<_+-j0~RZ#ze1e+z7}zY52>dIFIHsf^|)8En}L7S3u{B~CtV-i0G51sbF;js^CB{iZ$r{S*+5}E^C45UUJHrjhK5H39-?+V z9QbkR2nC&ik$`&(xCI{NGSaafV~T`Cb(8`!iC%23mSK87AhzqyAuz28T}x}9l=up- zzvmJlg1Q0tVVOW-gfOk61`2~lS)sSci;qOK`2x`p=cc(fgR`o>FEj)2Ifp<^o z7?2=&t&{Hv{D^92ls43vb$7xX{p2b(+UIAKz!D}Gs=$*CpWD+Z;b+(oxpoXZs-0U@ zPQQ~8u&+Zvl59t|L_Ru2OV^a}CA1U-Tdh%1d{AYBFBzY+B5gg$aAP=DpOFgv^w@lz zB~5pph&*52y6#224cvU|Dr`glg_kp}0O_7-LHN+|F4ij$hMiQ8aI7f$2m>*c(bHLz zF+_&Ie4#KDJkeQtXr^N=YB7e(Oi?|O?^bmD=li!Y34X(TgCo-ZD|0zwIXG$ajZ7;@ zu^N&pNkzjpsF+`z1c*y=GqZWonb_*5y=)DHIQvN^u6#J?{KfhR6i;KyHVSn9Nc?b0 zR@?W^jqCjyT`XYC8}^3njY=CwnUE@o37x_G6Un8|lTppjgTfj;+7!@X3V^deA zQ-CqD{b!pOCz2{7;p>5UQI93sgpK;7FNmjGpF~=80=37JMev;*_PwZ3?_#ZHZd>~T zjc%gXS{@8fx-V4qbINIBTKu|bxf&vuYl62pITyG^I!5%(V_eMfAWhffIg>PHS+D7e zP9QNZw>+!OYDUf^A=@NVEO%?~`xjC%s60A+DGp6VRufd`loFs%E;JJ>EYlDMiAw+Y z(eC`!Xxg;9GhdzE2~jR{{y&czciya$qr;r%MICV1U%@(J>2xQjZTgk57gj!~ZC4cZ$07VQW{XeMMursEY< zm`(+yg`h5>FrNBmG1$eg384izjBjuE{m(bTryp(ncw}!xUWoe=H#ue_n1O~5XkZCR zef%EGGyXu{1V}^0kYvxGK65-YUM3(zG@E>!MWL<$Q3tx4n{{#b3qs8J%R6Abx2~}q zaw|N!yWV%dAX<#;$pm$xF)&oK88Hqo&3QWerc0C{g-4J`5QpF%0dKSAJ0?Ueb^yh{U-B-XDL25lMr!T| zJM~Ik7|xOMGE(Tm#lH+y^2ud>&Sr}76P?gZMB=MN!3Men7N)T8mCF?AGXfl|q{1pt z1Udv(0jyXR1eA$|`5V^(cs?Bgs%ueP;Z|KOulchs`z=MV>;fHVrly=t=X`FFq)?EZ zm)CeJJR={%8|I%LcTphGnq1dp-KM)V^!)*!(7xhC>UjWs&JLsf=e{k_N(Bl03}J#+ zmeNX?@}Q-f`E*pDWJU66z&|!Sl@yc25mP2;qv&KUviPt}w zB>y=T14t+v{vvMG9yvaY5VSahQ=gBpy+B&jbpE@7%M!Xft>A7y08jo`QfDG zIHjqgLBjZ(W~k4(T&Gj;oishiS@qAyDJNsSCm+&J9E=Gt)r>SW3+n1hNpxq;Z_}<3 z*p>seWXX1!LIIHBf?D&hrQ_h;vVi31z0*w1KjCBdL&Pj?*4I-XC zFpdy~T0JI)kR$2sSkuqW$DM6hf*K+q$M;5jnUjKxsq?iIfE(F0)O z3oI}^x!fq&gk?mFQD>-4^v~I17JuN0+i{5=<-2X9OW6ZVjGIDv@Ezg(r1YzXflX3KdZyj z3K~S9O=y&eS%DN7Oz|NkFcb<0$(u*XTBbV%onveeL~ejV-(0lb@dG(0=f{_8$!!Dy zM{8-0ZrSGmgPEA&GAjE>4HMEkhZGmLK^n_D5^y?}&x|ohMBxp1S*FdC^w%ztl0bzp z{jNSeBUJpe${)DS!-TiUx+AHA^g?UrZResGxPt4>xzW8_yd}OnwL@BpB8Q-0Q*h+- z)!Ur?X=Db`?a~^GbcQ!R#o0m5~OwB3sOYB;#%EfnU{6@ri5k459tP3eBoL{G^1 z-qeSw^2c*?PGs5#l|2T(wzF~8>FFOl-|6{_ulzy+5%yg{oE?cLl$cLrh(p{8GTgYY zzRj5gAI-6>hklI6Fcnkk$J_Vzry_l!wdiZ2KxBM+TH)X7?{MK$lei%a-=y}!=O9T= zb(L){m0q+$a#%}q*=t(#zkEUT>MV%d;k{J?b2aku5t)(QG&AALZ5(C6 zwNJdi=HihWLg#d&`1&rM=|$CwVNyi!sunpY>Es1vnUc|IKqyIauHLPL?kh%s9@B=8jAa%RDO7ueWgCPEB zzwxubkG-_HW<}k0dCO?I$g2IM29bU${|jE{A*b^QwbnrxO;(EgE(9t12sJ$tG!B;FF%s=i^eaTI zLH1S16q(6$M%hGGMagU1_uW5c$(ly~u3KXf>ANnx;FOIMLYPdbOh9vdp-Ju7ywenp zK&@r?$OJfqsFkTCsFB!Wwtg{Z?ZlD<&{PeiqrZfJ zB_w-?!HeRH60@k)XoH<%w|+N=-IQHuON>sYq#^NM@=2VhJ@NgoW~&Hti1A4_Ugn0P zOpG#-chC>h*?#0hR*M!nf*?;eImv+(d@FSjI=*ucLKhz~B-&65>_WNgerj9PVbW*B zg-|>&g>dzQSg2rQ)3gImi6>nIaF{@A6)mk8*m? zp1g=q1(y#^yb&sM7W(ya28-TFZH3sfGMwb}t%Qk^@Pv+mdgtwvPLZrCcJQTut}W!w zfQoIR%O!WCRFQxEy`(vxryl%$c zzxj8f*l7eW-ZLvy47@7jz(=~K?M%8g<(-+@jlI-r200Z+3xy?)EH|KW19#~*Zh?d` zk^9D=&vGYOdV;7fMZs3i;1=Yty5n z1%COHA9mqvFh1#YeDXy;hByFF>ms61d>kL_iYd`$Te5&%u>!Cw^8Qb|;zKOWFm2r~ z1;Z-dWAVymFkcKs2Q4|2E{5{m%YdGcw^%NiAzhv)%V42On)eJwl&c{ZviiNq<*|4% zn+NG@0U}27vnYJ&V!llaXdZz0mEx(H5<{PMjfLRBBQ+Uu(>$toau1<3F_hVq$Fh`0 zaMx|Iw_RHo4l$z4w(02hb+r;P>9i)^S&PwgW89iypb5!p;kf|b{>PC<&Ae(JE zT7nC9d0d&NxUNER)^OgFY9(A^5Hs4a^2gFuGxKdA=DqiKo!^R{nE61*I@+zm-Ad)R zz-sDOgdJS`WmU%RVI{`2H>1KY8 z0Y?vWUQM2Yx3rvkL+T^x(H&*f-7p)}MX*5ze9b~x;HX*^KU zy>#S_rVX)mjjEp*(#MN$Jijc1M8)VRk6gdq=arWm=#FUKXbBirl&Ngix{3N^NIZ&Y zuhYLBX;U1LXhwG-B>19su{(}AP630n!9QHeNoL++-&07IYsmzkohdGy+d3pxfD5i@ zdfquh2f7|fV|U(zDecESBX%&!6%8Xa*f@ zs7fFiA3|oTbe<;~#w!m4s^C}t$><-LdO2xWb-SBZC+F%04S)(DcsKFoN#WZXJ`KF5 zJYks*BN<^dI$4&vwP)!gp?^g~{K8t4l3A+xxd3^P*_d5c8~rnk7O{vm$CgMnArJVp z;pLxmD!Vs_fo~_jXO|CACc|IZc$ zThQncDfB4%D2B)$X&NetJk`L8g@n<7QTT{Pc1dQFMiLf?sZjoj1CIOqnLZG@`Il36 zco%>m?((v@SI~DJDP!z(DIh^*B!sd-4h<-EIL`z+hDNd)jFFx}Or9WpoTf*Y2<5oy z8@q0DsrllSu$s)pTl=G7gBgj+h?d_UwHziEOI-zKvvU;`2%)^fxWIh&7>04sow>q~ z(HE}lDdBxW&=C8fiYqY0K%48N$kM^XMt|Zd|676Xw)A9rs0fXugtUszMFigbz_^0vz(x38YxV7KSnwh;H_;E~+M zy^r|pHZ8+H$@DyC7+u)s>C|RXbg60At4{@zTdzNI%t|r$j*8vl=+-K{k#c#Ip8rG$ zMdfvYXeg~iL%)}zD7E980w6E}k9SPwpWEU;A1;-iSc^}Ga|R?wS2@n8r{*_kte2rc zmaIau;SU;HDv>wuWLGO_FFyP(UY*oh;JDAe(|G41kEBTPI*bK|Ga(w2$w!7kT&j+y z8VzB?;JW)UQi23lk7$ZgG@)MOAIXIeykm#(+emP5PI0~Ay%p%xDLEI#g?J(%ZNGd4QcI=R zLs~-p(c6?=&=*xZMYb4xF%rz6Et6Xfl9gY#^V)C{7l^Z0fzTLRRRjp5t{gYm09o~L zwc{@Pn-uzzhTY|B_Hm8CE(SxYTq|zY>V+ammX&IOpMXcvD;F$S{)_jlMz-F%%`OD< zEaC)qyu74sf)^S1g2aYIH_``SV?7`X@TAFJD0=^w&S|XBz-Xz#S@X&QuY{1&f_1S1 z!Zj>1!-&t(p+x^Q*tV?wq=ev;PAs0BxMcn`myZ$F!c!kDD0qA8dEKw>e2q4-${OD1 zni)o#QM^l>rm z%3vp__IO0|?z{ossAm@z^_hsZH#HI32kB0FvKuA#|d7ajAGOzWW^(9(ZiAn(4x z83fGDC1(F%)64Dz-X6k59f;HdhHnM8jFY_jw}lJZfk>LoG@Nj5<9WUPWNa5Zwb4 zag9-<67PQZRF~nZ??#!rtH;|CJ~{ zVW!AQu3|00bK^AP?v?_B71MakVh$Z$kwXFr-YcTzJlxQmLd_Loc(1c85PK(jxhm$F zu|+L6_2kUky)P2g8F2utHmXX^;6&h>@9{4Er(62;7XfueHWJ}4YA@s! zFY5{A6Yb=`vV<^0QXe zHJo|;HiM6Z&ODJt!0x?73Mlww)QJGhp0KKV&x~NKmfcV`7d&MD8McAGqF(nQuRr7m zJ(IBn*EXl7$lE&17_&)=CG$lu0uRQY@~5K3PWb*RMOwH$u|#xEPuZX5wO5FDUN0(_ zaffJ3P39*J5Z$8&5HA%-D0jUx5lDEY_KL!JedvorD-IhxUrFqowar`&rpukn$Mz^x z;PJe_;k$P!UE(6JXUX$^rGSOR4DRks|uQAzyz&CC*^&l9$6XBe5pxh2+D6uY_VOH%;G|KHJ)@@-l8P(x~Au zXc&IVX#)?^w(vg3LBtQW#%v@@JtxvtkDLunkT1nq85e4O+p6T}!rE+8(WSzAW4rxj zpr+x?&oL8o&Wy@xtdPRh?|zVNw76%-dYBFbgbSL5CX_3EUwXA{OJND<8n5(zMO97+ z4NhvoC&NN?f0;9IP*GPeRf*Y_CfDM%94qR!X7g#Qd`hX3d~5!h?Yr!~xvlG4=OHI; zGlqd7H3|$AaYB@zG4C$g=$=M7oBRO^=jgvZ>;1cjc}f6fW`gH-EA@@Z)o!ik%IeP; z)vrt4@wC1Tl7J~%k_&J{6$8bX<Oec4#lvudgStjlrTyh~xpS}=U|UQVImPy8cHF#^+q-U3dDCbV`>E~)0(mskGJI%J%|6w5qQwC!CnMBL?8Xtf&7#IYVi-X_tin0p`-sEmp4~L zCx6oFsa{gIi5S<368Y8vtG}rvCAq8O3MeT!(O|eB>ihI`%t(+aRyXJJ-1UiHYn1cs zA_h6$(-!~g;9QJfqliYO3n|L=ovJ?!(q@WspPp^DNx9``gT*f()Y4vIeQ8fN125lH zymdS%DeUQq>6x)$n?4Y_S)Y3a%5vrlGmTL^`Sa}k9v`=NzvN`rww_K!cj{-s+)Vo> z90x2~Ebpv647a(b_A!>vHX^+RcfKKuzV8eoHRKx4$>Lhf%zC|b7}=QpoA{Sjq|f~5 zj{_9=M&)6BWRLHUU>_M>s`6!3^?WKf(w<+Q;s?n0thMIHPV47UvcMP&hhKbbi>CH9 z+tJ^1-Jr*CpZ^p}wcWpc?CZ31Yt+4a$lvR(l^B~OIB<37nS;l*SA%fBOsjLJ4uo7; z&{DYl7yY??^b*9#u|gmzie1W@eUanbT|o{N6WKCga+qoB*sk*8pCDum-CzuR7mp4b zX`2jjcQ}W&zSTh3Hr-0##tD~lJgNvGA-tZc7xfW0U$@Mi^zxF~c&>-*Cr+8-~Z9>{oyuJ6;v;OY@$W_OJ5Gimzmz zsBLJmYKsFd6H9*&m#=>^HHS)Q+@0~iJ^;@rIs=eYzYuJEZc>%>xlX*}%}(RR_P4)^eHuvRC2SZiaG*zM0)G>KQ2+-7|+Iha(356$fn5t)r%x`vde*7Wgn@ z8sqUUx1HC5Uj)v{;gER@W(H&f_HL_Ey1iW9KZb(#wa_~PvK6DjjO5fO+ktH?ZR^QZ z7gX05>sqv6(v4^ zZ!~kRZv==set1FhEph4Yn#y;fC9{dg@~B7-Z;5tYB^mpw1Mfx>kIegJSCr|exA!G_ zKO?II{}79=VThW&HlH-dEh?ZS|9nS@okR;BI$WZlym89t&x#n{yxJK_G0Ye8 z)8BfA+SGPAJ(6R%vParR`-AHoNAy5yX#MF-n)X5P9WeYYaw*{d#Slm#=pm9-I*CTa z>l)VmX7(<1ukF9;mb2FbjgA(3jT|OqBs8Sth?!$d^dZ=Zn`yb3Qv^tMW9Z`uEv0sF z$Aw6^~!t0K3N?=&kO2h*K8snDFW1}%=}@}0z1i&@-iBqUAuWLF18Jz-K| zWfjHtC?M zi~@J+QVwfiA!}DqM2>~!U@E1c&p2RTFPRRaB4FyalOW?oJmsjZ+n$__lm0>%mpfL1 zD{r^=-6jZj*cStr`-a@5YanFSe70A=miSb+%_M)oP`NB3cT4Jayg1AEdT@rF%TaY9 z(Aw6)uJXKfT^|n91}WExPguKM*(LGv@M@dJYuEXp7a;=*ks+n&OXu}cFe)QwiLADg zuC8tZtJ-o0>1KwQpbeM3?}%c$K#pJVXaCsWuHCzCV_)4Sdhdz|yzeg8?KVgGbesJ` z^*7XCWITGOTak28Vju;-`y(sta**A6a@5zW(KM`K=$^r0FmCkYxshdeHl$p=cb2s! z#pYBv_x6w|@Hv83*khwmeUgVQ-n#Yl9PgJ>E7V{{wnjTuY@JZ`y^q(#mtGZb?vRgS z^vbffI7bEP?4`}}+;ME=)+5tUUKaAr+!NB=qmClNTr+SETCiJ6VmyBBtvVe#R|>^AxI@43FyF0)Qhl) zqd&v`vilJ!?{%{g-#;d&VMxaS?TKNFzJ%D;R85Pq^VD~VMvyu0ch=$@{Uyc zN_wQ}tV)aMdX%V`$q*tt-Z3zGW0Bfx+H!f?_v^elMRVJ^l;H+_u+P?QqljPu-cHUB zDX;c4nJEOfVpo4qKlTT{+2!E#KEV%Hl8R1ql-^q`^X`-PKN&CRoJFj`#YnBnp?b3dLrG)*AHPB;O716QO-(N)Z;@J%a+T4eWH>KqB~)I_CzHwSJP#1 zzJ3Qkcj00>o0P4@GP0|z^y~T{;+^@ONNJhw+p)AseardG#& z25NhrZ`s;um}XohTMpE)*+b5_Lb7Ln11~OpeZFC?H|1S5E%rGax@xxFN@uft=1)Yu zZfYroT_-Jg$7h1YFZ?DZ(k{|^_lm^4R=}2;NBM>`;O*^g>5uv>g!X0XVf|r)Ia2F8 z2Y-IB$`lnBkFK#HwyMp`QeVgFN2k}edb=UoZm*@EP*%IodDs7T>yBg%+zusbJ!|c5 zv!oQ&pZxkZuTP__7X7G9#_gO+&~ixR{7ouzNNwl${c_>`%FFQQynDv6E}#2yq?WD- z9rG^Yt3Nb5jg`SY%Dc*}MO;3NW_n!-ZnwP5ent?I5_Zg5HY)R$#EG;2^2z5;!PYG~ z^W?EvK$wr#RkNpMicV*3+-iNwx~I$)oApeVOqLmpQJN3`IlIn}*yS&UcPeQ6C<=m9 z%C2Q^acKUapO#KJ-Hf=!LW+-BfDPk-o?hY!S?BVW0COfs2uz$iVFVZx4-M>#&t+(u zQ@%wnB=0Xv z;+K0mt(XK&+Lap}jI;iAGEmI?sOMT{!SFd<205Hgl&8;WmXo$PXZa_WU*R>Ly9140 zRHRw(uhILSR(+vi47{P1!BB_!K}6K%Ca0gIRp3St6{Awaa(Y{<|Dg50nNYn#nus>= zR4P%D@3P?Uu)Lm;+*@9Ic5PS7H6pb_7t2V-#l4fgeLKqhp_@LkX1M+us=&3usQ)dA zD!1hO>9qG@)paJ{c(d;cvDxC1{YctgwCUo9!QZ%iR)M1M7SR<&AJAYUqM&t%mixVA z5Layu*DO@sZ~jP3dHpt5%DetEj@kTE!OvnZd&0YfsyX z0Iui5OYe%lWoh!Q%5P$ZbLI8UX&VvIflhFZ%5E7a$}{5n-Q{1~D(j}J)2~atgtt1P z;PX+UO*@oB<0EMolKv6QAuva}9%G^Zyv+Ka-)wk-0(y(!Xttf)ZU9?9e;h!+Hm2f~Z zZ{M)Nz&BF4N7i6F&>t-@@!)VOz9*iFQ6mJ#*lCmhwop{`H{9%-U9-~);<(zSMzlG4CSFO@eqFfP{znt9TQ_C>OuDug zZIj*kDIQ|p7h|Vt-JqHPr_OcWPFKV~u}r6`|LF@G_$!=!y`-xd|9)Hw5i?3kN{xKt z!Zb$%NB#=OI?0gIV8!Y1ik;eBZ`_&ECb{dzEU$_(EpCJi@s)F%^LSMHR;6me5F*yJ zTQz9>Gu`+3$~!On<5Hco=AW~3x3jN+L7=|9xApe84(1wb-{xI2kfxiHlrQzwcLJzu zbRySi=@Z^-)-|0rQ|}G&y4uP1UDjQw<@oNHxijDBSyMJVO_(7ULk zt!+Ng8+Jt`erRB;4j&xzJ!$OATsZoOS^e8u(e}%{>sXfp++#+LoYd*$WJVFu=-qyb ziwP==1<_3SnZ&ssSrE!<8_zVUg16F0Tw@`rW^t8b;n<+j&_80f_T_Mr@b%fqlEmrU zN1aBpReEkKRXx?8BVdfBuALVLIR?bP^V-AhGH8M48VyDK`2!{qLQh{F>1^@{*iG~P zJe&Ooli&j|i3CGsQu(J&eus0>M;}anvHpxMh?_HKRmUi-q{ z{ROz}!>W$=Li;sk^J<%SX<^%7Y13?&d~ZJ2Aj&Q{f5?CWo1LItqJ6!33cJxs-APSU)~c-OEOH9I<=-4G#Kjl_xSVKN%tDMuU(D1?s(2?{Wbe(B{tQSPgFdrEw?9p=~7RB;)+$}rxDNVXl^(* zaqZE&jT|~PXZB4SmS=BYog`_x8Wz;Mru!<1{xqr%Fev9b|03!(bHq49sCeVv=r?jM zczSjb72&)#jo@y->t5%cUGEN0k6gMFw2;+`x%N7&`-po*?3kr^65Ev{H2eNZ72y(B zCveVCdj03id92s@W6$TB<*o7gRViG1SqS$u&hsj7(GM;Z@{p<`tK`z(KEjU6x1PTf z^z4(tT&f>PThP6IentZa3-m>B(%;|Qe}0(~K>-m6#GdRdHc$$9&bv{Fm{(BlR{zPB zOJgaiUkcM9Sd$}eN1`RBqfB9*Pyqr^V-q}ZMp&7NVtM+m3NfE(YrKV;kRO3mOxiJ@ zd^Jmf)DTJMO9bJKv$?|rGFCj1-x4n-uw%3Cp?;9r+GX)*hSAWuw zAe#9dD+lT;;5s<>>5!CYvCEI56{VFmw(L8B`;9}1T$ve#G0kV0@NUCt>pZMxGK%N$ z*qm=5H~pfB;_b;nC6PIzZVbCD?kFl1H)RW0d;5X~KkqbRfm2vs8fD@c+)mi!9LVY^ z+V|dT8gpnpm9fPKzKhSY*R!|xR)}-z7~n}AXmW+Stg^*g^?llwyxy8>&)@m#Y#))7 z$9}dJD1M3@%Tc1*H4=E;yaPmY5U0Qm8(2BP$C!s&6+xPF4I-=@^`l2N?5q`P@KHH- zV4xGG&GuBfJSM+y^W=Jg^mP4+{8E@%G7S@>5`(&7d{|y8osenf1y@-`oUAzmC3SUG zj)AUN`?tv#M33axW?F+KUEyCiTY4QSPE=9#>=S9F3U@m+0{u zZ15MwghF7N11>GEz#k!OH%FSx!SUfEZ$JF>%lYv8yI4i0rsUpQ!-gQijt*no6;21^ zfuKaxYHhIFCG~#cg`oFsR_5+e_7J}d#d<`8Tu`@32}?zC@5*CiqVE*;H2n&(YgT$J z)9c0o*XhgzO}O4C!%ilPE(j5;_rfVdDGM>2885>q{H?+%hwNmVjYUPu3x{>lvE7dF zURwE&FuA?1o*TzWyh*#mA3r_x^`hj)T0V5j3v6u}c*{=SjL4hcz4RE7ipnCM8i@Xe zcpY zS?`?8cA!goPi)QJyM3pX!&|(|aYtFn+ec~l^D-VitclvOYyK98ZZj>wVfx9#(eLjQ z;D31Wdx-)v7Kp7iwVI1^KM8#coHgdWM`glo6T+$t$U!QdK_M=hDzItvItZDJ^j5ms zi@=XW#Ch**hycTdCsXVj+Mq2fp;(?+h$;llUQNXZt(%JZkGD;%McSJP(0n||S1|%t z+uc3MUaO{mug$%YJAy5(xH@*vW0g_Zd99Y0pAP|5@xgr(xhcK8${NT78jXrNo}8Fr zZ6EQQ5o6Sxc9y~KFFeyq?cy9oHF&sbxUGQI#Q{DcpK5;{YwWF< zB07}5F9%ZY;^vvQtgo=I(RFMZv=}I^&761gJ`h$y)HLJHE+sy?PB{nqAfFBp=2~#= zi`yG|9$2$;lGth##^l$vipihGyLtf+d+q)u>d%F*K|+Z4 z%U-tnJW5WA7P?v9oo#mmjylfH@xSXYIS~!kt-K+|UTv0d(8e(ArvBss7QfkE-l>^U z685tEnVm11QHUuj4}b{KvNAP+o}Hi0G%uVg>Q)thW*rqsz^SWQz@-o{!ib_GqSZV! zd~0YeO&9evT!QUs5l*y%)z}t|RBT8xik=*biOrsCGS~FM>f#ammz;`cWNWFV4ca3% zDp@l+KPs1O2xHX}rryYmjsOHDf)6oS;ZT2eslcb}kCH!HG~UEqG1@Rm9T)_`!qI5a zj!h4Qr2Zk#3h3AdL!WVDRXI>C%lPP;G5Fpl%k=$yAKKzQV3Q6b1&_pU-DcU3J}ix~ zsyc1{ig^Gg1|EP3&cA_)k^c;spb?j-P^Yt|;;S_3yBEO71Id}9oQS(FO8>#|ZlgID znmw$1k#!l{bb}L2bXfUVJIZU;IBCE)$A9Q3d1lyD^fHe5cjM3=o_&=x+4JYAy)S@s zn>GGp+9^-+sFChWA_~C*uC1dL;X&HC+~DX9GcofOh}lKByFrED_TUk0!FdXaaN3tow7zK$dy>+DXb z?|ucJ)>3P!BTTys4%MH1SNTJbe0RFAZ=0d>JI0l@n6!?0Ytv8-;61d z{)*UMOaJY9P6OiLRDNn)DuHqxCmsF1a`m$pmaD-DMCeuu`}VclokpQM<*Y~h9#Px% znw!c(b?gpgW7;TK=pb9PJ7VPa?2x_y$F0?|{?=k|GwJ^qP)QRPfJwu6Qo9%XSa?d@ z1aU@D*IiGk!Z)gu_QFwF=9dk58clp2rVG|F6e3h)2QztHOj1QVEXt+Cz>!LPsMebO zg^n4^i74!uvTkZk!P#gW1Kr`5FxMhXJVpshjdm}x7H-Jd+4=0iw#H2BIj6==*vy@% zKHM1rM83u?=T3G`^1n2p{O!xf!_9_bo-hL zyWJhX+|jO4p#WQggENHP2OSy?AL)AEdg-<_^eSdPt18Iy)Bp_==(bn|lo_61BR#Tk2fv7^Ted(=Fl-nVj-TAjL~ zZ`t_l=;E2)SR3zgWn6wI!(K88QDACOA)5`8HTDI@eObMH2#lMHBD_wFDAvViIOq}Q z^Z+~QY}aXty`QRQ@1zbV1$)?Qy3OQC>hMP&kCJzy*{)w4>RPKRjr|@-j~W8T!-es` z;LLv0xe!wT&BT-9-1;|i9*$|IIp)$V#Mm--Yi*DjEvkg`K$?DY8KMG>vMMjr;5UT* zeWDoo)Iy*MoG4C!69vZqJWA}XfqAw5U!=WdRGbT!E*Qbx3Be0@OK=J9?rud0QV<}xCAhnL z(BM$GCj{33!GpWI7II(CcTUfA&-C>D?ySXH^@|@+Rr}rhQQGJR=~c^4zDa|wXY)o? zKd-%wcng1V+fQ7?XQypp3o+B;vUtpVzq-@;Pi*y-yrk9 z@nS&s97GY4g)KDVAsMzumQ}0mLS7%-u#X+90XUhcN!coJtfCqbx&bF8fmm0|N%abI zx;e_6njt8TkriPs&xpVB8}bWU&P*``^;)$qcn%!0oY*BMG{0Ns*J9G2=#jyaxBCaX zSgy`pjLyQmf?!uj>*AtM@7+2qYoV?F;>L3S*H|8Ri$#=Tg2v1?xHvMTQKv#9V{%e6 zEL_xO2Irc#cWt&BWjG3{+BWMg--{-aN9 zCNH07wXJAcYzted8eHVeJD3K}QXhqFc2PCg< z)JEy7#(NqY)`MHAXVr9z8;kd1{kShAB){Bcw2cW5W?F9!lNE5-4?!w1)Y8HhW87Z%$LDw(Z z7P|v<0KOT1O+5J?rVBeXSDr1Sy~&-)eONTIu!B?syoy|d(yX2(Q=WCGW@wCFE<5K` zJWl1@3huqj@wS72OQEBN^F_hJ7`HZxI3psTulWCbC_g`Q zZNpn~^0Lb3iz{2-m{?ondI?<(8o&3zk|k}KL42W&`{Iu@V(htfS}f19JeDlH(ZlY# zjw45!Y}5>!Muq;&*5nyu-vUWKGwbKOXKhKL`Cg$_e4*%Osg}5zpe)5oLKmfwGnZ$3 zL^4*r2=#(8a7%*EM_}hxKM8JGM~^HRhD9zaq+5_>zVV3_PLC0s(%b}`>6@GuH)u; zG!5%9PTqhy5P7agJl7BGJ@4nS1r_B;_s`3`@NQ(8hDQWv(6vCLI}+~rQXCF-RF2v| zDx6$&CU6n-E>-7~&$TSgnY~ysds(&)J`Tw&MdA zdp`VwrwrlWzBgWoAUzku4LMX%Q^YMAzwLVAwNpoRIc(`N=cb#f7^c9F5c>&~x0aZE z_QI{L)&op$F{#n#hvE#T#*ft?BFA@*fpooz!B)GK1g#Z+<;GuSK|+z$k24Tdy39}3 zsJScviHlJj?CjR=hN;=uegiIOVf_y1!eO(`*HzacjDw@<1%dk66I{Bo+~%Ghc_y4x zjbb)Qo%O)=JS{1-FoU)0tYO!gu*A16ml;UWh*2{u{)iH-`xD^<;pI@MTs4z91FQKC z)S}+28wEHqW|XqudT!2c?a!RxPStI!_MW6 za_NKGo~7xDa^^A%P|u}aqD%vi{oJ=|)~Z63Sh1@Ns5H6vo5+LubbBZ|@pL#I!|K+J zkEfFPyzBC}$^J*hbh{cFdBPOlx_X;lqDTPN;VU1DU?4Atwnm|z?}joZQaW^AGskW-iHvD{km(paW^OQayE96!C?1aV#JuR+h3a zwPcQ~Oo?L>d(o4b2V73S`Q#P4$1b)Ap_3k!TLxj#|s6AOw1C)iJjC*EKBh$`&qUcQqrqSW_a ze+7#Da|E*ozH@oYa+km;!{+Lnmh2e;)A(B>ahO-*c4lU`>Ipljh8;D)L>^R24VtDF zua10r?V66rm`WjTtnr_zT&13%5(NM3&sCwIFSyD*byL12Fx?g$jL^sdKVZZaTr=5*kAz2b3 z-YA?Mx(>buN~9i(bkwSxF^*BJfljw1uU^T(tQTt6QNhvx2vPOLxb}(z^pkeW4%2&N zmPDYp7qZd2#V<_oNhf9J@*6u{2nqR|qgQDAZqe;;@+ixNeA4du#z+N^llc1Wbs&5! zId2DIh(Oya%XW`$m1elKHMte+bVUf;{sP=I%U}!eZ_iDo5v#!v=6IXO8chzp6I41vG@!rXmOZBRZhQo^FY(VXYW`iIdejF;t%y@J3IkKmA1Pch@?xrd zKR51a8U38 zC_tr+#=36GJdmQ3=$QW@h=j;x=NAj7}S}2#tT4xtj6zAHxuS|oNzDyoQ=+k zVpAov8i5;@+*^iI4QU-$z6m{C<6eewrcd!S6hHD~W8x1wt~4%q+*|8czfa9P#HKtm zsf74i6rrQ;-!?P0d|YW=s4nTYYqKgCwyvnn`r_buo~oS~d!EAbjjaJQL}pIdQfr{G z8L}npxqOld>IYKJ{Z-w>C6Lflr1Mp+8@2l4lk03FKg7;jgJhubmb`v$?scg)%EW7I`RS$FMS>x% zLUqNhtoxsrLuYJyOCe@w5`KXa{KZD$CK(SDw>0vU9dACB1ZmUCH`CWdLESQI57p}b z_^F!N;lzIWEk`F+i>_C>xh~XDUgK$JY*lBi*rm3!{w*0>tZk{>2n30AKY1h}WO}|Cx9NC)W&- zNHDV60?UY2X#V#Nk)AWG)1O`*vL1m=#~${BWT}H~ET^B&R45{w+o!iKEK9_>c~jcP zA`#(Y;M>q$im!b5f@;G^{OHaE$`HQ?W0EUz>*?v8bGH(-2~~|ZH#g&$Rv2NjFJQnm zBe$`bgEcUbP}c?T0>FK*f6zA1bYXI@pDP>hj|Jw-k=irBNr7W1V#g2)ysHZ zukt*=(!k2TwP)>PMWpSj%0%Pha>vEx<%*8`D#1}}0b~axgd+^K1$23EY5q=ty|T1aK4qi&yh)VMxatcUaRE(dNJEB!=vS8R`)=}mUOSN?iR?v#P~(e> zW!G4e@Jz4R?m?gFCNhZEAZ)pP9nu_8@6NY%)9iKsiO<IeBP%KtCml(~vQOgx}F zS3>U(bnlz@PArSo82e~ht`Xcj)srxM|GZb>I2JLf87gRzA(^2#X=1Dz+0a-YkywoZ zhPAwJqHru&-*U1(tXIEocNGx|dchKfKT+_C49QnB5wy>s@!rv^ODS8}Vwwd~*K*V{ zmPVYYSU0*~EuElx_Dhs1d^^TSZjp!CrC`;8fHlP)b#qvegTZpr?(yN?W$nTSav!u; zCMoMQl0jZm>3v}n7D-e?+udc*_^bRnO0_%Z_go~;9}3Wpqs77-3xR_=%WTgPr7Zq( zg&b5{e@+ipy%}oeo_!$H26`afTvlH^*(2G^LP`vUuAI3{_Ym7|q;=OHT{lAJU3*3{ z4m5%^#^~|6$7daSxLJ#}rN%9|?H8GeNyut~vlrj%V`kO5qvKyj>1)rb#q!BtER6^S z?-MH@*2Zy;5lhCv$3Kr1)n>B+e$P2p?qk)XaF`Ap5i zM#z+{qjneph8S=kz?qUX=o=dtO0#=3oq@+NA|0VVeDJO6m748Px$B}8({$*1X-qaQ zkh%Q(OutM!VE#llR>c!6-KM26WmB2l8gKXEmeYif{eEIYn^FECRQBt08!h6^0MZlj zt`c_p{CF1Cp0R;As@&5Uo?C^J^*2cyQhG0pL@WDP#*FBI(Id8pRTLJE$5to= zx0m}OG(je3=THuh1`q&LJbNB(CGVRam?CP1?l0p3za01^{rU^oS9$jtW*BzF*Zu^F zC>e-!o1gx5;(R(9l3gW`kQxur^n!b#jr#YQlN!mhEe)JGCcv5F_FvAN*$rl{Cz%&< zew|IK3_p5v>1Kkv!wYIB_|RxX1Y0~h8nIvJFMeRVYierZTu5L0$or2LUolWhwv;IoF?dk`Ib4Cpx!|!<$|H!g5fB%=EygRdU-Xwy{?-0c( zi5-!0W;*TZrp5?8uD@X1uh8|@=3(Ga+a$SQiBaY|Mv45cQROVVgBTLlXs9XcqtshH z$;ih?cs^xR=~WJ{tFx?jvI=O$17lLg@Lv9JD+j}m9YWWY?9 z8O^hKbYAfQz253xExjYB8$q(x>v~7qcJB)=cSCz8xBZ6({6PX;amn%nLAT%SmkSUr z13h#e?Gw7NNVTEvw8X&!h`oM+aKB9RD8|8(rFR>ltx( zxzFWj#wJ?iq|tD@$>gZ{%C6;XL?6fWwD!(p`Ag;eqIoamWR<2~Z_Uo|kDYU!MZNE+ zs^{&F<;38I4Pz;!!f3g}WU*C(LdbFZv!RNMTE^>%wC(Bedsln8d>-NW5uI{!M!S)P&@L-B~4h10GY^;VYYgLa(iq3hyb`Xx`*IC$! z@n;@ZNB|VLhc>tx!Wg`CW;4eHIshNuAZnCz4vSAx7ZSD&r<*mXx4w$fXcb>4L;>NJ{>0% zaY`?b8F^{Ksm@;BL^Z7rV!WW>BqMk?B#vP9+ur1x{DsGHZ`zlb>tx@XvC^K;lZgg8=Qd zKw*PW+$NYSBCBdE<3udcAd?glI-Wn zraJ$=|NYC$%iYq-IiS8m-FL6r^7+%`|4@^VT8@5q$4ScJ$w z8nA!f)cte$W&Rs2Hp^Zb?aHHL#un?`t8UmfN6#(y}j+Z5^Lj27$81fxHQd zD+-%C8JPz5|LnwT<=e(}IsC~*i#yv&ArjIcuJuOErAA?-^AvU4wO8l=11==O=Ek>EP6IL}ggN5d@XFoa%QU3MTMmst`tK`kg{-9|_xBI?v7XmT zb&dLzGO|_c+qccmCBG+w^J;Fj zo_pS{6seg>TPIH}+-Sjhi0pdPAHZtghi|e~(R6|fpzT^nzhA;Gsm%`iaeFtSjQ&(! zXMwt@7kmKOyX`P1u{!f@Y+mMNen`HMKb4l2YTk7#qo`4F3Pk}E%@$q6($3yz$rzSo zTfXZpKxhuL^)4*b6X^P;K+k1Wt@ERcR1wRwfVs9na!pH6_(L5iZlt8NN`I<;9-T>F z!nwP}q1u*pYhjUvP?c)HB~~yw$!C!u5>n9$?b&1$`y@ z=R*llGyB|gV<|h_>CLTw*5-t`MHZG%R}gN-ig3^UWOn;{gs~d=v6kEU0KrGEL8~bn zK+hnZY12t3{Aa;OKdWVG)47QZA-B(G0Qh_TS^EbA^*cMkj8DDQmg@n>y?1=3IASX+ zKZ6et+Bm8dG2gbmlUk^Uq>~DHyorTPRT!2wY_TX!dby8h1!LjaP7s2{cMI*J&e=0A zdilU|+%f^SwHqYkl#tou(lQO@uagLIAkMzX?Hp8Wd>Dzk+wl*#QwudrwqR-Ke#!X? zSZS(cscc1{8zzC-vTa73OD)lt$fRA!A>Ow^LQ0oxhMGQOrmVl4c^n2AX~PVO&)`Bp zIfzk>Mk8KcU)SExQT`!v>m-u-4VgQ}-COYbGbuO9!EE8CIQJhm+nlWjzNBq4wk7i3 zieCT1QSU>idSIQRP8afYISuE&UVB9*;$vVRY+y=$(^%q6d6`$X zo`yk|+Jzt{LmB=@oI<=E7gPGUsh`$*BBjWMwZIx}EAjS-gTg9V@m#jsOb(ZhKp|4l;DARHJ5}^B5~V)hQuwajjW!=w(#pA67DEhh2(C&lq)U4W|hWz8}prFV(6X<4w2KS=$lB412$I zF@A|F9X$gwZTPtI0$WS|En(i&tb-P{ahr^BJUi<<>(@4A3PA!MLl|Uyb^=E8Hupcn zRv5dOf``m!^`HeYDIaO(KipLSCK@2t=<$Ja5zz)k5=#?o8xYH<}+-bO9 zylg2QK4$>@inAZl@IPRPE?grU0EU>~=ciV$Z`{n>!C9BTf^R*>dF5)OTeO+;!|~sDC0@S&)0-bRBvqmh2#ooN|^e~ z`f3~UAJ*4YzMYrQblla}BcAc4y^FKQXcrT{H@pd(UmB)4jFkxTeM8(WM>47r$-RCF z1F6<`2~|7%HNFWL$EO8|9=!)P925*BSdcV8zFp`iEBfBlQ@Y$!-*m*F~yyw=oq z`=)Wm95c?$)wSXNg#5AkV5a(~@I|pQjo4ZSkT29%Hsg05LO%0@_Q9N-c)!{|!^u`X znho!^$o?qX16(WKGc!ApBuqkV?;l}am4`Xyp*1?MeR6ST0%rE7Gdj1GoayXu3p)QmPM5gqv< zN#L3qgU9-b@jq=d|6IENY(Z{=*eWtrkr5antVO(N7OjHiuDM72V>bHr2i2r>5{tGe zkUZQlO`I=kD;QQS2{Lj7YJh8&HI**T8Vnv`&Pv!2lTzFMTE#WtGuKyxlqD9R9i~W$ z%fP0tT{du?Vu&SPYk)R%dpk!>PONFrxBR(|C9QHlchI(fm9sQZVL)Ke0>QYnF7s&0 z&1kR6AMtX2mdg^qQk7D`0wk=(;8QfE#cV&VWxf%3)gg|Ax25Xv4y59OHb3jMg$J8} zY}G2W#S_Ll{kU_Vs&7=Bx9$F!BJ|kF8Y?uaD=V4DnZVdn1nzuYN_!9lNL_O4UkfmU z_6~n$hVksyKL?EH@y4%{%IzTang>pJ;kji+FW<8r@LMA)XV%Eo8Q0`@YcWIW+|T3^ z5-S0j_F;I=*N1`MT5QeJ+}gU@(`C9jGk7)TyB%w-Ui-VX4jl5~cq-F>W^$58*&1%n zh;d@immi#VEOxrK{s7PlWM+nyvw}grWR`1G*phA}yAFjz$rC@gMvl#JsmdyHxFlF5 zwL6wvWokN@%!Aj|^?q*B<$kWoiiDF+tvK{kF)umfWsI_dg+ajDVSUpxcRwH!+X+o*_-?uGn z+4?BPE_lNf>*bv0KsfAgrX3>-7522>SThfhlXO~k3(_!Xaq|4%W{+TQFA`2RA(5;x zUCtQuzdk<8X%e4dY5-o66^vguSy= z2{1ZDG$h2K3w)T_7BG%cJr4IpS=k3_h`w#O5c>= zq=U=bayCI}!hJkWbvT@>W5TvI_B?nCyI*?rh81VuGT2yI$vPpX;u%vGjQ1dy?t4e| zY1{%`n_~}azIV|K^GvUnfOecv6%>wBAevu}$h6~bgDw11d*8!$^h4hv(0K7%Wbc{& zw8x1vxx~1QH%-^|e`tRGmJI%nFN^$eoSy&hs@SK*eIg(@^P!KC#qgGS5W zHY-mK#GX5o3Tpe5#atAL?mYFzCTTKcOt!2)2e7V>PtRMv3`|~%W{3&^!_jmXXfaKJ z&DHausUu0lX7d2tnz>6-3*CL+ok&mn!R$9M)LumvfpnpZ?f zXlJ=ZD*M)3&AB_>w_(b~RV%R$0*=jtBhFXIV;q3geQvYiO-VMbfOGRi{gD7A4lM=t zl6u;z-R_38jlPXs!n4p%A9IxTeF0S#NWt2s1d;@;;6_Pj>>kVzaGHxE6?sn;_FV5z z^RJ}Z2D(Q!K*orONm^So@SdM`H9sX8l+9XIPa}_4O7*&6)sB&|RHE#l3brczB7C0w@qN+4nK{77z}5Jhk@?FC_dhZ+K({!+$N-A#H_s~l z)Hj0=BdmPR*?F+>-=+$tWCE$2#$K??!n9_9!Mg72 z>?Z_UT3Uj@VuiN0whCY|@DnqGNlu|DMjc?{zWclQH(BRbOEMZJnl42$MsfOrg`J6_ z_;Ov3lt1~14R7DR-H{4IjP~Nl+gn$-?c~Nx>(7xRy$3pW*e-s&B4RsmqwkdZ!p@h& zLl2-FxH(h z$tYwZiC-r5rkab@%m4EL$-Di)Zv$@MEjI=diyr_qW9KWA`FCNTw{N*;|G0a+{JI~t zJM3dQk|nz)T~tv&l6LWZE;Mmw(>|`=1XVP}>F#}*iR;7NO@KcPa|LgI)}M0z_i)+q zS@q@aicj%_!}ILz;E1msr%W9H>q!a~x%(+ni|Kp)lVSctrvbOugBO{X!ZJLAb2eGT z<4yKs6L149_^c56P+E8ywzxn#UBw>V9M5OQB(%JN$k+q6hgG(H%!g&n2=@;Vh$5WP z=A#~)2}=9_IldzLIfSuWF%muO-8XNm0(64J`Bdy0X|g4&CGU%rVLzD?g*fWCfH$&* z@*IRUZF=HYccK#Gxxn5blN%p~{n;%ow_dOcm9P+HiXN#3qIM!$yDGVFo<{|e#mJAy z-PkA?VAchD3lXX*{0cD>0@|lwTsBd6Wwk3`kp-NTX8ELh%PR`UclQ#UHQwOO0UTB!n+Z&rdWijphOv3EKC}Z`zyb_oaEg|Kr0RjER z>Xx=2TW1(;o+OzeC6ea%pl?$;hT`!Tn2LH!F-9hAI5c@?g4`VMCkt@3^mWUscM4A8 zC8xN)C6_RfG7{4n=e#M+Y#aE_2rb5y4Q=|YBG-zmgKmu$KeUqKrEQ=L zbcT}^=>&|Um?Fl0QaO?KZZ$9@l0V6;pCJNe6<6{QSDuFsGOF*Z6c~LM2Hi>Fw{#88 z(5+9K_*VAS>YkIbeXhhuuCH#VC00M}+80yKcD@W*FHJe;jFn-svEKNKRQ#HXTJw3T zV&yq1?#NgH&CA`3ew1>GI3U`I%UQxeqxx0}@XMOZ5-cj;9HK_ z%lhW;LGt3cG+?SVY8{sHX@X6(lK4EcV7wG28V@F3Uo?EWXWoe7lYjZH>Hja6y>;PQ zBp;ytSb1{UXZ*h-ter_AVW89#f;wa&9fiQ)(kDEq<=l1hZPnPgsH%;R8 zxz;wjQq}p;SHV8Xo)kVGApPI~sLzTc<#VLQMx*pRwLtokP?q0ulircaDdD#Plx`O% zIOB*dDe^2N1l3p!62Q)jL?Gas0GUSjvrP#{>hN_S11q^|sn#mK4Z!2&A#?Nd6CQkS zfYkhUJMXgNVfqmoh)Ou8{IITEXd4e?H!J2#MR;ziBSk44{sGV%?<3EpnxZTZMr@US zlbbb>hqZcu#CW4b)-3i3JXA(k@3b{C`xjse{*jN_gF%Z$&u0t;hc3eLiu9kLpRW4e zuszbmYUmPf$Ge}!XWxNe)2-zQ!3oRM%mljKuE#6Wo))gT?v*#t-fjQn3Rs<(t+7<+ z9$9)gSgObLT7DTyA9@F@E03m6vC*eQzJ1@_&xU#E3@FdXm%`cFKlom``dR|*csvJm zKC5)&K_X>NWGa@J_QOD%8QYAs@F_NI!}wuC;`&dOsW=GYbJem`*PGx?@PhTh(D(i# zGz0l7{@vY?KgU^vB7z$GtMQi)adFIhjO~YuZS%rF#TU`Kc1S)@Y=Wr%SO#yqf*7D{ zo0Dz#*#Z%UWsn-*aa-CUXM>KWRcQo?Nzl!1H==B7Kkh_juwhu=1bP|0>mAm5-e@6J zJgrfH9{T@qjd~3i@=a~|xT`8MY=)P)b6Z9?(pmOyJ05n>G9Rtu42h2n)8qM?!nn%X zhr|CoHo=7vOc_YctE!O{RTB|eEXQFOR+I)9ka;5p3A%?=I6HUqp_Uj7hdb=FcsxmYe@24LdmT-7a;t5oSNbc=-GYfuFLO$%%jr`4AiN-`c z2A%XDOh0!eu-V$RJ(M})1|B8i5`w$3Kcex~YCKR2;<;*-ToZ5x_>mWgbxr5fanhUj z_?nsbBy4_CfP&D&2#0YS-heeS$`+xc`8+LjiymZrJCi+x^C&@|ol6 z8iTrE0$7IJE{6OWzpTUgozBkxhw~S&uX4$JV|@Auac)nNzaK+{M6Ron0nox-kD_+4 zhhGTDCgSY4z5t|f3O+l$Pt^5L#9!kulPKNSahw8ZGk$;Dc~$xYjqA0A0Wos3W#-9b0^SxS9v5g2u%I8$zGW zEiPsuMa9TbhCihHp4p?Rf#5;AB9B{-f;)>Y^AL3j2|7v_SJ(M3_lWxy!>%-98-DPp zI6HXbG&~a5;!DGd!+@arYDQq`W<-KMAS5LFcl-?w4jowWG6MNUK3VzP4p-3x?=MSF zAOzozNvll8JLV!zxXT3O{8%ufe!M)TUDv+*oNzN)>GKv_kkT=ZGO;Y1PANkMPX7FO2MBdm4A3NdrT%IV zXh%) zh{x%R??Vo^lDUZ#obh zQr~JIEH6xzsOCWxn}=!lz>iwlUdTfEK+u{Bw*VotLgx7ongWUQ(@r1k*Z6a#zNe!h z`JwFeIC(NrMCi%_i9iqWE*0v-z$Z1x_{{_6IsN`*u&}%&m^urr!S;A`v?H4;OG%{_ zPJ!Ycm%_mLQEWA!inrJ+PO>{jI#E`mngotKnhA(Fl;~CMj*d~q<+Ms&jqX$6mnf8* zr8qPf18el9pjfGR2ELWAINn%SM6sU8p)ATxuZmf~u4BXg0)9CpKzyxDEyk)VM#&rJju)ZU_vXIOIJZ!pU`nD>)AQXFf|Y{;98(;10xGH*>#-1x zEdBluKhClgidFqzKY2c`liVZUe7}ChW=@RHN7zY|KZA^|Nq7F@!rB6hCH8?==bQaz zIxp?MhL(1rLya9p%|Br zh55MTkJr7!=I4!MImAx_m%n!@R#1$gVv~7?4y$Y3&|s5vp~8tu+;i{7ub+m2rAty{ zjUKDf<8On{s8=hcGQc2R0|p=I|EIyHaogefI^qXeFm-0ovc4~hY#dwTIlB%fBcJ7n zTVwxEKQbW_VYg$G0l%AR-}~vE=RbUJl^+>mg(>CY@Z;+N+S=EumXz@Rc0 z5r+VD0e#vrEC$4yttU$)K2o3U&DGgVyfj8ieCp7I94)pnynJtCW8*wx=!!i=ehtH+0> zso7bpry>emqC_58<`Hi;QYQHDZuId+WS%WF!0o8*infz_U8T=8M!`xvNFgL|+R)Xo zGsHF(jNrYIsI9iC&RJF8&@exc$OO4L-3Uzyw~re1Ts$L#rDorx{?3X>1CuN?*k=nJ ze}9QALe}+eGvHgl|3}X6ih9^D%Oeqq(~EYCw(n?0aAG!$;&4saU{(s!w$m|Nbj z@XY-6S0A_ns~4_Ij3q-EQOIbmX!ZrLmfq-JM%oLSJRWr1H@wjbsZu=`DswmW@soL7 zO8I|%qW)RZ|0iLv8xt0VU)U>DZ1F@&sH>Zp#5ls9>c`0u@t^h1N5}$>C4&e(@?~XW z`NL}1jFMsjUNV9XVg0{;1oSz_+vaXrd}?Oqw|Ng@aJHQY9~2y5nvdt>qB3H{Wekvw zeO)t@Ht>-FhmLw;U?2=nUra&9w*x6m^0cm1&l#VA744LsNMOTjycc7utB)N)rl7!L z14JTLmSEVO{7WETF(mtXFMr%DRwk5Gc9C(@R;}3_8rZ5(&9Zh)k3;Y9A;!s_$fJ1G zs7hK8>$|93cQP9CB)ED$&H^W)A1m!v#e{^&B-Gwqd7iVoRwdY0;enG3#ewnsr(0+w z17Q<>#49QXt?N#{$T9eN(;JDPag?1X`lJtFlfGU27IoEPg%T`TNsj`?J(dP3i+v|@8XHY5wtRcBr~Y2~_A}g5i!d!L zMyEdm*)(pbC`N|ToJ`P7CRL~-9w{;grJq}lv|TjmuC(Kp38wwHYdp(#*U3f=Vgk$C zs=6IJoNsf)sv0X02_NCBo*N!{B$w;9^*pH_zXp@ZNsKwPp&#dw!#;pK#B2k;$$Vj! z*V2^9i=m`+h(nJrOJQrj&K0c){DmZY4)k8h^u}E3oV|SMf4RZ-2mwLWl(j~mzP!PO zFJHc7;G(Mh1gGr{!Wee6%JKxFs>0k+It5_~~&)}SOX1&^7zosL$b59Ecq zE;+eEQCWvl2}k-1Q9=p)7#q2a`Z|p7RteGL*i!9wh~rqCqK<0K{UZimQ&BNE!CBp? zXWwdoEjyu>*1+13fZ|bB`F`p|7<^r( z9MOm?C*KUn=-ZBWh4;wRXa`EHV{s+X@T^YMK*eU2rxN1{i5g?NU2yqjX&}x*Vdw`I zP6I|AlORe*kV+=9G0XJ*~r8hVkd))eY-qVYqS78Vv-(<<4kvVBtgg%3Rz>GU*xIg;Jr zoFOlz%K|QbPHQT0f2|7P{&l_z9c-DTbKrDS$leI!_+r9e#$1xPo6Lb(jIJc6vLT4A z`9t1Ec|aQ)=!o|9Ew=U~TQ$C%eTfrN0aQ_-yZskoGZ-~cCw;#-6I70a(5O&`Har_I ziH}B^Rru<4WcsVut0ok2Nr_3ib$xjo1JwM5C+HaHMGEC=^*EfF14gpCp-9a%ySO-& zGS#O=I_;wDO0%Ych}Hb!pgasTG@CoUm)#qBJeq*Wk6|WxSy&tk zlfs$xxshY>;+((iF!|XI$aoNe80?1D!&>lQ0Jf7t^yOTrsDvVJBtlu{KXz0m(eL(& z-pc8N3+bC1T`lU@kuh?A1(?{CP*GVSD0v~g&?fwssCG9ke)>QW5Y-w2qFR~%BB}+v zg8(@E8S55A^#l&bskbjvY@OtM4sOTWL`}to^+nwf`koL@O;20;K5Y4Bahf;7z*$HKlOwJ@R6ockZ#XNQDbjq{-OFqBaFY794{3yY{ zJdfIVEV{eM`wC}#0pL@8N~JI3$gNjk|8}oZnMVVQx}Uq*^XgE7x}XAh$_xl23VvR! zb_%`+)-u_F&$8q|PdZH9lhY&a#&NpB@bW9BcVFL(tdufRxDkbhF$zoRJE1mJMwU@{P^aklMIIjbGa?%;{0iCiYM)>?|883 zu#=xl&JSKTemG4&*aH4Z@reH**79ICFE z>q-2d!x@B>m?W~<1C?d!n^O<%KCsTm8^1Q#!jTf3Cg(3;MWWkJJ$k$~ezXA*`5roD z%Tw!d7LOzD`5oc0Z<4d8z@F|lZ&0h4*+bjXy^xLmpQNMHG@HnQ<2KS3iLwRRs*(}GAe+==tY2Y)q zkT{0HLZnFiux^!x&^shmuD#G}Vxu<|5t$$>f^a-pts&%Yns;#lcPKxg63$?D8lxY` zDPVy>lfJ=&9VN|Bq_n;)e&uzwSSre30{KdvF16Jp;0yghupq7!_f7n0R}G%19=_4f zPGqPJ#2W%q!U+8(N8VMcSh$}DiV)LC!~*R!hGd};k6Su8=&rIwg;wdRmG}%us7<=5 zYiaSN_T@vxBT%Xd$*v2an_10qi=ccM^!ZzDL&?2_V_>_RV&l9=L`=r3Fdb?%{M?HMxwIvX$GCOhh2)&~H=%{IN`>3zawv%5Y_BkL1 z3E2#eFvbvz6p^Rr?IG$bS6}|uV-9d6-5a>1+8O~Oc8w8S74g`~V?=ZnynZhmpR2;@ zg5usKDK)nwRoseA?NiBoOyedOgl;Kl`kS9h!PU$|dI=OIIW?**w%BhNrRUY-;YPu}&y@^9* zBBDuLRg|g$*J@r4cYP?0@agBzBA#Y(8cEz53>-E#Y+VT=_EN(0XFp{Nln{^HItNleWs9nnG@|Fp?K z29sFGA`?~(qy!3d5}izHXP@31Rt4G?!j9|i%j;f|MGT>H6fNW-js=N+FOkgtahqImJY`}5HkD+du@GUmAa z!xZEdHZ@{67bR`M_2_=I{&2fTKik13v#Rsb6)KyvT9?;-T;Btg+g-meS-!ng&M?fsk6 zq{++0Nc8-aF+eVAePJiB80z53@uW7^%ZM!E2b9C~k&9aFY40qtQgOw`b!#k5TcN10 zt%g42MI^~_SUoqB{`?#O2!7z7xll6X8b!TB(i0~){4hT`9FnVP`&LAGq;B0zC5tXM zXmuuZr5nDTmpp3ah5k?_T2L7sVHPnPy!#}Udje=yx8_y|w0o>nWpb{>zU_ypM!Gda zVY7cW=Om0*=cs@pYnVSzFz)!Ec|JWk8A)G;H418GfG?E<1ZxgyRngsf)UF&Y8Q;o zYt;{8G1E*nuYb9&jhYhpP<8lqgmVVuOJ>xB2k_BOH-r~bs&Sug>Wyy3mwUZt2>pz- z&-%Rmku&g-G@6Eb!7vO;_#7MSIrhvvGT3$EM7bw#beQzxxZ~{x*9lh?-4PPo*jJHk zd6~2yW2Hz6EHAw5l43qt8^*T?5hKffVQmwDmtBlF9nb|DXR9Dv#qQRfr`u6HLW|F6 zs1H8#NMhV{b5&w?{I(#2Wsr4;+;uJkP-)fEquJ#LJfYjYr3g$nFD3yb9`^DE;ig#G zdw_m5Z#mZQdx*^K{L;hJAW>?(*{~%b)ngrB=QSXX;2!A9+V=&7uB_A+^T5{8l#`e% zfkMl`4DM2wBKBU`GqP0ny`6|u6(CYf=m_cdiQ?a-kA5xpoCX#x*~fQELjP?&1y6$$ zg`O%;4en-*{BdUSX2f+4KzXbOli99}r&f7U379{s?)sD8nFws>_ibY5{o8A* zCToMqUrY@J==BvkY+Msu-4rJ~jTsA;G2+R>ZDM!a0&wkZklI|(vm`&0sKLHGL02hL z3k|iASf{*q2_z{G044SlzLt4wsl>N9@)E3kvi;=_G+Xi|=49}ORqWsoZfc{7Cyp{L&9W53;&7P(bDx}sro56$#C?PnFUn0-iu(|8CTwCMZ7U77#;HRso-?V2}CivdGoulwk6xSkWXRGa_{ufnwY#}hp zWnTHzl!RQlFfQHX8#2{v+2@u7-SPKLRoLQ=BqOPpWkpl5V=4=yh#;|%ZmL8N-{bo) zq9Ne_McP|ORki;8qJkhLl9Cc@kxP)4?gj~2NSCy^7Eiy2X<~a%9UAz9EO)UG0A+J9# z&Y{G4%=*i8jgy`pEc_~{Yr4|E=q%3gbl2`m>{MoU1iUysjY5`X10LhSz?yCdGC7>nv;yX;)w^Ae0? z#?_yGv@JC&mN4k|kuXYnOrE)_**H~gEN3VDeAg4kuM-~3+Ka!7Tslkc6e})_;06igETy*zV030amVX zp%_jgF4EPDSD>BPI{ZryT-@kS`fkqXxlP0yah2TG@AT(~l}{)AHpa+o+>Y~f(Ddex z-!R;dr_y;Hf3~Sep5;=6?uF zpyWcUI1wL37$uVVDQZ&KO~dUQj=M>9_Il~F@tf@g@u#7=G9WstNGQ>O{Y^WT*NPGs z#6e&)(a=NS{QR5;4_yXgv{47NLs_rzBr5QuTOKR%KpuHcH!f|g*}pnTKH^<0-*|Qd z1gw55z2muGz8zY=dI4>xNvhBb_SSfauWd4ZCoLPbX`g=jf+8YHB;%@+4(8?YYw$5T zHgo+tE}=aX^#;(9MyR4MRtYJuz1pw+GGliGznrdh^P)S}N3l-}Ur6vQQIu_d7%`M2 z%VSCOj)8j$a5OGvB@x&z;pes!CJC+)k9^c;?pZxI0us8VEim(&K<_IQ!sidbo|V&l ze_ompIaw;+ofJw#ZS`1*_FuOjl!)%Jj|2*_RVrHWT5vHLz~<|e___0v4aEVOxwQ-W zPF=6zLlv;*F0ukJ!E;8KN^c-+okEu#C{Ol(8H%v#bAME_oIWWG!^UI_^oZyei*Jk| z9ExH)*89EqdUHe~rZ5Yur_L`}&NAtmY!vNjx@L|b#hRsUpV@e-ej8 zMk?}m^$f>ff;9TPEh_VwI=!}@{G1yIoaFW;v&2Ttkr)$oEps}?&x`sz#tf1*zD$QV z=UQb?@`a^W+E#v>?(g57@neCOmjY50+lVpj9+hGBEqdE8J$_wBOYTv#^aFuNAU zQnZR?;^v2qFB^g^-xi7NjfU&pc((SC8DGqghJ!~;aO_4Avj^DNAb#URzn?KoqJRj< z0(`2hZ$=KvA77?fVCj`l#xter8#^eqM~)^|IF56nM|Mm4DBUFTCeu^*K@lmR6hV;djWq9K z$sE#YTqOSc@kZs3t2(brQ@eJ^nD_VwmGPYL7L_LHKxT+m=m*_|$f24Ec*4^ZmyPJpCp1W|KtFpq{w&l=*!ZxWzc1aA;9rB5F)tBa3|+|nzB3-qI(8D zj2HuFz$ObCGFezyzCpU;LxWrw9jEI@qpToRMkHpTGb^K+7&5aD`hjGdKPKq}c4WHg z3-Igga_Ct*v+xyVW1UCt zL$9anGGj!$2%A=r$u-V{sKSpf@V`JU-Hy8m8|z}D#3KY@9|&pem-rKGyiQY`x}K}K z!zdLNoD%W9P?1Vkb)@|ZpQmJmc@6*nqez)b?O6WjgSS zsHP;y*x*b_l4h|?|1-vWNIuO?fxy0*pbgtR;LMpn;RViRnfGtw7n*C?5;!bRXgSNn zjphY4Vb$`yk)C^!EeEd)|MGJ|kKp#!7)XXBI|d!BoGK-uebGt4%-pPLmy?6t2rYe3 z(|aJ?6@53(%aPM@v<#`qF&f9fV5QR^!jw9yeg6&`ES(axoA^a`r&i>cvb*EqAgVo! z&$B(7(axzimb~CbWB+Qp3Dy@Mb_jW(FD>;LXry11kZLSEQRpk*pJwBg)=g=u7<OtyQ4ArL(`!BsyEjll|BBw&2ZW7pr;Xth-*2 z&>W+BjtVf(m00y9XEEnT6!Bb@-B+BJE;lCbz1j6n>%RhLSCQ>41w~`oWX)Oc*T)fIkWWJjsXL zM@K_8UX{%|@-}wA^nx&fc-Tw#pWk(N^n~A{_V>o%D?yR^?jcvXZ(~HqElQiGh6Qgd z3B{m(>R;b!qe|hd0v$6uDoD+Ja!jph^|>Tyr>)H=gs1f+uC%T$#*@OX7eo$H30(Jn!r=#g&i1fo;TT zVIh8juG6gXMg559a97TE)nYqexc#DOWPrJKp(_DjpKbhAjxV|Mg00h0JIYO6>f^4w z-Kk>xU(`MMN3ow|XeDuJ@FdqgCUeL)48}e`?XpT$oY(NM|t|SYz2?sEb7_sp5H-L$QC8aX(qGf5xuhjIawR zI%$VF;cl@4Ye^$Vj_s&*_?%L$FJi{tKq&JluOIGOA52F8+0`<`^Wyma;v%7r2{-y+ zpFw1c`Ck{nj}HL;{)zfRAfSj9>MxDoBXEa(<~Z*(X({!SGWh;*I>qX4qqVX{!(Ka; zi~C(Q_?9u423A>y#Y;gIs2o3VI424vj0J;%u(@2)qq2R(Zj)aNU3b!74b@^LJau(u z#M3WQ;%$YjGE50C(yk9eGiu~}f&|B5GZC)G+!smC`PZcN$GQ_Bj0RLwez-v;!$g?XH=JJ?up?(uFfjMOFtow9a>Pfj5-vx*w zJeV~0l&6fT!hV{9p=dH>X}aPo*4UX?#CV?j+l@Vj64cG4lt0D)Y+3J1X(Jcq=Oc!# zaCfL2(dk|l9P%rFc)mK@csDvg%3)4J?I`Vr;|r1W85zQjRwxg#b1t9)L3;C?3m)|~ zYU%QXtPK;^?DM}?l&_fAm;xGF5IIBKF|sL+0h23HTQP@w^E{Ec9?_=Q#u zr{&E7`v?KE?mC6~HA*j5*)8Q8R+5PNu%)+ro3E2Pva&#guwsqMZhs$mPm6I+pT0(f z-_E*4#Cjn>Y{O>XAY|!cWw4g;m|sdVW}U}A1BVi_kP~?Z94J~X5kfEvAiVOipj^vF z*He?5JyW6GF(yEhmvbMsPdCI*t`G{o(FKeGjg(Q~R#W~p;;H53L-5;RG~%dOC3Z;i z?c$-=mch@BfrOh>dXDuME{opxry27=8*4z3amT*_Q7i|y;I}$;R5NkrQpOp`NhMe63^raS|Ry4zI z61zDAa*pMQYwP1EK0+q#?cJ2MC>h9=Dq|VvbkkIM4t=^zYDKf{& zLL$zYfR70tv+2`uV{(vgnhDR##cAZCg{@^>?Z@G#z%Mj<)n3{o>!vz{?~IBiwas8lci#d|AC za+P%kB__SieM=#zGb>0H4Rt_?0=T2W#mxOaWUA#H+r}Urm*9$Cz5&+-4MNVSt)GfD zjIbG%^y%r6J-*#+&vm5?prR^eY`UJuyn1t!^g*b!^o!+be~#z6eurVM95%1hu@+;S zK0y>mrLA&oy@$Pa@2%C*~MN#kl;}VQ!yAOg76Tst~f3~Sz9p@HXAW$G{nu8 z@)97t*6~*CtNe1WE%SB0`sLOcx!PPc>8;0Ay6ow)9k~5nZkNtn40BkNM8|Ef@;ec_ zqCq5iz0BlLbp=+iga^JBo8~5*LaEJ*j8$TD)zMI7rSz}!ez^2LRFWayIMK&)Pt2g` z$}08Tx3HSXmuHgvL;T>#%nJ47Jc^ByhA)#viIh-A*X^u8x8>W_Pc|)8z=8*?b8NUsci=@jp_$VW_o879VhI2<*<)^jn!*pCX;sB4YWQ4j~=P#+5apN~(N)oN- z#WvR|H^I*tw555R53~t2B&*~kr*1PIfCCZ|5LJQ=GH%!DBG6?3(wG@0C=p+fY8U)U zr(rVie)-`}PyDTClGH#h_sR8$cMFE7yPI26I%2Pl#~NvOP+sa|y!v#v-(S0Xb3#vm zJeSAV(rr9fqwvMup?50=jcait{Q|X^+Fw`r z_RzBa^29nXZmw{5py8f@3!@D)F+Wz}EEhR!G*FbKrOgT=oKKYSY4#0s^Q7)sHsNd^ zUB=#Y#_2N9__F_+GvLsYe6>-%!DDBst7g}-9{ol;6gKj3JK}{&&zVP=x@&5q*fhLO z3EEj|!F9O*w}dz);w2W)^^VooKGVazauaq?`}~;Mi+n-zs{G)kx$}?phLmqkKdZTB zx?7j@wVbAk-tG8i*btNY=N@I)QUp0Yb4HC<>fPeG^c0KtcNz@;;fm3f1L+4x1fOv) zM!+~mzGql!%#DcOxO&PPrKpkbQ(>k2;}ueJs^<%Q{PQ-1o#XHGZqCDA;WGD!O3l~K z!))C>S;cbbPf~Tau-OUG<-g-g7BzAke4gjjGIL2GyU3Kd=tZHh3}i~Px;xTv9?5=k z+jew0>Mz|GD;yY@b=gHlLA9`y1H{>+Wnr@5kIrbLfuUc#jLrryGUQ-e#X5~sz`&Bj z7GI!`J9$s|v>&wG*!V_k|1ao3UWg=_p%H_3)-%1%?F2`XpM&ji61|YF78pT0XN}hN z?D3KK>Hv^@ySfMmlD1nI^G@l>1+b-f87u;MVLUmM_a*^0gD?5yarm7t zmPcDFW7bTxf%Nbf90{Sz`jOc!p$FGeL+U{({#6{Nt0vg*?_q#a^*Hb9#7xmWSzsN6 zbu68f%DxMsrg2ASg)~sJ2P;9Mjd>q#Pxp%|hwV&me+1YMl*IYI85&8mzv=PzART^q zo+CQd(jwTJemf5wFhRNp&u*l7Ud(#waMMY~8N-0WySECJgyo{f*%xHSiz=r-ysBL= zXodYO-2<#Ju>!#DsWL5ft06lsqp}1H!=!i6FE2!0`p===rTQnHep^?74mKxIxZWY& z&fuSo{`bsu1UOm9jbV9XH<{T4rXqH%7v4|bf6S#$E)G$DA?V{7D>+!=ITLq?J< z_%JxqudM~LAWnm#JF;1i9mmZ3D%*S-P6gY(-VZmy1(aaxZ5o|C|&#=RaTJH~E3scY9Yy zq8>Cv_(VK8C){VBt*Fm(s0=i|y}C+bAYbF3=xTWfBC!7YNQeP-;&+FteZcJ z%cIGN&;zOr%hFFkl}TMX{?XFG|5~4GEX^+$tqjsIfP#Fy;V>=3&R)~+BN4L}>j;#tQA zM)a-mN59-9`V!k3E#bR?B6KAZVcBPI*s4`y$r^09e3s8u-*yJXr_V2pY=PX4=+kS` zo5P2DWbWlxT5t2D2G*~N za)M5Kgzn3i-_kGepY&4c1oiQ-h;GZ!rLB8Lj{zN~451!iYacnc*KP5rH(bN~A}T+; zEK%}si{Rdlp|>JB{uxVfhN@+}%wMm(322v>4jY%wnOdJ2NrUL{B$DAMk01Tz)-bD0 z%Z`aRg*p&R0t9z&yOLYPFVhETiY}ip^w$V`=qE#^bDN&w@1Go|jS1H)72W`qblD34 zmb36cLw#F3_+7XdUk%6`U6%MO;BWQFVg1c;lLQdQQk^sm7sv26)#+ei$9`*p=vBgW z;3w@8Azd4ECx{;n=`asciC2aDPKaNw`;Py#*}vCn*m_U;2b2S~3fM*dP!}v6Z9a?aD$4DQ6HidD3lM$`x~AcD&`+k%hP&954|x1bQ4#+6=9r&G z81`2~n4Nx6?9+Gi10I4sB`JaamfKQ2Cxmspj4N?>*hGePAemEQjzQHJJny>1>>m`m zEd$c$$5)b;j)LUKE_s{|U5qEROm_Lah!K?l4Ec<=K+^tKlo0VytRagX9ddEea+7PN zlCZ4)R-Brynb5=a$enhL&GNw-6VUb{r%1i9^$QUvwvCyNwh9ak*zZoUc3@@b3dUDt z(yAG}S-oafFKZ(|FO+gcQVo8E#l7-~Ft2n=jqgln!DV(%s=6!?Y|_>aXi_)3Yd?ZS;nMCH<_fB*a*#-AuE4GT5p z??BGOH(GL83nTZBo&Nmg)TjzN?5js@tGkzB$@4@aPn)?Yhb2~Y-7ar$tCxrE+YTl+ zD!Us)=~(r&?k=fBGd?LhB4n!?-#!~P{tiAtrDx>|A3^y;|E_2^J|nxWrvN~uU0#H~ zC-r>m)4$u_SyvcoOgQ?tjqLtZcM*d_p8=gTg0w(e1_3x$3R_vN69Q6hXB*RlDR+W;oUy2Fy!^G z<|44=l2;;doy_am@tQ1f)x9$s826%`8`-r0&o`ZXpm3eZ{l_auiC@WN90s={o+kxW zt@wlJ9SvJ3y9}~2V{gu4)&%W?rK2K(Wi=izQ%h%usDGUzvICi6M9FN8{H}S9!c>J9 zuC0$@3PRrj<`f)2)F~ERzKN+Y=oeo|ibK!%lUb-ApcRgxgImOO@7i3FBHbo+`GE2s zL;DxrqYIM@_`BMFq(eM5BH_VYMQfPgeuXvES@^7rukDQkl8_B~-Qfdj`UHy89L#ao za`88Nk!hDK-+n6l{2X>zk*lb8@;Kj51FVMG^BsWimCS$vERkED4YCWnEzE;j0*R7Vn*x4LP0Cb%$ z6Ki2%t0mBSKW5Q4Qa(mL|tniGf+;F1mqfZ!2Wv?x!>ZA{{LzqrJM26<}vJz#*@bmir%-BHCVY82LoK#!?r1Ce02-`0CCdI|dcVBH*e$pYawWJWN*c^L%Z%q=hTjJ5 zlv%=;j>eJ5#8+ZVJ4sZwe0Y3u$?E!SUD4^qrE}{|S_YkeB7VzB6A#zLYZjLG>)kvj zS66EhT<8Fm_{ZDn&+L)a48YWy>E;7Rr%5F#SHHI>YaTo(!!c3HvvkDep)csOH;C5T z&c_yi3cy-^v}p8nwrT_`Ku$JX?J$pdm8#^FUT(>Cum7;t1uo&eJ#N&+}#&NYM1+E@DNA@G0(5Tvkki)VkpOg+FzDU;} zfWc-pPjuS&*`CszDO?qaQO*^K%JEtTzS1#b!19cIrMF;e|4U)=({L4`yxXX8<*<6w z5!z?Hx7H+%(Dem_j*=V1@}U`?jT*Hq)F5Fd1Xv`izYuxE&ZSgqceTZIgChOocSV}j z{hr6$rt}m|+OaS3|FRKf(kk>47XAa5n6Q${9?*doJe$nurnd$&=@GAfZW&eVM z?;60D?*VEYQ5WzP#Q#^m0uWps(VE^3eH>QhsZ2Y*V zU?$QD$dsR7$lqoMJdjJ?ym@*dj{w^0xKBDw+}LC9jM=mJ@Uho=-XUe41qQLIAETWD z_iVBbxTdGl-B@uRZ+JFus?l1giD+~Ot+6PH_u2oduMkS7+iLf`cq2k(L&CpFv|zIm zGTM#WQfD)**8lt#jGFCi;86p>M@M|~_&3I_1eQIn<=%F*T*11tbUiD!&8oG(ewR`7 zsP9Es5ue9+R>+HE=efje^|7JLTqBQK=$?|e_r1|wMN|)$Dgh2RtuHSPm6(;tETU7p z=-^GKv#&uTuq`%t#<+EEY>}LTjgERHOs59xAWr-%9Xbdhmbu)AuIqk!NARN(eMCGPZ?hQRm3eH=~2nFBgCB z+~E>bLgiK1s9$q@LFTldVN<<)XO^=lXvArGBo8?^F@Q$M%07@gjGKo@!rxa+xdA9Cr(ba!%x=`7_o{)Vik^*eAnN^BT*cqD%cP365kNZ#oTT7!ji9QK_qjnn ze#NYx+^%G=VdrDqU?}H+15?h;Y!O=uVh@&9jWVF7Co;m<#8@jcqQEG{ThZ}8+}O0g zO;S}E2?*drnVJ|y*d$5I(OJgjI@t;h@9HV*vkz+T#K#q4c?o=P;{G(0&3er3&0KYU zx$l#f(hy(SNV;w?hLfty)SOQ8zwWa()o^awIqvSp%EXO!dX$P7*u=T>Sk|ri))#3y zLXYyJP|Mqu1XQ`E{NpY}iMSjr?!p{_t~|yZbrxu7m!Q}>!Hp7OO;lwnxUb4P7?+20 zKz&+6F^hUjrkzGPv@7+lTwvaA$(9^vjICSVKA3%0uWG}EKVP^?yHEU^zM|Ge-)T0c z)hX`HYP_9sN|QJ#I;4Iqz*F);f5bLP^n*+kO^@k(odUl}qntFX6g#?Q(myv;)(rsu zb%n1>^@d}b=s7k7yVB*TuA;ea8i&cPd0Me6?7~5ud9Qj*g6&Pn?} zrwrqJzI7RN?W`Z;1n)T2%%+6*g~eu*$z?*x$dz$y~Q55+uXCjpXr^Td~wH zjv~3Gob#gT3dU>?G>{@|0p(dY-ZN|M11aft>wstn3rwN+x(AgwK{8r2L9$|U)1QJy za-yKZnt=m^c0xNfM>dELc+RQ{WQ~aLesjeiNO>mzA=>v%v+tT(Xe)*oA}*o=t z4Xa{&=#Z&{mvwKwj5KezoIAM89cf#vTU@AOG6Hx*7uV=5{;YG~<`iN6c1Z=2ofu15 zKrJifn<%7c`eXhQYLt;qKAC7im3xlp5e_&#ziEfLb7P^&Ag}G(p68GsJNFIHds!#5!(dnBI8RxKtvO>5$XhFa9>0`CH^722_XIBd-a}9 zTlyx(s#a7}iiJdaqIJz*GgWJ>TR-lwJp)E#I74;&>fbUFS*a_!Tg&Z5kak792(00U zYrmar=@zl9TQg~hl5-A%y-~!-ZmD!5td`t*@xXR$o1+-s;~D&l2Ww8ea}3+0B7CE0 z%VjTyw8y|e=d8VjM=`vERYQRmv}u$J_^&b3Ejxg-@Pcwf#bI!SrF&74Fl*aGw#CT9 zG;gPU(U%(97rOe+&Ll(7Sz8g^pFt<-eeJ0S&$IdR5sgX{S3X_71AB!9(+7T(i#LtG z^wZzal5g_Q(2YdgSmJH9Iqjv`8wU601NwI0d{@J1fAbklNd_FOBaZ$L!1}@=(l)1d z7nV^+PFKUqrBZSGwEl-SlcBvzyD#?y@}zzg-EV=>+PUnOYwriVuIGhjtGSj;yj#eG zVwWat!VF4Zqw8Sbh{U1z>d{_))iN-TmIvfa($dqp}d@yH_U>thbpQlwgS_P5E&_n+@=1m z+@#D{F!Z9G!gEU!hwg;H^Gn(Nd)?K!?^x(@@Herv3t|?*FG>R4(yPQh(CBLF5&2Ai#_bog8nBaj7IFv(i?u%${y`Nc&1mwmp08A05A?hMvOOB$&ZhZ4&UTi1gk#SvCu&Ra?m8L{!! z3qvR+v1hkyg%vNS((yFC207`j*+_jEqhCJ%rr=EhYK*9SxX7_-=sDa%q#$(Xz;`~W z3{2i}Pk~z}os&NkuK3@TGuLb+zPe>wLG^;Lcgt-Ja_%%u*ynl{5zZmCa%0uxdFGCt zwhI;FznMKZq!<&j;^Cs5tKhd;l<;=fA}<2=-1(BGVYPq1=YGS^RC~ zNHfPgj_r&eqd|;*u|`K6eeeIjiV`9^hAZ@ zn$(1;a3t4w;jDDCIlJ3&$08MW_OoZAQs~QQgazT3St1D<=z%5wpOnrjvqScf?d$^# zX(3Vo@Y)x*@AgDgKA~SD>9otD7)9M{a5q)QxfgkT=ox(0jmAPTt=CrG+D{AZXg%*06K5flWG z>!ulIP9g2Fp8i204QPsq4wQ(E5^y^AtoV)RHE@4lg|ZR+)iDpCb=q63ce1t@l-O?k z+9Gecn5ANJ`x1Ut6!LiP`SqYUkDs+m-VUBz>lDeG_C+nvVu z5hI?KdVvD=+Zb1oOE0r2@Q+%huO`g^P<+fkLcCV1UojL>k+1(<8%g{yjx@i4Q0 z3m`ns76{#$@$Hp$SpNK`0tal1Tc=}>+~a+KT`j&=67SF7_1|@o|N9HR3W%{CUERF5 zM!cLsyVzr_^DBEH(%G2eq{SL}X(>8R`}-Gb3=bbVii534MJLBeQau{oiUDmcKm4H0 z0cHjI27v`eR_T6k2N9v*)U!J7t+vU*8%b4O)$}=W9n+;*r)*AFr!>zEvgJjmF}13Q zrpnZwG)H~BKQu~qgwBSm=YD@nCDWYLFziCGlEAw#eVSsv&?go=ej&LQB>h`qv&=&O zRk?f=2Kqh(Y^;}OK%Bj0eY?$%81YQCSjj?o*pk!Tr1W)Qji%wis~XGJ`iqs%2{WJL z87urx88|VX+{eH^OtfLG*bh1X3OpIOin_v0Tkt$@$o=We^DJh%ZY7N7_Pg1%w6rWg zpt#kdNlUxcj(r7i*B{G$C~lDHRIf(+)^t;BJdneXk~Rjj2%t(!^9qzq9 zWFdM8h~v>eF?3WJRsw(MI}Z?4F6%s~-TbsEsct>^pt-zv3UP6Cc%tDrX^)^M)J7?S{T zkS&?z{dP)GDVo!Nb6F`yQPufu!8?3tPvk*;PL-luHp`5C)TV0-L5Mae4dbd5ks{xc zU{>zq$`_N=gb`&?Xh9YsP8}EUwA^gozN7ey3v=f~5ENjS7{1%Pj&omA)?@#!SN%vomGX37EB0RYeWFnMZPz#JYDu-D+lz7F`;0S+HjIXNG}cauNE zV9;Nv$5Kj<%*;YwCv{dKxSEmKzSxxrl2MXn-3dz>y5FU1trA+S=`a~gwou)v*33aJ zUsfRXWhq0|i%dUYVxXK`L%kJC-cHJX*RNuK*Jgkl)iDm&2L8(~`JemeiTvh6QKO` zjXd3pnAr^Dns4e4dZpLYMqXhV^-8O0baRO5{c|exozbAM$$+8)?Xp=1LH6^9{%;~MK$ z2i{1}L4*cvyd4&IHA^D}M{`ov0X&; zvpxovI?`52w$*$KnPww;r_b}M)HXCmU=eP$$pI>9#?Nr?A;7ONdzF3?aRTeF9b^sz z;E&2bJy_uJWuVD`o{>F|Hh2xtaZ}MZkA6^|BIo+x@4GzGk`~G$?n3PFLi;o>t2Ub) z#+x1WOw($MGCP={*n5*voM^vXwAs3L>CDvq$m{MRD2`!orR!$S>$IUL;UzS8?(L9& z?qXi{(C^)9@LWyV=1$JK=(shi%yG}CW$DBjhxSo$jK0;am9%uS?a%M13p&6pUDC1p zKXMP!)nGq9&n4Z}#?FC@fr^6g{rkY*h z93UT40nGFu78MPaPND~IBve#u4#942ilJX;!pZowKg>-`up5s^;5E7sR!g&g~nf9KJXJhde(W;TfPesP`Jzy9D>Vt@fYl4Ub=dCvzu{JH@zLS|8&J{ zV(Ah!=Odo^a}A$?p`usdR~)v-5bE>fBD8lyOytF{zfBQ+oeRAe6n|PgBb{UNGb>FM zsNA3Y-?-W(IL4WS{kq;Pd9vvCoXAjx>J&Xre)%SCA3~>?#0h-cdLY`~3 zJB&0;WGS9W$2^3Pxn^|dZ6K=-uAphH&~v#2;^l$U*hqZgiALq4b7u3^_a00jz+|?j z<`eOXZQZBS; zm$KMkHPf%ttol0%%~&r2^Ct=Cr=yrq$zb(@9K>cFSfC^93tU9s&l-55EU6IwyZ!2Fh976-z45P15259+}C=|gU@Xonlj4Lb^7Ng~i$ zvyv0(*M~(n5O<~K&wv`6O4Vv>j2qKA5DHTTl`3QPXRN(i>q04rUP;yIU>w06D0`<@ zdhsqn7CR!IU(=d4aVaknpH8`RIW!|SgK#sn^-ChxU-7oj!gZl<0Q>#u|F++gAOMHVyP}|n@j>s6v|tgA87ym({g7(xToaKVKC^3_~dSG`jwsSlDNDaIfXX0kse(l zR7vbe>AP5FtyS+{k5KcVm+LuZ&BzZ4Rk6_C_T<@NeLqJ3%qk$o43_;Ngd|8sPH3lg zub<{+0BpmDG5aokaNC%aT796a=LU(wTOz^R?KmHCHXTM&01TkQUgIIPXh|FC2F}rFOT8OR(*vMJ6 zf4b&$wiap$BB}AbObRS(4beU#0CV4ial5SfHwnP?MzS$WWF#cOM4`GiK)N=>AY`fv zVQT1A;N7840gl#)XfF%{b*?S&z%AS3crjV13u1`3?ie7*^s5KeRhvkigriE|Jm}aJ zR~u>`-1_3|gcYcA3X%4iPPY)okttZ|8iS`W|K;Zb7x5_M2bL%M5RxU!^sR9dQ>kH6r33d&&Cju&oAc6;Y^< zY})k4ZAj{@OXNS8Fse@OEbl09>4}VXho~amsG;=yDM8vH+to$OhzCQ1 zWh{P@aY8Ao?7o`mlEYgIgBCHoUEYCp5%pCc?sP{j*%7P*08kH%N)TtVJvS3j^fg%$MaqMqY=ZR#t7qk zo{E?2cRbN*bSf^^Yh8j*x&`co6~IU;b>P^O`GX5#^Z)FNSnm;M7dhPb!Y9^GEp%lE zb~;8lzKI=&AK{XnoPq#;{e|y-n}SxWb=rSr9p*F)c>dzrRJC6~acC}qL@rbQK&Qvo5tU6_iN^S!yDAA| zjw&W~nX#hdAfn|m+cvNJ@5^(TwU{%*l6}96gRA>L(jWZxCuHe#VtOav+`w(l=P#zV zp0>e%P=t}v3$OD8o_j9=LxI{wn&X(@NugrI#9g7{DZC)$-N{vDOizo~xNeLI+Ra@F z>Xp?8acJ3`;WED!p6i_RIpy}xEmo~jpf}I2te0Yb)zO2rs)R0sgEDP$*4A36Qb`c* zyj0$|NyWBP@%W-LkXg?_n&Qcfpx?;p>H+Yu$I<- z);@W$riJZC5UgHl9kxn6W-hmhE(N<-4y^@RY)~EmZ3Pg|K!(wg4wrR(nt!h{=-;o0 zonY%`UX`}!IKSviJl`D=pOG=ZNEcz@m{19n>ma~^ioNztnG&rc?#T3=! zTL0Y7pFfjFRh5>G_~*HQ)Fd&-!ht_M-zk>=$(yBIdo)R@z$LZ#51@pql$o87(OUF&MkOTA!N z#bS$NU>uG_$@tILbEd!NyY8icLy;vAB9fp5rA0=2ujj-CRoOS?$@X)Y!s$|_=UMjI z7bCoAQz~D@M1(w!IEZ=96Pws0ZYb`$zMr379ts(T@R9I^x8yXjE8fUmc9c{yhEo-g zT~c-N8)(|_4w51MInkB#C32D;+_edY5=NUCjN=4JN@=Pvjs!TWBu`EF$Ek}s zjHhW8H`q4{7_}l_1a+v+^nZ?@5fuj)?{}hGPn9pBtLM-#7?Nu@%EyLrm=itzUhz&` zcoBV5%$0tQ0~-y;qF((#a=5T*)>5Nqf@q#C$qZpvh)=*t;itKixH~*Y(1!=y`ja9f z$lr}J9?nW7gYx=9#`X>e0K8&zV*%WS3&&l$wF??=q|q6779sS1q!>2RTY7efwBUH6hWbt-oQO%kzxyTb#8;DQ`+4baGXxq-aJX*qf; z158^fG%y1_@L6ea6EdrA7tyjUk%;{FVm72a8dCAkq}Ie$%eu}XRtvnADNlZPe~3Vy zY50iMLiv?S{Vd{#?S?hGZ>zcq-=Z!kSPpz>dodgF(Vm%4sdL$3JG^(Gdm?M&Oo2b+ zopiDUwZGeJPLzr0xYL57u&@twn_ugL5=v5X98OY|dgpyFwqGuvm5Etr{9p(?KOzB|L2X4#7aOo?*g!mt);Ay)E)0pt09=*>xmWQ8+CfhYYp zv&4#c{1s$3CFf8pH_)M%;Wd}u^tee}%4?+Sl-uJz6@aIM!I76HiqdepDPl^V74$pwZGXvP{S>ld5H3(8dvV6{`ynx9&V0$b4JX+VK-T$KdwM`X#oV^60 zjuBm&L-bH851w8?9QN1p14M?Us_S1ooi02s@2C-#!ynmb0+6uv?CZOu2qY^Igif<` zy1AsFpl8~pTJzj(4&MKNBs*$;BRY;U<@j^<-g};CNX+i*OYP z=f+#61q;5HjfQNgU6IQ1Qa$Cpi(j5f%(C{3*uOM%-D1=rFw5pt5}M^FThrZUZwM)I zd2!R23N`J}AvrYJD4~s-%DdUYR$595#2l!v_Rn1iOmIO6Uqj{&C){RL5P^sosU&$K zwAe~;mxys_GG)CI&pmIqn!-@p@x2)=4=m=Md8Sd-cCo|0`vdk8v_k(W^2Z_S;`^j( z?7PXHb&^Z^Z2nFD#KaC%3pR$lGJFH`_-YGJ6y_%W+3x3GFuj;94}oMl2MdJof437r z8h8F`@;^;isxZufRQhT!Ibj^=Do;_r$|2>Wz`M#G$K**y8fxTxAbdON;yeHk-(LTp z@Gbg`%j0#FQE2@-c!>5w;21-8^7XaI^Z8H6r&b3G|8a!Pu6BjoCPZAJ5E&>)j;yiP zj_H|v7%_FO0P=s0N1~`Q%iOfo@YDT@Yip-(He7UcbbuDK{8}VAB^p%@1yTO?C7QPq z_46pZrCay)?pB(TEk1!vg}|7J7l+Z0N*TI3@t+>T&wGQ7MYxHNcRb@8glB%;#m9jR zfF4Cv*kw)cq1_|mfB)tH-<10#yh#}6syz1M9?Ep~f`NEhhBo^<*SDhxb4@jxkR|oN zv9{5&pEyxfY&kuPO-?_Mck@#Y%7hj@zAt**JZtnUv!4HUb!;2URX8X1GVa%dU-8?Q z6Cs_FENQez{tL`?byznC+Y%XtFIwrR+TB)T-Gcp9X10F%%O?kV#%>H6I#}!TwHyXD zbUZ?IIQ;fZZILh=BkFuRL-K*yNyM9YjstYy=>3JrjzjT=;#KFffeF_87inG==fgErj7 z#H2U|qmo1Z;kTgMPXjlaobUW2@nuJGJM$KgEDT5rU+*)gSl5zrT33*QXcy~>&H0o# zgSPX|dBO7WFI9^iv~Ucdov8r5i7OoR3g`KAbmdTlUm$<~{h)|h5B?|AZV|Jf%f$;@ zEuw9_Iz>I`VU>fB&8VgIhFw<|v;&o`?Hxj^WR5je7$d4E^4>OSJH=MMjl|bjiS8GC z(@iY}O2jOHTTm@jwC2kixJ2y>k3xq`NtOcD4+fURXSmiwps^Y+m$wjOc2vLM_ z!L)>|Zn>rA;dYkOIe+#khvX;@g9;XVXDx5-ch#lLT(3-(16TXt##U<3 z4iWeMmo|JVfGoyuq`WlZ1!m~Ly>5yB_w#;75Uu;M9l6G2hy)Hj|D={cW?WwW;jK-R zA2=jO;%y$?A}S$%SE8Q70nA6MNLTHj4-Ico@~q}-W?i?^OyMK7_6u{uD=wS11f2HD zdm18RKe^J*oisCr7hLU_x&2SN)qS+wd(|C5#iI5PQ9;t0ej`x4hjgJ&Yfq3o&MaQ4 z^4b4AD^XQn0nJ1v|y%6Lqv=Zmy{n{>WQpWI>P^tRAR-%~$&cXIB`r@uaQ zc!KB&idBdgtBnPkn-8Q!0y;Xxn3(cLClwc&g|}1^2NRVC0-`hq1awq)N`&dP0!^v{ zdUKdS0a))RkaMYif-I&2iV^2^gG5Xn;;aaea_^cKnZP<#@6-4BY-)xi-;L`sR-!YB z5Hh(EdZjEZE<@DF48mFjJs)82=zXj;+ti z3;u7sJjiz~A#{o@=6ExGf0Mbt-q8 zCtq`{$JRXZP;P2oIkERIIR^OGR$6EyVVYg)X2jIq_Y@Mjx0l}5_y}WxUuRSW$3N+6 zhN-p(BumV*EmREg?bcY8nba<}bluy{n=~2@IL))MeCTjQl?42IEHA0^d~jExXA<@F zD!v-zm01iLgQ)d~COydF6Sk~7i94QEgu|9m%jYcTZjXy3L+`QICxzGLf@S-LA3yEn zdYSs4Spe@3@DrY4VKrumGk4}W#Jo>I5nWBD7m?HQn@L2RBSFe}f&e*Bf7&wVS5}1p zGJ7mKmu}a-Ik;EtT4^$afUyZ^0b6rFuI()|c-SdlzTWlq#7TJJD+~ONXdtt(e(abA zEwu1TioZ0dkdf{+qPX;5tNV=L_xZw4WyCohDAs!-AH!|B3%MXcXvvQ zlr$`wMTs;lx^rI(pZERuH{ZYC?|Js@8OG5W#?(MLX~VB6o}wkfKlaqpL3*AhS0)ON$~fn5~tyN&}#1mvcs_($EnW>J(o2{y0+Y@><){{m& z0cPx4=ISJ_UGdhk1svo&OwW1^(5SMK->%-GXKX1XHwSIT?0v5_}1ef5>y`bY+5o#ImcepV}CShxHQs#fr|hki3=akLnw zC8m&)NSg!2^8pg`?;h(WS)i-(Oa;vk`|(`;sZQr_+gb}^c8gLl#5@IC-3@GwWeJ>em4=}pM!zD{Uz3qBH zNP#CdMSut%d1Bt%x)(_A5gX&w9td%n05Z>SK+|cv;&&KN|5NI$_n-50O3u%<84^>> zRx(ci$-S_ri{K`8N|rXB$&J9jzDfzCp!k&OjGc!?@fLH4W{p_E_iefQRyj#%Hl`r< z8-WwaBhev~DkFAIt%@|W8OQsoxJmYOepxVhNsV<7s^rv(N z)81ylNkxW9GFp+zC%gEt?bV@ z4JwR}CVOW|%>_SeG8p+z3*}j;h_KGod3=9#SOqm=XOHW*;aMTI%huM2+sfIO1`|{J z9qF>hb3-g0pI&D)%wV^*G$iwuSc%Xkab=7jedXv}9)Q=pnSXW%32K$Nz4`SeId#&z ziZdJ!{O%#Vx{MU^j0oFi45HuYvBYZ17#o(Eik%^)v)@aRJX!i*JzCNk{t|5qjshUF z?FWcOusJoM-+y-KWQ;*E$$oPfX&`H#{&hbqqP3g*l+b5Q98{AyX6&Oar@swV83IYO zD!>JKjtx0=dVW$?vKEE@<$XiAY#i5I0irj=33@|=OZh(;jdzh5X#vTII_ZpTz^BZ6 zPu_b67b2<&gh4=5x$Yaot4TUKa5u(wo9D8flFQF*ASr>%)J`fDt-C(d; zBX{r9MLK>{_h!JHx!~+6@vDOs<8&hnQLFs>KgX|qMw%H)jw?x_d?F<6%`4$-GdTs` zPa|kP-J$q(kR3XPN*P31PEAB0^)#T=I#;#E^+Ed2WYV~Va(;Dn0$(M<7)pb+XIQKJ zH6*^!B%C)`?+Si(=4>-j%Zg@B$kTSt` z1+9DV?gCH!8mlG}-)=B4L(pT15Jncsl&w?VYrZE&$ruzWjpH6$h@@L%B|-(?NOk?}0O?^L&6tSj zyxgC?+N4sM0VJ?PGy|%JT4Mj|LHuj4cIJP>ZV0;2O(1Iv0s!9$WejmU1V8G9O$w!w z*k(oqM2N979RvX%dKqtQ7I*9n1^do0lA}O*_aC!oV>MG3r~7cABd2?D8J6ziDfsi4 zT~ssq2cfd^-=C-Ya)hijmmercTV+b_ntlD0EuCMfw$p2ll~xEk5*sN^!R5c9c0`u+ zo#<&ndiXm~no|tXVA8Cuzjt+ea`hl6KjWJZiBshI4zV=02iYC5$DKw`gH<(f&NpAv zcD~rkaVXrDaXC^PGv#S{-X1C=EG%1~TA(Tjfj)lOeRmu+j?3zzC)MLrTDLS@XYY>N zG8J}>F~3_3pTUxFLo$4xJ2K0@e{Fi$L!;wD>D-a9c2eYM$a=AUoyWp4M%-;;r>4zA zAEIcHn9oYL_}Ws-iwW0!e$lP2XH1Pn9aCs%eUKcvcPARaC_-EvMx0C~hN-rEv+C0F z_q#pn@)3FIDKFTMI%FlmoErn83do>C&;ivVp(V#_KLIScAmBp0rbUR$f#8v?2XQK{R|qB%m{WY;O1UV zf2X6FOdLTTZ{k=)k8b!xG5ca{Yv$Xrz3gY!= zkw~|#>-7e~=^cUpbMfz2obAqODMo8txq!`uA^B0OZZQ2XuEw8akGhk`^}{ZD)h*JS zV)!cdJH6dM++OL*M)=OtKPdjc@WccHo*2M(N}|T|m*Zagl!+iH+&nDtYUDde!>)Qc zz&ng+8ERIVM2eFv$tEl?(4rT9Q5Q=i;8$P-^fRBnLuhfXy+v+cfI$K{;5#X7+|b@G z7sldhyHSuV>m=o2_>!Zb132N_U%leEdHg@w<$wOuXHACuu%NDB9~D$KUObmBh_t+SCt0qRd7|-pU_QCedpr<0J)(9)hqPy}3_`eJ7S&of z-MN*6{%76Z8?`DMuSQ02TZvyt9I#i%kb!Eeb` zU{n{Zfvzz($i&|Mw+29VeuO!zlzKyW1ianJGd*75-USuB;WCf7;c}P5Z5= z4FLx&x&#fS1OCk|1w0Eoww-XNiP3Q_OWn(LH8{f8OJpMGRW|_z(4(uNTiZ4#<9DvJ zlo~oiucrFgxcFt2|3P~o`;N~@iP?*Nc;$d!CKb-%tBZggdUvK6a%z92LH}%=kJYJ9 zm?+{6aG$d$>^P;*k1VC2ph^luG`#1rJMq65EhzOb_had^kRFaDN`8_UexoSkyyCbC zpOxO^@A!04>}KtK$ICte3x<+to~2Z+Q#w^?S&)S773h@cP~CV@RZ{kH&OW~j=2Hg0B? z5?XqsS}>~E*ZzVJgNC}@L3&%x=CO+!qAu&&iE)kvsD@`moRn20G>TN=QPM2CKiz9) z91}=f79)?ob@KI-0^vd!h@h8DrvU@34X|lbrl(4DlHHwjer}Q+ zesuVPLOxRDQ}-w5HJ+#x6tv8QJ0DIzNlaOcG+Op}+-lEFB! zMvYl7?*~4$ixuB$J;TU(W)u?>&^+-)WjUyWlv^8`&eS()3(itivRrQblIq$ z9Wn8-+jy~&@;sT52J=)T?dc@AUmU^tCOO7gETDnL96PW}h21SgWA59&za@`+pYnrP z@tXrK7~KTiIkiA~YOVr7@&tzJwBI_c=jBZK+#_B6!H`UAJsYCa%}Q8bUk@`bzF{uS zzUNa=(lj-fcU=B>FIlrsFPSu!NLgbOZZ3${~)(dvAiThs6=$B8KmYVko6@NZTyQ`R4wf^&w zHeOdoB&9DkRb)BMR7eQh5G(#i6LGIx8O|?<@o3_vT}@L$LX}-gi?e;XqV;=CU60-j z4{#>T8Qeu{fjs8V=kvXVbP)Q5%e>kW<{E$@Ilz6MvKdq2oQI$jRDDv1r|nC~85S|Q z81S_hvPDL$MT_oN3)U+si7Rr{@3vag1*%h3-F( zCYFW-{usuvpMX12P~vd%>Th8U(t&{tew>?C#~+tp?^QDH*-ibYQH;CEbB`Zk4xC%) zuCR8JuiX2Ampl>dZnP5ZX5T*$=nS<^Z)#uhaEJb8;o$F%*HZ&XjywP?O_`iKi6tk>}}& zxsHb`nb^Zz!IGlj!RuwcxA}1&bCGhM%swFIS$sWb_pRLxA7%d{eOs6eY=yp9L!(Qa zSBxWb>(;m2^$EW8`FJ$6VkIy07ytU-EY@vB39PF*#C2HS2@*+=Jwy8L)N^^eLnL!3 z;GDUP6y@tlw2+e3*NKvu3G*5B2WczhqPcG}98)&ERbLNPdyhz~M_5^jN|%uIzyglV zK0bfOW*nXM(~0lX%QS2hk?83hlk(|N42m_l<1ZA#DgKM!Z;tljlHOUn^k{BIEMech zkIvB2Q}1-Ep7gE8h*6>Q6)zR34d$uq_a-|VL6c=;CGX!{*BM3PjiMx$t6ov3sigtE z6eR7*K`dt3FI|@-l4I7v(k4LS^K&mB%-sXVAEYK>_gBJ&g*+ABa@G4}zc0D&W=#ut ziQnmbxL>UPf#f2+Fvj+3PL!4xBXVw<<9JLp1q@^-;{#IW!!LdTcq zNJFl;oO(KbR3VcV{ICgZ4y=HC;?5oSgN-f1$2qVxfA2V}k9wElNW@0^MGzsIqyd$m z(W-H6vnH?QKFv2Z1sW>r#anI#UX$D$`-_fy7yU)OZedN=r%{+=ww7TWl6x5vA`FU| zLb*8Rq7_J49zFYUUj%D{8f-t~XDc%H53dU+NeFz?p}7CTk+dPI_=xj0kh>9cL&sER z$0xEL3M1vRxIs&e+iuM>)hnuQ*XR6i&Vdl(m#-=aL$`VB3Ni{)hS^65E9~_B}<|Rbtft}gR zLVvf6kdH<#&G~luANAWqdfUcY^J(#C6x6SFBygDwysJmQeWKnTC;qUk9RsV<%YJg`T{fWQ+-V0ukj zfso>cV6)`kqvF?7({VA}IVkk3%q#NCJ0rW}uSbz7zrtn1^tX-xJgOLN1ToQyY0|z~ zVYsR?-LACfQ^N2H_l@?wkr!mrcrmWisy2?5CK!^0Fd$F)xtxXZEpJPU0Z*ieGIzmS z!e4dcRN|f55`fI{`h3=WyAIy$eBoKYuqRzKd$4aW$C#54-?rgZu&yf2_e4^xif$@NKa7sBYtVIZM zn*<1PCHOxm7p7&Uv?aCn?&C%|Lf?@gH3|zfXMo@18Q<`u5|vnY-W#PKg63CiHI?rZ zu#Rr$CaWoOinIh@c=rXcR*0$>>nB$ zTGg(yH%oUr&bK4u`O~fYM7roM+)KE^;EStc-0pk1$Cgiw-Y5Ld>X6H#iJfe(d#OA$ zJp3N+8c+**d=35BRoS!V%Jc)risF?3^6oruClT@?}*QZdp5+?f#@jhotu3 zJl9*u57DSG((zei+eUU(#e-jkF}fwo#m_=uQi6Ta+G@s07wXc(JtS-;LzBaKu<^*@ zFUlpSp2>1c#TcPFGJLU;an(`Q0bz0zbXpQ;KF62YGp;b^BhO6z%>C0Wn_zpSeulW($35R{F3PFvVxS!o0=a}1V)3YxLUW2wM`D95q%Y6z{ zHEp81cWyicp9uNo6S=aF$)1W%$zsXj5tY$c=Qyh*NM|IW5tUBG<7nbR5hJ^c1hfI;jv4}z1j)9a!W9>iE& z%B)#EfkLSDmQcs}-KT(nfDaKW9An(ga?efccDF)?%RV8TRiVH4@*}hfV`F1k9m#w5 z?tM^G;+x=c-bwWUOwu(7$!oUo%lUi!rRQ7qte<{6gv_0U&XsaB{K9lR994sX9%<|J zD=x0bXG$sS1K9c82C4trRQ zz89am@ysYPdBV%J6#)ZUt?1am8bkn%ZNVOm3N& z<}`c6P8iiRP;5)Fc5xRkidO8G8xC)jBc2Q%P(R2nApTv+%F_}Ny)a^Gtk$j8UYX_E z2CQowSHiIngqbbqGxD1|wn~Atw(>sc)xnAM*-7+IU~i-Y0Z&j5&~N)?Hri&XK9}>$ z#G=c;i*V2;lbY-NGd2bKyFwNiAot5672pvr@B9Jk@h5^f46c)xaSHj*ByK&mDhHIM3~ z->=9@%@VxdzKBTbV?`I?c{fM>H{Vu`?FRLpyIk|2?RB14Os-<36l1P>qWwGoY_lsnQKe&lg_kEh0e1j!1-ZeoJvra{4 zMQD&moBY!Dq|QKpcoG3PZUU0f8IUYsaE8Q|LXtl-#z>hIaLIGfcE<%Mqd{VdRSW1| z%1qrj_5T4P{J}_qH9Ou(j3 z5>7sLH+_eZpf>Vorm$x*@_-A7$OO(u9yoy*HHJw~Eo;%%S2X^^xLew$!D?68B^atS zw@aHx-L_7Nkyn_M74rK9EQ=bvZWao1&6g;CncB93kM7 zOAB(yV6qwe)fxat#C8w`VA1lgO^;{YN^X2iULO59V4P0EB}W5Ja=!P0Gop*8re))g zn3fW}-wft_>rWPf;efmieLvnxXwei>CX#{oS;{Y-_l5bDvJPHX%IQlzC5vI^2I!PCm>2&&x>X-#hbZJ9(`5FP%q3^lo5&1xLE%cG9 z*;pVmnk05@#KCVtAb;n$VQGya1Z8A}8NTA$vM=>V_RI=%W8z1bjKexRQP%23%e#N1 z*9CpeecToYe6Br*PigWA4hZ7M4tn-~&UpqID!+tpUdecg-;W6I#}0<}IGnh*FT=zn zTq%Y4ARi+}SXG<2v&?h;TR50uqE1Rk!dPKqb+40*HEv#8TO-e2-`>U+8vbw(d+PFd z&U%3FJh5+l8UEepj^n}V5ILs`u|Ix5(xxyrZMYX(g38Sce@lRTKqZncAISeIr#r)B zs(IcQ!`I~C2L|hXN+=kWgz;8Se&oPp#SP9cYTJ+hz32h?F*G?j`D~895z1Q~^h*)t zZ+mx~#K*NagS(Vs}{9-P=;onqX1+z-@oqCDpt$?PfCiU5Bxji5w6H?ge5 zl+CWj4tL{EArtWUt8EK+gZ0!$@ zNx>Q~5>iT%!ZVf>U=WPa3ss|Jw46#wNx}9l>gwv6?~>QKr2Z+zF-{^e;SWBqlm(e> z1-UFozPKf!e4u#c4(fb%E$1L>s+npEiHYP??YBy;a@8QoAq^H^sIWj(BeafiPpw-%rTWcsZ zji#u>lcit#TJselafz^*O{HgLds6#zh7x`9h3ZmrjtqwA-m-z9Vm!WuusdKwR(|4q z?pVid+_DCRVvPW3q8=J4k7`Lw4JmG>(ea-j(4daH*V+Y<^R#!I2C^WRJTQZ;jk9U{ zO_aPoFC271+bfnpAR__t$-3^>GVDfEaeWh4m*`9Ji)TyPiuE z-cO?V>#^%T3Y^g->S0>c>cWzMBdTAw6BP$0gSY77Sr-%@nzPFDQ5}qKq9*ck13q4i=gM(}at^iomc%fZcRE|A&>q(MX`(*Y(in9eiTsLQ?Dy;amfCJnQfwxsakWy?_aFa$`cO1$S8LeQ z+`3C4CeAhV#mq@EFofrNY@IQbRqwUBbm+qltL zNs^Brn=-yJ z>OvJ-tx*Q^uVDcahF!LLw@Oi`(cQwXWeueH10< zd&7mIzg^9;C(2S}NR+WxRiYlOqlrA~FQi1K_w9K--B=jipI#$-}SG}bTBm~l1NSf(rhgk zsd-n>-*gEDCfli3gwuioeek*k>6)IU@|d2zpAVAof9mMDx^ho=gocIHk%+YDHu32T z3%5F+>`)w)QQLVjkp@)9#l#_eW$k z|8)0L5uQ>pVI3Ka7F8<8(pbBY6d@_AjQhc@oW5 zzw;}J19-Pc{QcR0*kABY>vWib8uNjB6TSt`r=sDX158DR3`$K$1k$CMC<+{@Gpms! z0TO>Zx%dl|mEJ~ORMpB^u(!o1>%WpaEK|DP{Zh^)jg%`y5%h4yd|z-rFCNcXm4SfJ zq3(X=P3*_CaXYgscy(P!fr&C*%6CN(A~vr`^|ksUiiF3Xm`Ya3E2 z22qi4CL)lbybOu}0bsfWa?#&pgq)bjP}W2IjR?leJp@2Y{uta!L0&3{j1yJ-VB+Nv zvk){oBbk(E2_w;UQwzVUgd0^-G~iDO?Qf#do4P;&4S9<)xcPy67|cVt$XP?G%rTNO z42pTa_xXlny8}Lc+yoW2t;mCcO~6R*htTe<(Y+kit&(P`ZR3j}#Y!La@$s2wqOgaq zi>EUlCT-5?HQVM6TA)e(ey&Um@~c}&GZF%JaY%rBqk%gF?Z!j7`U^n2Gu3}@jSOen zb%DpDWoW}$co}6()WeI0V zG_P@r?>l zaJe(u#QTvU78T->U&7tvZ=CGX@%k`NescSwKVXw&`&;|$e!+GbV{rrJ0R?Wp#k5ky zEtN|X>1yk412z7t&MrK3hU?#gM|ETQgl)R?T^2dZy(@0m%6VS+2unZ@*+w_Zxh9Wl;{j4wqgxGpx^_5!bUi5j!irD4 z1Lfu(OpJr=UTa zOz2rhC6`S3+v&mkJgQC?s>0#WGvZB?-SjYxTloQ zYl$aD!s|S^Rl7o(@Z}4tj`aB%I*VVBc%-wLtt}Lh`$roqxx50wvB$C}mN~5vIR`Ii z-5DW@q3yogPC-gSf_b_w+Bw9D6Is06t#}U!XO$KSK+iR^XAl3>i&T)H15Y#6*W}=# zd-#a*L?l`Y&Z;Q*CAZ!DqGv{anZZa(%t~|`z1%1n;3>Hl`aP9M{4%*{p#SLk5I%Ot z9hv%Jj09vs5yb^XmQ>I%qDa<(8qWiWGQ#Dr59Hy+^;_kDU!3-{tgP(h$;mfRqD8Ep z5Vob^h4%ONPbtgu5%^`zfmucipx;>Saqd`ueRU28;uWQhyP?*V2%-gc%PD-`SXx%k z@(;=a5Ta*0w{N2!pn~!jpKaPB+CQ=Xl}~1jWZB&W46*$dL`}f%1po?~z;uqr4!M7s z;6_nW^Zg?96S{dt|0FtaW*{4Zx|f2ziOEyvJ257Jwv>8xWZvKlAJ=nJY~B-Z(2Gea z?<95Wb%ak5bQGQ8g_H$f97Kraib; zxTGeHDRnS%?O+%U!n}V!6ZkoVQ-}plp}3Ll{{27h@RI;uM7Fx{07}Mb-s1n`C!;=+ zA(b@rW^OUwlgRgxe8TWNH-v}G>%yiUQPu;a6Q!W)%I?gn@|8EDJ37xVHLqxjAh^An z{8eD#NGI#{9xH6%a(cl3g$uWe0{;}Xkcwt#f%;R8JT3I4o7`~K2+1^Tm^YhC*luI!~5T|BmDNuTR|13EYr*kEp^PGDEOsU>YP_eO8R-%pE9mzyX_I1*`in40awK zb3j=@OOZDvEx|C5IW=Mh)(Zrw^Bwcuu1;5Am>kn@OI-TQH|sWvF;J&~s2mnqYlgzs35ax@ z^tz8`JnLtgR#Z2d_cYvoTQ_y;oSr2VS{p>4Vuld}5tQgwzOE{9@n}cc&iM8g17*AO z@@6uv>*zjW?UnD&RW zA=mkPdy4-CW$)q+$*>GiHa#^p)gDBG>X2#p1K80=_;rLfhQ5Da$+ecVs_T5iB4s=0 zwNgDK_Goy5zzwG{BFYmn&l2z`QiC7Lwxp1_xB3hbMmJ&{2 zHDMBBh^+jM7D_jxw|{>$XuDeIFCG9Rm>pdW7@c`SL0=O$wd%=1bnDU zG*T*$h=|Y~KF6*?9N*u$bH~yqZ|}y{)O|%DuO{vg%)c9Ng_92WBXF`NnK+h*YrMvh4-F?0mzt`!NmKFzMlqtC3# zq1P_x3@~ij&aIKXl02N3PMBK#r7^_!A;07Svk^lNA4@l(k?^^)P4sm2%cW_+YousgAH*m?9PQV|g@y@% zpyN@oQ)3U9VO$`GsC>1UU5td3HALoH;gv3TQe%QIk(z+U#1UY|0&DhahR@WGAHiY9 zZbzGCGxbie{v@6ce6}moQ++F)6Mr3N&W9VY+NtGASI!v(UfCKYp%TvOD+J7d2PM62 zn0ZP)`u-@kw6Oem`(PV+D(;y~8gHCo%Y zi{{8eE66b^mzv+&@+( zAGgXxyyrfn{8U2ufzXYaLC;Qr6V#G6c%WQ8pc`U$o~&7P-E9sJZ9XM+TiUQLZ;F&P z@+4D!s@l-R^I7>keq2p!=XDT9wZe`kukf|f&iJ-^+S(EZcN0&VvXbURu&lB+0H|;2 z0VtAoIXKV(LnyCEjzJ}EGmqI7Bc`-++4`llwZJgp^M=V@G6@y;=n05Rv~qOypw{~| zqprqyF&k6CABt#_9?>Uk=#s%{O;&f8Vj!0LG`-_~H1AB;7JP@kmWXvr3tnb|Z1VpK z4znWdu>di)@G0Qinvq%EU^Uj*3-TnaXyS(Abmz5i3*prcD=A)0GeENm5kCVe*Yjl( z+Ei^%$ip*Zq-Zt^iZ*wrI_Av;5CLv53pqWhR1^KY!9Su>nia40PjjxAE~4@U{g^jT z6~`Lr&4HI*xlM92$s;5YUy3W7x&cuC!2@~TclWTKpbnq_&}PWvxQRM|4#_sgXv8~n z|86?97V|s>YU5ZE!Io^K&Ur!gNlMe2)PzMsK?B2@Lz&s-sPHo*JV2{rs~r+o)%e}{ z+&5T>z`jf++jA+6?O@xKS!&nv4*kkWyNo5FG+}#M(y2~SV=R3UdmfgM67IjM$A8~1 zeh2(CveRHlO#d2`7T#W;gkPH=I_WrGQUWy3b4Ak7fz`X*G+kp#+_SWSI3GJVH<1P0 zz&eLHNG@Tv_@Tw&NI383{6>*%P{#ymx1508S47&~tQ3NM;{xlx3TVlOkM}ZhENgjv zh_L4pS`056M82s-;sb%3Ya3O_2lT?oUUl&woM*DrPS%9D7fXmeJ4IH3A^!am#7BfR{N; zii(;51?ius;zL0z*E^yTR)X{U0|I^e=#bxBo-c^Y!@GB3Z=H4? zgmZIweo&eI5WDYFOa*>_gQW|DOo0PkvURdjB-vGY(%o{_$k?c89%;xn&tgexG9I&W zvT)1%W3ZsML4Lc)f`SVpGr@0I-+`#gj2^}7N_4=6l+40Ln4UT^oL``C0+;k15P7Lv z`8jSqbFVUG;d9D*_T>nuSUi)}kE9#*4M&X1xc|}|{J>6D!*5stW@V<9`>0e?QmR0+ zcfrc5rnAiT>(oZ5#F|fHe^p~@_MHcaiI@M11OJEX_Wg~tfQ}d#Y?K3bnZkE<@>`IX zK^#jGhv6AsNd7FsXEq<1Hyf3>&1_h_eM>%((QGg>%yLhV z_#_4PiZi*L0!#KC_64I%jHl<3{!7r+U!z z2#_81Fd9K2b>6JRF;9>ox z`%vr^A3kGU1Vm3RP-&lrNw?BIF)J(hJn1yASPuo%KuijW2!){DAF=;wq`*<9L&9@? zeKeu(IKX#2Va$L22BhqzX=!P1?dXIRCd<1La*;FkB+inL8|a)tu$ywUvht# z5de9xG(2Usm(XUUJ{(OQ;0ukVMskSEA%z?goK2C6I5e$&lq(3H#iF*!dyPM;O|5b4 zc*#P|>^xb>j}yHE2@ac0r7cNum7rD3Cp8!~+nRx3D66}VoI^#W&(}G0e}ZtTLWi=H zmCBwM7B=Vk{i8V4?-QcAfUtzWA64ZjZcolguF}Km5wlpYPrKx&5Pk{>j$tkgK}esx z{wAA*oVD$~!UG3Gb1skkr@*yY>e^y{?8PWA=m7AdFfAG4L+d^Zl=E~@na1gmfBaLn z;S(e`HB>4TT;Wc*pa#~+nsy%W=PdzOoW zpP}EvxVG6_7&A?r*O0gnd9c_dUitB#y%OL^wkXIWbJ)4`oe@dD{MDlT=58lhO;aPhyu@;XPr_*H@R-PTM*NGlfr9bUJR&TJkt;-48Q|AR78NaOgXwPv*HynUtyq z^FAm51>ctxOdUrBm#~V_(RbG|BZ7_Tq37?>od9(_Z`Dh|vHAJ86Di5b)q!1T(Wv&0 zj$>d91}|*gsF)f%1LgRcMmXhgi%-kWcQaQb?uO@G3YA3!*v(#yvBdQpfkny*L|qw0FmDeO zon?;fzz%FhSC^z)pSg}c!Xa&nver%Ya~W&m#C0pM9kb^*fftw&)Y`0l+;TU{qO?wzS+3u*IC9p~;-FPi4V`^E-wWo2hH7iyz$#7KSY{o{wC(y{v9Ie$ zs<1XN_mP?Svs!oN#uDoifrbPY{T7q-`ROSowJhXjO70)w-M5XXYzcT#V%Bbmq;bY& zB@RC8c0JQ{3Acv*{Q0SiD(?x`6K?yTvp_%B9}W}=QL%_eYhP##LTY-*AWxUZd*n>7f^l!(0f5LC? z?Z4CJ7;UbWnHG!_Rsa4`q-txpf713DK2DZ;%W|fg8C4R)<0`dBEeFMG zCx+F4j`a6#)+tgBw1G9Is-J;ZeHiJHNTD+|A1O80KlNG~!cgCmpxUELCRi0{vBX&XWz_YpD?j<%jwUo6x2uzQ zoHVjDFzuGO@B6d-Rf^}6zVV3<)0rbX3pFZ5nBFALZ71B#4 zWj9TW@P=434Z{YS4hJ~^&&YWlABbpz5w$M+%kw^vS@Cd^gwp)EQd4Ek(Q&ZzgwG8* z9kbMgf7~dkAv;SWD`(cMsT-_Z#{Q-yu%0kg*x;UJlg!yaz{F3rWUl+1R8qb-Lg}A} z)=Dn(il3p-sjtZk<73q{{4z;I@n$cIDjC);%0F?={@?h3k(>s@!EK&Ir zzgDm&<*!EMrv@%J2c}k+pF4FAemb&m$?g{-+f&f6FN@invrlww{AF|CIK}P0s!Mk2 z$&-X#T%lA?gNBI0sP2Snl=ZAAk1LyCaXLQ#UmZY%F z^dYW_!6f3o~!=CDzVb$82uz9gRP$TWAt=F2s{&nwybTB-r zA(Dkelf8~DT{Y2)I?iaNXn$A{^gyXV4J?H3pPoje6#1LvBFl@~tjTqaBNQHvl8rKp z*-BzxrQJshVD00I>61P6sr-itenk08)wWIaer25o7xyt$ zN*%FWI5H`2`5e-ux={Di@7j5UJG#2Y-ELSWy^KyOLuOW~dFk2ap9yf5KdaY}mD@`F z6shFWG;P1hOc!}_*V?;I#lHYcpnwK}a^Xdc=Om&7@IX)x^?(#{K2CkAPjhWR_~ZnHpigDYk|Y91rfhQv52I_VCT*)8TJ}R2o-h02Cod(<`sd=dNduHz!VIi?U#`Uaky!tiufNrMtuPC!i=!OA5WoW$ZxC(EyZ z7kw8uFV4)p#jn30&uEI;OiJ^ovZ%k~W}w16SrB5^Neyo>#o~3V!xH&8=TmTS^kdD7 zk!)y^UUPg=QW9snV6DK2FiIyR!ameK59jfvC)r5|0H-;!4MUn?UkgmMgU8m5yRO z6bV)8>+~F+n(sAh!F0mN4j%pMEd0aNIy`3}_15|zE2=HqXjs{bZlz2l9WUec(Ir^q zx@b><&4EQCnEd6U{6x{VYmWABITC{sH3ovB)gyZfXMM?HYHG|f=r2xsD>O+y`Oe*I zUvIW{yl4iG25~54Fo+Ma=`|xxe$}{Pr+9DHBSQ=JiA}!*XzgqWL0Kz-qgsfBB&)m{ z_}{GL!lCrwxJ7D15j2Gk>~(0uP<)i7Z&9q}ExCxf@g#v6&s?jPJsdLnc03Oj=EHl^ zSALS%U$b+vH_dhHVSpIswdImh3z$W@Hehuf8m%@pnBWUhZPcM~CI;1EB&Zl4x=g|4 zaD~aHX-$H|2vQDvV#HTZgbXEltN>?;UJyv86VYh&0^?Tb=^7Hzy zlaD#3%{AKL%O890fEj*@^F_d^Om@CVHaT#0z&hb|S#n*WUAG}>rJUo6Mzjgf)yd-6UAz)em)gm9R2~0zA;JTGc>08@BAT)#mA_!jieW z6Az>QURckmyKlHB!2sNt?p4&xGO46fvtbRqmp6(P zm}JTgoE#iQhL%U`VLE0lQG#~m)M#8xi{QK;Xgeq4$XgRQ7DPaF%hNG<8MhQGhjIbf zI5?=}I~);26xm6L`Hl4TGdwdKBP}QEM(1MLAMwV;Ha3Z5;RTtc(Z^}At?zDbS~#n# z@;;fr#;#tUI#`+Z`dA1AXGb*aUx?~t%) zXgZA-)r}>8rjRuyOX#2ZBZ6Crh$8PP4*6ge^1@vG)fk7|;532%wxR@sd@myIFT&2@ z$J!Eg1AI|iKz8`p3NdkCw9ej%J|mI#N;%-vafVeXex0LV&F3W|!@K1ZO&;M%oT;u| zR0%;e%jJ={Whvf&1oaobR>FA*X;T6~5-b|@alR{qT!g+@n5V*pRN|XkC7z>ObsGgo z6A$F4HmqDjEt}uhyV1@V2!9Z6;V~^!NB>kgh>V@Jm1GZAH>I{b>C!;o>TZ+65BHpzNk5TH@6hYl^^N{g0G!P=+pLu`7EN$Gf32L2Td z;^UVyUl9Kz2n%>?YQOnwCxXZ<4`W%$e##aq>(Qa33}`T7&ClytZ@>%lpw>-9+ zSVBOi5F>r;De73XBUnNuh~EForj7d{GAgTo3g>T*ur0N|jah3<+Ih z>B92~iz4E23tpL^rMs0b@uFya{lPnKj4q!)WPKkvI7aDX2`w7!3BGVSIoWv@c>&vK z-))}D$h!{15#F;h)z-3oJuwQb%#4hh_v_f~%v^iRVx?*)_i?DA7rk|%-jtcCsSTwS zjgxw(ad-=ZdY2!0j_%LO_c{D(ot@c%^?y$NB>qjutiA*_ngi? z^>0IxIYloTRW*UqRXb&uJPu7OycQevdv;0(H&Dn%u7dvDv0`M9&?M#t`^74`rb$ z=bMksdUJ;RHJWCU2<6+}7M{s%SL{zW-BkzPPxciti;?ZFz2SR*xi*!k{Y7+u5=i>G zQlvk7FQ|M!`c;}Y`}C?o`wa_EZ=`^CC!2#VHRe1*|2D2|Z+a*8d`(6I|Hql8Kp%zt z6&K8d_`5WMi>=ljnKK{1+}3SnpT`dN--~{jI-qVJtP!MX33*ZkW{nN@c9A(K0l*bL z*{&qnepW9a#7TVN0w~N48D^ixArSy{@#hiJQBP3W!ODxF>{;I-kT7!7UC}hxlw)>y zMDij}fiEYHQw5`KYpHaX-Oqad$r6QQ(IF_)`LIdogdX@3Ps43Oy0d&BFlG{zh0=BX3vGCQ%lzOIy*vmjsIacD$#&kz*Cy|yEw?bA zS;#}e5k56uOmnhgLqK|ZdP9@v+}O~a?-1>jR8=gG(}sjYbCv5}l7k9S8_X2H@{>w; zcaWOnQqhm%-#D$#Xo^asZe=c*v0`MF*~2^;-lehlB~F;Juos7sVo7JR-C-RGe9FGVJWTVM=}*ne zcwhUQTNwHC|00W_$Y4{d9{k~dqU`*oJ|{W`kc$BII{B)r_Jkd794uF9!hZamy)LlB zOXh?~|GM>IGuv-m?_vIr$@==b+hoH5o}K}qNS{6m9EV>y-y|dv*wPc*`%RY88dcJ^ zoCLMq`$us0q^BLyh9X86HNPrr8D(u}qhU~{xh$QMVr=*cz;jT0mi52M@ZU%ANgbMj z$e9b2<_*gE*znaCrTMR9HlZ{Rsk4WsW8yn#8xn3UiWV zm!h--GB|CC=6}cu?boJ&oN#z2)}?5HK)rOz<5qWo%p-uG2=7b(t&76eo2QiI1*mge zV~o%~7Zm(0&RCLD0)$sN0fIub$au@!C4fe5e|Hk5384SKQ`2~(mTwA}nq$sK4hoq3 zLNdJ%x!k%yc(WmlS`Xy0Fd9u^w7JqCbJ%9>3o zPQNW&78M`~&2)Yg~& zR5Gjmlb>lyp$zjb-0|0M;L_OkoNpu<;c7slMt1vuOfPhft)Go(O0`+xEHj9w?=MwBBV z^Erf9fX-iK_v8W-oZYycax^dc7X+3c|J(+Z@!vtR@0q<%BJ^!|80TLh zg8L|=Jlo8!PcN=8f|2yu@RFaCK~~PE9)wa`<6vDWr{siFBCI}|5swD+^tyVlJJ9Bw zrlhv?<5a?9Sam7>V^Xg<0X&`}Wo1TFIMv&f`XPw27+q4|a8l#PRGsZhOHZv&^#ZCa z=?;B)wP#sbX&1KRg-ep%i~BmqB}HDKh7dYSXK&8A9$7iL=lR0`OP-ul)8n+CD!)kS zN|>9I^9^hu#oNrS_f}WP>#%9T=4`754Xvbs^J66IfKYx;-AG72=&Lyesce=8uCxs7 z(%tb)O;QFw7>pI)dnQqR8;Qd!^fXFK>J($CM&Dj{o&s{r(>tw8pej*9ArXJ9C8G6x zdOqs*?-^AYB7--{d$`9ElOmo7JfRO#4o2qie|4VCLX0i|iG*T@zA?ORqmskAk@S2g z_B}99_ZfNw!a32Y%Xh!e4oaZ!lz-4{l8kmkFtN40ZENK;u*F-Uc3*FS6>{56!-u0R zfE7ziUD4t`?j`bF$jYOL;t)%|1a0q zurNZ6fb-x-WV-ao)q6oVGf;!LbAFvcHzjqAv2y$V#4XC<#Kgh0N%Qo!o9#e+xpr|; zGmLS+XWyj%^4C}>(dXVw26~*uJBx`1&(fyyj0^^Hp2ol{2K#&p_d3!RE>}9C-Q#0Q z_wiMB5AnXB%*>a9s_L6HMb^#F!kn5+y3?O8DMP%eh|bR)I?&Kk5`E~gK3mBQHS>5? zg(gPeH#~|7O9sRdr?5Qht*AXstaxLf*2M@$F=j&G*YUg*AfmiEqPvqzchmPd#IRqyLAF`z0 zUuq{dhVXTGkNpOasLq-vB|}632TO~Z1dNl7Z_iAY<@OiQ5kK*3kFJ)j!!SsoPws6M zOdg(2<;cORgykAeOpxtd>rJb4v;!Q9sg+~) zf9W3%FWtR8I*XV~+j>ipeCB6fk1)ISQ2mE>4d7rw1<#?DR9^$QwCIe^IWR-$V^M2R z>5>)=elheeR?y9tTB^I*h?XMVG28Fm2_YtYr8hO-+OoCUI>67068`l}o~W7%gE*>p zyreSxG1g|>Btq@fSPCxo5Cg<$8b_i-Nx%_(T3^ipX51cLCD)V;nhX6->r9e?+No_ zSi{xXPA!^=tSz&FkyM#LfC*E}^m|E@>ZD`g=-MRXV!M>4>5tIq){>-}HehEihQMi+ z&j!Y0=aY*>%Vv_c%~iVlLR5qsqGLO3`&~kPlye)bPg(x#3Km^sW>EaK+ffMhjlKEik^rI4|) zYSOhyk!mB4GcEmNlM*C1N94i(tyqC2d;j6N2Gqs??O}autkn72AIe=^{t*&E&p_gN zv;p5$2AaE)9T{Gjlvy&{T7(b4n|=_1 zx;pWW>X$d-jlmP(<2&)RP!qbwH_j%PvWfWleyAj7=jd~0wq%(d92y>;+g~gjYN=9@ zBZS#m&#dU5wBIffSB{8+RSDb{+7z#V!EEH($ZBvM`*vTYc0W(0iVmbCXoGBjPb7*c zaB*@(U6_8v8d;WtT-Ip3mBtd7I6k~+B@HmwCTzcT?BQaXo{@>URMv7dSIA5pP}a1H zze+w;!!FI-vI@ytz>~gb5|S=Zfred)M}yq~e}PQ``WO{^4@w%m0y!*s0+gXq|;jF)1Ytca7eA5*@^UQ6c8mCcEZP&@z3L zhgx7oNa4&ov~X}lI{z+gO%&T>bHCq>dTqt-YqN+>!f(_^Nm)Lp?oxzoM^!Yi90t3( zx@y^R9u3ugr^J!(?5MIY@<3;jm{HkXlo{1B)3Ti83!J-*tu*aq z+T429$=oHm*=zbU`Ce-JiDpT(QBxZbEH^Cd+}QQA+<^npj0e&2f2b=8mYi5@REMLQ zU&y!eKCzH8h!J*=?5D&B5fe)7CN^=?(@ObpKJx>F#4sgC`(X?}?+zc6BfYzZmJX|< z)=eVlLI{`#+9IxWbxOE(!6;B!k1kKFrk)kB&OMo^0Ks?~Vy|P3O63A%CUq^U zCkntjQGY>uEMQcSK4Uwl=nep&5#d=3xDlf1>6!IU7Cw*b?RWdbJb#9I3hGHwh=_@6 z%C#GwR~G!GV-}rbN-v9VMykkXnzh@-UzK~;?+WcR|w#!^4PU?Spvcm`njJ1F`-HTHlIX>@;ikP`${BiB>cj>uo2>qAj z&qc3zW5oz-=+>0H4p_6bK)i~2N66w0;;IBPeO%c(&Y-~`t z!hyXThsX0)Yc2nji4rH-Zw=Z19scqAS&SICE{ZDqb8Ur2q@H|{jg=F(2Tf*HmUDE$ zp>3T?b;-h7|GGuT!U|eb!^D_uHzUB}hM!4=X<&UHfL3m7t3nzHR0Pxow3$v;ktR>- zd-APy#_mdBUq!}xs{iR;Eh-cw92fTvMmPzq)tqQrBcx0*_1(OUktMI7z=Rw40Z2pc zWDwrC!nyi}5g*6%uiuS^zbZMt*4K3N%7Z2VuoIA{d&&P|sOFFhqox>O{-Ya(>4~|6 z_QdR7=PtKO06Hhxpc!ZI{Cz7CzspZius*coq4dw7-skl}9cnF$r5|kNzvaRB7tI3q zR)}Q9!C=(KPvu*ca_On5Uxml3t5-wLpXdeY_U&_RsZsN<{C;l9mjr64+P_qqKSJg+ z`PY&Dw-x$2t7+}lGS|{2{TE8p>4C~`>e^iSqn&eZEmrF?85_yt8eDUewi(9_E z)ZQODm1s6@iGWd%tJ2w8^QA>KJ{p$iOTAR%sd2fiUb50w{D<_*{xP8L60EV^JkA{p z9Q4x96_jDye87pMIiSL!0Wd0hHf=F^P#nQ8aMd(2|L1z4qfWgQCVmgE1rYVqs=LFY zuOqd_#Kgt!g;G8hM6PI4?oSu>4R0(#5O^K#~=n_%YD$bi6>P&(T z-@5$Z3qnUjPbCL)=aKZohCEAWtPJHnYbxoQIi;$D!Er$_1ALLLGm4GLc9U#ZJih@; zk+yaN@hG`Q*<}+<=(H7D`jz9)ev!FMo|hOHbJGmkwu4)W&bp9=Em3%zF?s3qVP~Om z4S_Tg)gpXYutwMw?}PI3Scojm6Vj21cs_&wBPp{x0(<1duidah`EvKB1^rAiLn(?x zntv;b8$bJzA{q>AD!h6Rc*-y>8MOd&k);r@DPEk|$be_qQoLS<>Us*+O_VZv2#tIt z_GrgcsEV?qR3((*;_p{#V2mYUEfwyXL|6Xmucge5&uZB)IuO26 zHm(Q56TGcx=F=T(3sNgnia}A08}h>RVqfZ&Gp1=#4vkwFYSLj%*b{mGa#?XnO>S+n zJt;;dOOoO)0aG$i30Z4<3(v-?c`I<-_%PLFkuPevShQ-rRPD}qpLQJHegDJ9{VYX} zi_|?Gkr%8+Vawlpz&?jBgvIxr6(ROm$&8_ZGtI|wZF+J5-F5+*?H=~;`>(cRr_d#x zLmx}dIr2?sJMm&SugMwMP%PJCKJJ+AfB|tG8TAaw_o9z3bUOUN&TeI#&)+Ll8~5v| z)n|`Y+cHvieTtH)04v#xLcV8xknw|k!ABs9t11xB#j_t3_-KM0Ky$0KJWvsfCM1UGY^cv{C0SvQ+VT+ zZ|YlYVOfGFStc<3iJ8vAiTEjH{RtTTBpjh5dL=*2iZANSNLMlLEfC6*!P>I zk@?eQ8*-g_IFY3ye7`9v#!(ZA8(Sh0aLvu)@^$PW(9HGS_!++B&jHHEFDmSA_~tga zeX7SNR%I-VPMIkwXSM^j7llhF-QT?BGTmb>S-Rm{SdT?;G| zF*1mfT|H%h`QW1r!f0Ch*C{JmfH28|EM8P-zC^GKmi21h3h}W+oz^F+%9TyG@$gW_ zjK93XTe2Ir$uUwpX@3nKe7R+Y6?-WvpOdx1{cXznj9q|Z+s(=OaH@_lgSpW%Rb7FC zB$~(Si;>ci_(ObD4paSl|Ql)e@660=9ijaAI4S*2FcccJW2?4LvL^q0$Gx_hdN>nX_F zsOK5nyJqECgNLmh@|vw_lslTU<`?JZfOS~S)?6&Gzdnwg{XmYF51(3*Dt(IibCdoF zVg&Oje^zUG-jiS=P6txXki~lIWb4Jh)7}U<(vijMX(y8zgwQ^6Ys=bPm|Ho(Ss}+0 zOM0-i!crf&E55`{$Z|fhSmH~98BYG#2nP5o%D>Ca)BAe&$EBH2jR1A$>g7hf{PV6& ziew!u;%`GEGpz?1l`3P#mLlI}SH6#LdY&xAFsPSrI7JW&k2`Q(|EKQ)fFAv1=qJzr z_S|e>>UG9TiLbjipr)O3qk}2kdoCVzjCbSx{WR$gNXVzhG>W^e3tbmYKWkx8uR=pZ zgC-CGlHwgI<1DLm-Yy3}ICw!LIc}lHx6+ajik9oYDA)7xtsum+nq_ zF}*lx7T4vnOTSurr2=Q-NYqtzIbg!-wI?T*JX_0>MF5`jJ1C)yo5S<2|;i*l`f`v%Zb6erOA^ zII)-ayQ2A7qvm%ok7G2LGF(!SHNRPsJfj+cJr&JY@xXHATwm_WXjSxk9EMljG2I7!A7LJ+ihrSW;T*zc?V9SZ*cG+DU34cMe_U&B0$ zOMITG8BT;B5{A;!h4x6OM1 zIS_9^B!`gp<;$0ikqbGtPCSi5cxC|0#2y@{C6zd}T|$K{F4AD>zwCaTpW{?ncuI;m zA?KS{emgKu6WpjO`bY#mP|5lPKC_cAa^7){_5rC^5AZ+`3;QVX_PMTPZWn*&v#UGz zVTwk2QqNxZtHP@2B>KccZA{`LB=2-(U_MeG@zL89&RotVU?#lk6p%VL&JoM0;kB5i zbDdMG^0ha+FO?L$ntYYHm=UMr1s`=~`uaPfneCgjAkejS?TrG@+v_Z&sI9`;=(W&4 zC)Qa?a#m!~`80qf5L0f!y}OmNre1|vre7B%3bw}yX@?au)Sr~C->NKY1>R~|k2X%q zLc-svMit+nW}}|raiexdo}A$1(Gp=L4I1U zPsU`^A{Zd|MnHO(;j<13kY+s5V zxiNN@-EF6YzFK50DwLnDR|Ea?MUwnB!l#Fn>*^-w z?I##$qm&U@rrAhL^=Xt!Ht6^ms@Y`vk9Zlx#M%@j%WxB`U44_-&FtR z>h7Sp#h`uT``P}jbw$mPaejbmH|S4E`c(o6vy70Zm@l#62hZO|Vn0&NN?V6dc164F z`>4O)r}$*I-i=mftD6*;=3!RGuT^DHPiW#iG^;JXlJD^TLHuUtiVb3Ax-x^mq3A*8 z-!Va2W{--BMt67eS@p%4*ERaJdwwyK5~svYT|NKpXZ_QghKn{!uUN6T3Uvv~GOJR| z&^;1Ehjx-%REmFWRt52}M(fI-pw_hJCsp7718QxFsaxd$$u4CKw@@iviQPUN`HVbX z9z70c`CeA(p5+ZbWZZY9cPz18Ei{ zl-gA$7*Oiruc^7IsM@c=W(hxg5BhXav4h1cl2APDMz>1Rnx}MiREkw}=_i2A)61IO z9J@yNda4U$5w(Sd+q(W-rt8@8UD&&2gk&BoKoj_Oi4_MLYk2jETch5pX(WW3p}IJN z5l`ncq#8$eRMPVWVJVXeN~eKZAL^y9}4bDxS|Yb01-PQbV^sv-sgv44eshbYUnUWT{OZ;bt<) za6+fqjO-c3?W|VwlkJBFl$8CB*73xdfa@{)81HL7QSylY# z;E6NMOzy|a4%labr@9R3ZZaqo^_Rl9SSmZV(`1K#&4EXhCm4x|vQui_i&O0%Uk4MV zrBt6-;>9<=@$EXWO&7x12|MXHiyQGX&CVu&$#9*W`FNh@+nP3$&XiofwJy1>;ZU9X zDXc{Qlo?O!8#%jbrhtetio$kv09zw<#kG2BUJPuhb7e90HM~Fe3%qMg2yg0g1H#do0k89Faq$v%9kg0&jjNJ&>e~`?ToR4`O6w*H z@`E#tKJ*~xE{L9(0i)P~Gn>^!k-iVd+E3O6>D8lr*G3Thv?T3xm|x%b1R{Ci)W2>C zm^;DFrfRJ&>L}fxSs>i+Ycz>cI`~`0kIpFMmFY??2v= zI2i7>KKvr^8?f^@k=_T~+)+8af$7n`Srg_;FIfHMt{6p`*%OK7AF@}7J*V-Lr_?|B z>E9ZE3^O9w9Z=*deRv)ZpJLy%)9Y-4k%Y+I&t7KB_8KLhx$YCkyb&q{GFjQj7=HU_ z&U?aKvf`}uth~)`sm=aqX$Q>$t_>a$*+1`xXo7?!lsY>3gtDVKe_4ig4)rApF( z--lO*HabPo*2(yRVVJ2Yj5cxYnp2+Q^-1qlm|Q!TZhG#*eDxu@Iy5pUJgf5bWz2al zesAxHMgVind6pU77r6;FZ#e~BTK)s+y(>a?==+t5LqUH}YiI1AL>&Fx2_y?R#tXUn zH1LT@4pMgGBdh@}AW<~}G}4Q-70~K3R0_$}-E+cjNf#=bGqzbT>#x+=e+Wl4UNM3o zv*2?$G!Tq72-|j`EaY8E<4(ugOl1Bl8Dqhn4sYq@57xcy$`VvU>g*4C{6q>FPlh)D z#i2K;gWgcasL(Zwvu&HFW#2yxf+xiNw)*HqwbT#B@qGx}w3_jC=;Y(t`sTX17lYUc*5+n5efRWdbws>X6I<51 zqR6;w&3orN*g6&5Y`79O3@-yL?5(mz+k67tsFhpA{yTI3k}W-kZ^#)DzhpnpZn>ye2IzIb3TpVCkOCx{KfJ%$RKD00(_iZ zGTj9Y?1nQ4{Alr;M%h#_w;}Q2x8FU+W#!|hKrK_-y=r=f&Fru9geRdrJDl_ipZD~W zV~l>M<9X9|_A~zSIlv$3pweId&vEqQ4>R+keGuumvib1rL|^p6#w3n|K zPE^{9YGrm4mzx?Y^~b6S=)K`<(%m8pgIMx^9+mXJ`xsG$&ujBHt1MY%Q@kj_A^ zGSv^PZ?y8%NolwCVWlhn_J##XBC%3u;xpAKPO8hzyX=NQLXo-U0G7m-71(XzlCDnm z<`kPdRXJSTG!V=b9(kO%1i_qEQ7Q?+D1tC%MW`maBllOaX^S~Jxfkd!7xkWZ1NC$6Y=M9C~^e0 z#tiT!O>Rn03uWO73I>2-*ece7pWvpDgp?NfSYqn_z)7HhUwopCQ89q*3?^is zPD(ni@W{Z5y2B1lWp7R&T~|C;!cO02pB~*PdG1;%v{#<|ZW;G1V3}ag{5{QI&i^5{ z6N9KU%UwWHzceSUe#`OtuSCZ&$6taf)? zwj9IR(yZ&de@{l0zFbms#+#vLLN19ky*H$b?3VczEjid1(t-R|#dGfsTxhGYP=XP1 z1*wl`X<`J%P77!~R`RV>wx6OU%H(UJg24g}Ch0D;#e_uncONeKlt;l&iGniysOy@V z8lyj(^6ln-ZuK8f0bh}JTX{auUzZ0f_Giw{Zrj5|cYtBrhQm(kMA5;Ie&xofLo)-G zs*dZ3j;cRr*?+8gJnv%;R{T1%Jh$HRxWeiVy4vc#Ye!Gd%-Gh>A*z*wByPus$S?ms z9p*m|`5%8&$>NY+?~{>2Xax?L(%Q|75=1$pk+`jwI^vh$1f@?bqQ2EA7J?8P;g#1A zem>F~6c?g@_?6j0=XN*z?t|q7{P;&ZUs2Kt{#8|^M(gci&_a_j(up;N4v(YDvv;^0 z`EyiVdDRTCvjtx$$`NtS;$Z)YfQkC`M}bP0}%q`~oULE(K7x5cSX>)c9YR~}vT)>c)S zSazMJF6&@}p8(Fx2q`0AU-UMgEQdn@kO8rm%L_~u?P)B%nQe+7ncpO6uq~g1e_XEG zyr6`maVNd<$o=$^;jo+ExnplxktF7xXBTxRA}*--umdqJiMoh2hd-e}v&w)3u39^{ zWBrjt$*q}BQob2$qbWmXDOSau|H5fTsUttpn)`0-=H|wHo4c^b;vy?C*2!3V0$Tog zZjTaQ9LZW zKhAbV%R^2x&T(gwBN8uFJfOTFyZxq!5qf#k-z8?4_o%W3%R3TzaqD|0Lr-K zjt4&LhL$IL(V_NJY5nS(8&9N9evh!y%OH~bQNNtE86NM)rtN)#j@#09KV#>Km7ide zi}UwOok(B2R3iB*YNo>YHogPXz`E07bL#&%I{x<$?$@YE-+}U+5nnoP^}j<)p#TNj zGBl|43uW+n*|;>C7u_qd50tyykU5UsFt`W9JPPlDlaf+?uo@pa@4sdML_ha3{bA!;`4(`9zlve|% zmx$0DRNGFq^vO4SQG4D)+eBAZJ)Yf~Pv5MRKIQb2<&yL0!`y*Z>68=RxKh2GzB0m9 zzQ9_cO6|-oEy;|1`D{<=j3a5Abwkp0Ir8<)5ALQ2T@#2-_ms=`aC#({Kp!(ZeJK^1 zUkUNI2#2am5qXc-`tP=&v-18HiX6=G8KR)LOMi^J$sRJraab0^3-Zl30bs3}UP76R zk4mqNv%#J_=ZXuuiD87y?U@&M7$mkvrgd`c-1hPrOntR#-xFdlw>-Ce;@j^o$H>-0 zqAItMiJ=TD$qYwB4t36hA)a+#6L}rm2^Yi_y*{Ib`S{CUT=m~Hqugs7P7k6YCJpFn z3GU>KocV7HH`JQN*XJHAu-S)Q9o0VbzMMY{A%cED6O{5jlqqrRW>fRJ7%|OJ2*_nD zP#3z8d}vAXo&IbQ(atF$b>n6B1LuEIh6mlM52xy{V3XFRY!GJY23kGThD2w41T8)VBV%8Cv$;V~Dz;Yw@{*{uy=I`ek_sn`u8JwTve@ zJb#w?d_)(`<4Hbr^FkDAMYSnVW;noI^F7Sss-^Y(07WMP~;zS1Etc%T*pDKNsDivU5Wi*3v z8XYM|#dE&hZddn|$;2}s1Vs@0iGVD^Xo^aDImO=nNW)Fky@;zT7TXBv%Bw+zRYhvj z7?p!D0+VSe5_&46ZQ@1eKd(=l%m=*b69dlPU#X?fs&`Ore%66#WEWQO$X#uqVD8p0 z5L_NMMO;qbV3c$G5KYbe0A8GFj8cQCLD(Fk%A7~k9jHKzApaxyXSXz?NC|KvQ@AfQ zHXQV6-PF+YMVl0B^o|+jeV*MQpkF!^O@0gjXOwR!cy%gwfp4=;-^(whr5!0oAZBxJ zTHde9%VeUE9jFE58}m|)P-b>pgsG{_eI8IFQCm`EkYIsDfFntGlEkxS_y*`^nHT*n1$ zRWp^_SbDD4nB29x}KR5AMs+MN<67#RD+@c0R%JzVkq_df@>1TtRZ(N7oY+?WLjlCW&uv67wZ{6z z9p2WIBe)MC#2(HvM`P3UB0)OKtzx1}61;u5jp7mJl%z&5cE&T=YJ*7n5yCnHUcU8u z+bJdMf>83-b&?nHJC+74&w}I+^P3G$qlYTBshT-rgek^_r5=ifPXt_%YRsRh;|2Xo zG7e2BtF33`q5yp@XBQ4r@q`j_^XGA)k0|6JlFEt+M+Mes7GF`AE$=w@3ViY{T}~2c z3l&z!Xk#4s`KJ(T*?Fv@jfYMrrr%vic*5wPT_`V-FR{zTE^?Y0>1%gpGr;lR2&&=# z`0n&GGife_PWti?DS5w}z}==`u6}-_>;hhFGiOm*{)bmJ0)htpozKkfc^nPuRoR-Q z>G->!3iQwnwXhoEAv<>W_aR!ipI~rgQ_6nKqzmo02ua#eV46%4xxQV^z@a2zqGq6>Dn-`;}@0Ke(=?WjcPwzWX*4lUEZX=>5A&liS$HVw8I?}aO3rZ z6I+A4C)Z91-PdB%Tw*u1-uF8R9dTAgmm4$WmE}rcP3EbrfEhDu?`%13TL~tvQMPHN zu$S;M-i-+;3Tpb=2=s}{mgQP?&Gh2%k~3^#=09{1)O_v*zA-`0Vod z6z@4c5>x@cmaYjc&}V%%)2JxDQ;N~;7rK~MieG9=u$BM0f;)}N1Rre%l1pIX7fXLr z#WyA^6$YGZ#HUn&7yz9(1X9Hi+a$phVm$ke&@SMd=Y7far{|BUdHZn_86^)%A@@mFuyohEJfw}3w-6a=EgSzpX$}9h~;iSRF=8f zyh?E)N*|BDq zthQ)ftwd|r|hJm z-S&xgRy-o!O+CtTbj%dm6jseNtNbH{(A_r_XSYXC{yZWeO+s^MkC;gMZZ3-+*v2~`N4xr*y^t? z?q52`sHjsH{_RhM1NzhhT33dXOCVX)80ozYND{XnLX5PjtN3t6Ik$n@3xKcK9?kaW zV&97!ETVsmTDAAOyqPuh&Io^G9Qq@*Ldo{{t@K7C2&{wOHYGM%Tqpn{e-L=QTB+Y| zcle&xm@qsvyee~BhM}`8;699xji%jc>f&pc)zDHt7lMlCQ?*zSTjB`d+U-UFn44G4 zZx|^SL{h*#=OHCvaq`7TuH10nF|nL~pA3(5*L?BK`faAKgaRnoGIFZ~47dJG7z!U+|`5$bA1jBQ&>3{h4H1e%M zFka1LOTaD^Q#-}<%!q}OVecieDZ{#{J4fNVXs6Pg)5js8MridMG}0`>6uW2|U9P}3 z$#(6sxl_`04WS55!kV7o7xs_y#4>al?uyPGmoT3d^!QIcHF3Il?aIlBHIcjV>gq_G zGTZ|+YQh2Hh5l(v9ulVyS8{q)^A2gJrtRC0nc?FBN9Hih(hKXd4)5zWe`kA!^I{YX%qa6A4)M1plV#$?7m*0KebyduYIVzh zcS>J#CQ)pXCGU%VTR}5Ire9cov;A<=Z|PkUmW8z28t3*NGdVQoYLH7XEz4S}a<7cS zpW4S2Swh8e3fAHSaWxxJ-xgAGFDUTAX=2YDV(a`JmA;PCWOuNY#<1Kbbf?kh*kY*9 zefBNWcT19oQ=MJ(^VLuHI9~iZvU|JoPs>geLnW)S!kCt6%54{|-S20%;Ur&C{S!LG z#-MR*%RQRX5*W={mE~t|uj!qUv$CSAZ`VIrCZBy_l2V^s@R?@cAL+Q$y*m_m6j$@R zO?Vg)X3=}mU826Sk?;XSsw5_r$5pv-@Jmz}KjGGe3q`NJU9Lyyviead|S z)+1GTdz>J}-slsku=*RtA_JRrx4VAMO`AkJCLzqf*sY{_)X3pT&+z+Dv&XYe38IzG(NbPkHovwOCwn3?@%VtWU#kC5^2E{t zLo|bIv9Ylq-B_C9Lf`K~t(z5p|94^bFZd%5F1J%o6ghk>0fce)PFtR5oF7Aj(n@1G zUyz<#%GpUu8m_o=99{4=FFEB4-31)Xxm}~cQ7W}^Ai~m~sjKSTyB#bVw!Gf5^|Jcj zCDCMq?&YrpmqsDPX5+AfGpj0wD&h{8@D?F=h*+ik#a3_{1S*060l6i$X4!ZIE0Zj3 z5YmSKv?kM}X6lQNOPZAWBf0mnR^MMK+Bre)lZ&y-3vh1K{!5+ke4-ZT7>Sz~P=;4zjA$<47;2_O5cAqqAUKPog^dPZ zrxraN0M&k=c$7|t$s;eErEk7(-`*WRo$#TZA@c!QWYxpbYYAc}dd=OHnvz~Q{Y<;Dije^!j^#{H{DQA7*4=TJop>Cpf`uHd~ih+HoLlLHDbV-wL?J!G!7NBeUn$!AW60lt9{vWEt>+b6Fr|TjE~po zHhXmG`8~L{c%0;w+uNip`&0e|(BpYlk6o4z(-?B92IKt@;QjFDa@j%lKJ72s|CP#u zp5QjCwuMC96gMzeM?|{YR~Ivj`(Gl5TP8&ODD75`+Hzi|wI{gA1JFd>s#{A6UqJy3z3boTn1xP!kasja{ zs*0kTB}fl%-+EQ9AgfkH%d^uJrRCCzMnn2Q@kURUALl(4>4l;kur33l88V1Fk_dkt zOP6_cB2`_2J<)ugKg>snGfqn053t|-?T^K%Py>^b$4K@+n7f(TEJ@(%{Mqa-?t zQbStiv0_7fcm-~d0(UGNd1g%w;i^Q*S)Ty&R9Lwl)Bi=QFm#E6ba!``z|im?_ukjNp6BJg?^m-HYt4cMoWD8F zZ+wpBN|ft?Z(gB>AMX^XLb=9A?8A?HN&Ow{pjb9s=jX3dW*~O@W@hv#|F-CaNrW{) zyg|3YW_@T5dQjKU(YQ}k*nj|eZERMz1Rln>Ty>DxuaO#-su+;O!5=rztOo57?94?a zVZ^(I(hHtWoU)goa^AUuS&)VS$Gfcf{)kMjhcR(V`vod^$}) zCqot#J$AN`KTM$mSD?fOB1Il=mX{k#x2M#lrd|H`a0>bB_{BAiy3NEzh)9JL>jPpbk6HQ)?c1g0Ixrh`*bkt zv7nSxXU47}!hZ@MwV(zN&c6u!)!KYWQNPo)`R$i?FQ=sJzh(9Re7yWGUoJ7V>3*3p z#mN=s$hj}H^?N<7E7;~b(RO>wQLkktsu-sfO;E2P{X4lcE=)lvLj^3OHE+;jdOlry zH3Q1%_~Zd}!x9{oc^*OA)B1#mQBH;aO=nPwFt0j~MbG7NJ#R#1Q8tx?mV|bzn_i$x z6yw4cTD&4Xnnb!W=jzNeWl@(n{!XKr9@CD>df0BxAVS(9gHE%|+lA$Tkd(znle~o; zvkQW#hue7{a-pTf(@Gnub(cJW!`6z0MMU27@!@4;tBSg@;zC532;Q;9dyJ3LYl1L{ z-;xr)vEw{tlO8pW)DObP^&z6N54LN9$v_30CWIxdioYEeoUlKdvq`l{|M~zkLKy*sV!FkdCrA7Tb2n{P4tV{@FPkMALy+c(wa$+=~)%-~4BuVaL`4{^%= zNxvHbQ%tr-cJiK%=8~#wmRADBSt$m&VyfT-$N)P|`xJu_ zz&`{6-Xn?e`vlA>{j2Sjjvy3H8bTmv_Y|GBlNk;epNgOEfbu+P9dc9W-wHe;=h0_P zdhP>I*u|5hh}-REkjZr;X!%IFGds(^=T|ewj1Sps?eCT|!Ky$JP}@_Q97$6>EWWQ; zZC`e+6QidgN#zyqL6r$XaY~kDRoyy>>&ggY)TxK2$-VtQ9H3>gccB<8xa;4HwkH!Y ztDe5tJh9(*u@USLhypR@#xROMQ89lEO*@1(w9cS~Ijlfuetsjq5Lg`(?Z^F?omzwr zR$YP2R2rbg;f0XkqS7z&4AGN|qdTSc$4s~A zlQPfc1Ylkw{rR3Mks5yt^ORdt3b1EE3Jhk2)<17V1fsGfRI3V40ou>_pbCTKzim~% zpuAFO*{ixrzXOk1fHJl5VU*xZktGc;n*3~g68y6kXeQ5i1tu}S?*}PcGd1K~_KTvp zLz|MRq_j$6E74{sc%wO?jq{Ns?ud~@m4!@;H3WEdkZZ)yrsv6G<3Ek4%|<8)I`**~ z22;^`9;L98VBh$`*Az)2%&x;|PHGpq(VPV%;OB;-*P}7zEmwp7$jPQH2be+|e@kaC z(b#g3)m(d&hyLoNTUNl%(w8)ywtPwTz|>r?38jp_;oa7ZBbvUFQ`QM_XdO1dtRu4e z>mH;@9~h61Ef8B)nbWu;Z@gm4f&Lu-a|zY7q6rYN3P`P;*#9Pk51Sz08zn!B7%x|z zMLX#z)e|v`s^wzlC7Hw&6`Xj_lSEG%JwN9r?^snP$=fkc=j7A*eo7J3eBnkTQT9?Y z{oLj2q(EG!b*-+a_kb6r|A$>I4;D~p;to6Bj!|MA{8+J4WNvMVq^}guZTrk7!lNgf zayL(@9^tpt**NOKW~AD;`^B&fYSzY1Sm7~tp7_|Iz_9ZxR%-UW(wqmUIQO!@RImx- zZvJh&L5$SX+goiRu>YnXtQ2k8CM`%~ZXAj65gFO3ORcnC*tlbxRC0?EM=DZ?5gAX} z{iH{BLu8pTF7egbv+(bO2`m)0uWpheW?2HAaQLXLZyRAt%y-A1bzE4oijy3MJQk2c zDl--0s0lM8!AL+QNz!1bi#~RI_vrCPsWY=~v&b?PYo%t9sC+T%<53fW^2Gm&^WFMr zG}M2G%aNM3_hXk{!Gm$~Loaj0(IviAGuCW1jFR{|@d9e39uB<^njS7`4eoZdkYW#K zIn#Yhx1UL@p?Gql**1P9p{DvBuY+HJU|ar?C)x8AGr7T6>qE~aJl3JAG32iyGi?R3 zr|_yLsBh^{GQ8B0!fl4IpDI7Oupf%05(zU{m3g?)xVd%S^e6CjXzKv(4sDvv@3^BW zd=tWZKf0`NT!h7y&i|W`Uy-(-E(I+NOTy!p;!#iFSRG%~@N#9BxqeDX&)ht}?Mt`$ z-QK8hNESXiPV88zOj7Ph)?+cpAJj_zi2C~9lzq(e6WZY~Og!=2Mt|8ze~-X-x5Hx> z$f%w;c^7|#7spS=mi&LS0Jv};p(>c_z)!>{1&?@=!>p)MH2`U^yD%O-l`oy<9VU5O z3rfzgCIZ;wU5tm_zOHMcCBcysW#d3o+$Zpaw$Wff#Pu!ZkJ(t1j=+ zQyCf!Vj(nyh0hLgjI{5x$uarSfgt4dG3sY0-Z>6fvuRFzE$TgRmH4_8M!^Dn{nL8F zge}qVbdn(}6IktfyJn2_^5%_=ja&hv@Y9Wk>i1rIh$k=B4;v$47+wYICS}QAPD{+6 zYoL#o&AiBULa+A#vX(@|I$B^;dIGefU-&5i zyHN6_1*V5lp9gQwcnL&!%%g4lX0nAZSsmMlQpG$Msa@hJq`WiSg{e{uwyQIo#0uIb zwHGW!H;g|#Y@BJbshBQt&aTa`!Byw8YD8>7x^q+}1Z%vt!=* zW2S0bmA>ShIqQG9C2YU9PbP1G+1oE8j}{MPz>M#0hrV9ol?jUCU7Vg)R%iFcsqSCV zItN98NY#ryAv6bLjpoWaFCo zWfm?D#!jsrqo?t+7~SJsqZ+^=#q29^61bL_aBQzlag9Yr)@kh5suAzLlaQ`HQ0-F* zcqZT5phcUMufGSx#`&RRC^C#|c%X@(?GsdcIdYZbX8nsqtq-0f5$0IGDBID;g+FCB zSkwOrsLtx%liHB{%XDmZkK_5M)9eFst_@`7<0V9(rB7Q8a`8#ovTK|A4nliC&ms*4 z3)vc3_}R4&Hsgo1n)E^`3W#Ed{v(fctDs4+@oy-V1#1sUw3?KHp#TMw&nUMKkp#TH zd4=+pJ$ob@t8=jBi?Khp&AdY=V8(+44F4L%cBW|f5dKs`hJSjby)SrsWX`@Ct-rUo zx~#1H3LJoqPg98^txjKGrxQ5vFOOWlae`88k3X-P^a%$CeQ0#wiZyBT%Bo8om_}{L z4Nxx{P@x^4SBs&NS-H*@|*JR?*GS(cdzfiO(w!VG3(XSx<W;^)=>o zk9jcrb#tXfC?{Q>W~SRs_w$=m#a7h1jacH6_zMFP8T5yX!{kC?+H$<+vxm~8*PFRX znMcOW+8zO)fna5{g-J;prbpxbGMZ(D8CC%zioc_r@MVsF*02*Ti1mU8OEk+3$x>Y` zEjy#mu_|pb9ftNPLKd60$PVVQ$qq&*DBCC7eTn#Vt(@GY;4b$Ld?_MO<+g%=q}r(2 z;*>+jhHJMF^a66_Ufn|m#PU~M`R%xZ+G$+r-!={6m|9YfS)^Pkfgx|D6;F~eGv)oW z<{t9zU_yI;#bK@C=g8)$}8oXN?Gf=)~$dR7op0c=rmxRpj!53}Z`y z3>!raRjsO~Oke_}u;rNsZCgXt;jmRqtp2hsUW{Mr^dr`!a{R1>U=nj3n|X*cnQ`%K zPZeCzui*xL>7Nikp zOX;H%TN^b|{!EIqTWh04bWc2?2b}%MO&xP`eOfzrwx~C0)bKrX+lZ*W{%o}Z9c=l1 zE7?d9Kw_VcZR@rDxG@DhRKeiLLBCXN?&l^jhLOhAwqbE{3TnsPlOjo#IM6w~S)f-uAQt#5S z`^3#OVCO9gHT#7ih`$o{N`Bm&74L@+A?WyB>l8qKD9~k)%e3D1?_z7q?riwqeW~MT z{2Ny1^ufVjPWp`eQvV5Q0beYTs))0b{~y$*Hg()b$%;JS9KjQ-dvL*O`@0(KPdMNY z)-8DRV-|-`mnI!N9jJY@0Xtaj8kD)%_L6ijs9v!YO58hC^M*##v@!i1ieN7DBZ2wADuHBzrosaRpI@?nG%Bi5&M(zHQq&8!oIL=m2Z(ngH zj9=Hgpm#9T{Y>YKW*Fo`zy=mK4Q&HNSY8TywiAKc%ZJIL$A)RC61#@r2bbtkXq!IF^p=uUW7a zZOy+znC?u89`D?RN@{^;r@zGD@(t9$_xD**SHgI4B3i zFaD(WAxf=&GS5afUaT^>50NB7AjUNyS_cYlXyFgedkm<^qa(!9cdz zA%&r*WshI$m{s_IHejd2R|Tn{h6v_Ix}L>u*`9++bg46T z0=#cUJ841B@ZL8^{_ZS5dmoXW&A!$*4lqbT7&Pg;4df2lS1+$D+|pv zWgry4uiB%JC~$Z1UQ-Z0B1}ps0t^ids053te?rT`GVAM8LMA*QEpG^dFD1l$%)xiz zZ4cfDGej)6!X1SI?-ET$ab8Shc$`^($6Mq%>%iVR7!X>5E2VJFXsJn9v8ZOkQ7rUT zRnY@0Z~p1;k|bE36xvtyHn+UV5)CweKX1=0DRlS$BM1B^^z*-bSq}aJtRKQzM2lkw zGO=-e-4?K8c=JyESt%j$>?Ai203KPZP}h!n6|ijLB!}{lZU)7;{s-#DE(KMdlbl z70SvQl12NKBH?`LOmq>yX1vC&dxWCM9PL2b0X zbw!K!SkP^6hL^W5$+XK4ul-qBENMu6oLBSR+PXmo9Tu6q8sUqohTXnfr}b769?|p- ztjs_?Zn|T2RmcHXWkA-Av-PuSqN$-t+^UxL;0cjG*>xMg@UF+=2M(rtB&MndHytl~ zj06|9XZrVFsOG8UPJUMzIP8e5e{JGv*2`PdU+M->XcCqj+roX4ldkE&9r*btpmBc{ zW8r(kuwaC6D0^*%(tbs|LW6yA&hY3Bn`*__?9T?`ZJk4CB44z%A1SM;PhiWA%?#aV zeHW;?djy}t+yVR@9n2zQ1FIO;SR38cuvtg$^5xCwPs%No02oa!%aay`%IeHm5fE~$X= z6tNJ=k~N)AnBNp>Yw2sL+qY!M5;SH%n`=sso)%;Dg^)fk^L%l%u}^9y#<5+z;IZWmZ-JBXXmb6vmfB0S`3-WNgNdwOYw&@nwJg`dpL9g!P?T9r9<%LH=_&M8&cG>aMNY*TI=r~x&~O%+eIl!&^^G`Nyqf`+_> z1{SYfMoguGe+`4&h5Wx>l*P|*;P2+Hy*kt<*D(3Y+y#+dig&{$|upfWbc?j75P49m_!v;{Q5%caZH*K&}ijH2Ns}&6N z1>?Uygwz@)wL-dP=yS!qMnma7Ex+wZ!?9TZ1@PE+qfZKl_i8xQSVWU#%&-0eHmU** zF=L9|HCo2=b{cUu6YaMNH z0VH`qX4H&Risu!8kGl;}NBmSx@14AB9P!B)WSR}%lO+T*I3gvf(W-wsa;S;GilxrQ zzx3%g;IG*nj2M|uhG^Mqi|L3BYwZWcXHE`E_#}~9>=DLS4iNdkCiJ%+kE4BOPJtB-RFqcIgL$U^|95`r|DNBQ9Dc(FXNo0M znIUlX=ajlR<=?W8V55GH_QVkSi}SpXSX8%TMox`S8kwK>>yW2{T;d5PnRl;@{AWXQ zrqU{|=-xRGfmYT3#<#^T?tO!s2BWzHd+_&{j&3|-nXsJwDj&U`FjrLH!E*l4=ykx} z9r(N5XDn!KZpkgqV`#AjzYHp4ie#q4GFXwnRw!daM*J-!{nx4OdXBi)=^G;KW9TAL z$hTjCMZ}>F>*}x&>lIDT=h=eGNtwIr$hyyrun>+82rv$Vr5DfL%X)Ux+Q!jO(HiH& zTdY+_svqQ>2Jad3+;Dh4ebNx6=QTCQ+J=0wAB|<6_^f~(ub!)EXlI!Y=TJ&=_Isg} zCu2HLHLv9eml06fD)P*M6V)rkCC(o=ADU_mir$nbW;=_{608wQy$eZHRkreKl$~=x zxP1PFmu#PRj+nm>$%8Mw=aH_w^34?tK`o7}Zi=%Ik3P*lHbO@L-!Vv)5v5-?*lw~A z)8>T`=Vld`jEp*?x2aX%FdJQDwPq_okw+1g47&zgnPH?m35xAeJTa5nHop#W_v!@u z2ZK<*?4bMf7H`X>8}!Pjk2K6J^YjtcHJvSE(41nCH-`4gqVls?VTob|;jxK61oFGm zY@b{#H&F?}iYCS8mD^kVxyQtf!9&F60odUwN?tbKZfeA23>qIe>isPaM`tQ6f_tnf zGQ9r4vXJXq5oi`hUK_I}O#z-GP92}Uu+}xwAY6ciPo#&bdx8cWs48U+yv5&!2iDEJo$m!+d!p^JWCzZwX1}NG-x#pB-dbw2^>$iMRM$AE9TWd^Mb1+O06}JGMu`7mZ2R)QmDU?Cv1aO z+zXAz7Ig^>iRvn{iXt!c@v!%V527*d#xm+k*r%M`L7cBp=q8v!3{VW`GTyJ}- zYX#1CuPy)z?o1ZsxDHaN6zxLL)IOvAE$W(kFGz{S>em#51qqYikSvygQ7JSn#I|uN z6JWRWr~tMb+_(07HwavrP0s6XJ;WqpSvaNe59S-%31ku`9Zn{Nux$O%;})U$p>Y&N z2)3ny4Xb$-^1xR`msv-*oMOJa{OC2*`0;kRdhgo{8bRtsGFpG@NL|$vx9?f#Pg_2X z;>*=24P6Qv)SK_zPmN3d5UT(B%^351S(VmB8oJka& zMK$jPY$v=2dd2=3H2%8}@SrLZ`4J8#w1#NChCl9{ zJRJvQ7{QF_{Uh2aIy2e?KcB=W^i7D0nxISb{0}1xVzx!458t{IpLP}~@VWxOVcb_X z3V?!>t?exln>$ovA7n*YW&OoN|Bw&uhOSBFW z30PNpw#AlIXRU%Si}r?XQ-z0wHqi*MKPs>%_9!J}RK=(>O+z&#N+^-i0jJ)<;yc#3 z7|5M30c&pW_fz`t$*1J~o)v_8dKD{#@)FumJvq$3VOm8@TZb@6-R!(@Tw&S%nZlk? zg7b#yb090S9?i-P<|*KCFy}x-YsjXbb#!EAR`+n-<&V6tecQCaWf4bdc5eL^S6N4A|=!C{a>8Z5W?G|K??Z?Jn1YXR#nt6+&XLQG0Eq6#DZ(*3%Z|2pP z8tt~Y7ZJa#{APecx%2D|!5i|T2B6u+EOh^q2A2JwD}j?Aj;;ufX4QhOp;>JsHHMa8 zl3t?mx4)d-Dk`QI8x(G8%>p~{_q*Pwx(6TFpo-%`Ym$}-nHx%MCU~Y6Ip2~v|prXH|kX;DMNmi<>n1M0g99;1Y z&32e*bp>ZYw73#9LQ_#x{#3WnW@Bs$Y!riu?8QHaq+2)i)*y~sX9Rrh|8Il(fGH*l zWl$G|+%vZZT)iq?5_s@G{r!#c>r;GD+QPu=Igcjg$`FD(EuW_G2WR6UIlOqgkT|TD zRzaySzM}mO*0}67CT+Ed~nC zQzNJc{qVAgMCw`5KVf`K`Q2yT|IUQ{w*vs!h|s0{9~QtjV3>crea4U9=3pw#mw++p zHNa26w;wAG2!H}gHgdK4Ma^R*T*o%4qCP@gWvi7yBv{6@uH9mYpa^*U*^|a(v&s@z z0z;HqQ~tH|hDCP};JJ)Slp3YV3!SeS7URTxTQ|gs@BBC=eHDF!-5T2raI;1WOVo5@ zcPmbxy@4bQvFt1>I&LISK1=3r4^`y>$%w`P3ZA8EkI;+$xT=?=R%R7+^tHmPn^wWu zs|pT-D3(5EHkszNKXo5Fw2;@8)-!f6K7qGIjmRooX%$wbZwP#~Vm+SW$i0zs*tG4v z`5X{&2;B6i`0xk7RFr)1)*d||Y_;Jk%B2Iphx!F(NW~a-%k`najau+k@q!~+sa9Hb zB+R!>$SAs0Xr}A zrLe%Y6!2{9=b0ul-Gc*fu9>So`;e$p)Y4AKG**DaOnF+XgulnL?XwVxo)#Dtw=?p< zKlqx_e~lq`=Pc;@{j##mw-(R#Zagu#&0y>Kz?Q?%lPz5It6nv(nTys3M)MOk@598k zVk!mC*y6Nn3i2UVQ~khZ)932>;PO$K$IbKe`WN>b{jdboe4#cw_z9?5Pf zu7(!Ti=S{W6NoW{!5i(zCS5Tl(;3^%uY{hY!Ii`&`;J=?d|I+>jLnA$U-ePRS(^(L z3=|`@t81{X)$B%EH2Jzb(9E@X(}MaJ1J+7gJduI@KB9tcmC^P>j(vUh;tBN#pl%I^ z2IRG$?h~KbNaT1lPVczR5T!^_F~Lh|SLkzx^>r$@gmnDR5_|0zj=QLpF(@3Nw-|~3 z>_jvPKp~omO1mXSoz4#ma)3o$ChBTSowv1~odryVYbPYXP+EGXTr8RT+a=eMPA_D( zsjhrZ+0j;wcG21F;m@hp2i;mUsm*$dsoJmZYfJDCQpFi+($feeMn z-c~yMVXmEVnOC2#%d-~OwMLT`zlriS)kb*z&yZxHRk&d@r|raoeBtvKyVyc16h#F& z0l#Be;{QB-Ssc1PnAPO){(VPwAkqNEmTx2YekRDELLt6`C(|oNrC<{OPeJZ~sg?bw zKx0nHk^3CZeCR1rLYSZnJl1eXW9TycnOx?K@8H=2Drpy_Y*$kOXoiY70vH-vdv@I3 z(@48|;fCPaDAgx3bc;A+PNT1`NrMb>i;AlH&!lr>BGm1hDr}wsXIY_~p)z3!80kU8 zFJym2DAO=F)YUJZ3R=TPg1Wy=*#NfnvK(v@@lL| zE`K4dQ+!-$s1A$0pBY-JlDc-TNE7gyu9UR@Wr%*MF_W510nulpZWJO?CWGS^bO|k1JZyo0oX16;PS`n=3Y1 z7A++R+583|9SCqRC`sHO?;-Mft~WZ97G@&s-Pw9!BUOpabx4XNU+!g#;M-7~r6)LN zvyvX~!uTxMtSmh@m&j2=Nj_1OGg|XzBZYnRSzH~uZ8Y*-3r2z+O>Wvszo^NQOVs0yilfubXf$5^=9N7CL1O8F32E0ScYfEc2owaa07qOWfm$3Z?NOwsB@%A zJqy0WUaGS3&gX_PU&Zl(lI(TYH-JGoU+RDHdhLb2>J>)yKK?cN(lBCAuzAiqB*0v77r{uN1Oz1;;hfH zHz4t3{|sY?kC2pS)~W7F6fWlNH23M0Y`-^&L$Z$imRiE^Ijctw!Sq=dtw1kVxYWi1 z5%DbTt4FZuAA^{S%8R2Kl!n$c)Gxf7x~fPXz_xHX`R4J1#AEh z=ISiQ@}uhby}2{(PA>qGz(=O)^Ap;o$q*JC;8gn z&7r*Rjf44E78QJ-Qc0cyms;Yo%`XNt_0Z<#uh{rk4npdtrjS>IQ%44iWLkx(Vgn5r zGfv<;rTWrX((j4MA|D_HDRgnf&lQg6rR~t4Mk+mfgo!QJyhM14JFhSWP!tl>fM?Yw3=RsGCgWlr+lk2=b|-OHBn+~l8m8aaa{cMo-qy|fFCKQMjMF(M zMj4$O#5P+yT9|!W>B-gh{z9d&k=tB7TZ;l+&1KjO&Fqmm>w~<&=fzsmQ%u-IS`Ru^ zIDj79@-$$D(V1&hXBp5Gms#bcdS^fDu5T|_h5SX4VX@O&RS3`abY%;ubFfhb4efqb zFQ?}Dn2WLBs_OLLA3tg7Vw)>?Om=XKOVJ(v? zU($|}bD|yb)&8sFq-2Bj?^}npcH(d`YUm-0rzm!V>i`sfu33^goG9lE9(Sh*>B=_<*OeeX>&kpaXcMWC*Lnk1^n+A>r=4YQ z7O-*j#IqUYKq8HtXDFSUcbo%n3e5b-Q4_h8t4F{$4R^3m3=RY5tD;HDRg4l;@o(nr zjDIZ(7yXAqgpSZ9FKnnn+3JrIul(ekf3eP@sGKkRLw2`5a^3GQe?b#O@}D8)zZCNx zEJ=Q^HHl-zpc*~(h^I=rodb@Kj>nix9cm_On9P4RDcK{!C_zn+6*1lzy4JO(qZ-1i z(ou8Nsv*x!3}wY1`*t+>I2eWA;?_fxLO>WYPvObm3njLdnYQ>!@;w_I!xA@KK~eci z4@ujh3L@+DGZ#M#uUtV#=-7eDltqQBH-8j28)K6VNd6qL8-|qP_mmX901e(9bkS?( zx%JC74Dl+-1p*k)UF-L1s7RkKc8D_45XQxRcy(uFbc7yV=FaJV_KqO{X3k$ct{<`urEpN zy@aa}IVua`A86Cj4oEbdR2!8yTbxykb#X1({=H!HHF=!ImLYk~I=;cRfX_E_C3*7y z#Lp;UPAQX@c(}42tfr<}SZyS;>6;Gc$20fq{JJqo7dpRfihtsIwn0+{ME4R(b{IB< zr?k0@t7iK2A`dd*kM#r(2<|UQVx5OcCKooU7eKQocRDv&&N;w0CN)!LSKlOjZw=2=zr(iDp9+YO&K{fy7~y{%pIT+5Fw)L3fcqqxD&+!*#28Z*J{Nnj&lT}INI zEHu=4skUH)ggZWuV;--#!~`g(&m4)oD4~4%^&v+5v*0qzal~z^q@zlu zT||n=ld>t(Pw}R;EXct*vTRX@LNGN?s%3_@LfE~lQQ3By;*BSV7I#k8|2!;`akpon zY-V;QYOxV2|GFNezOF)bt7!gqt0cg9)It3h-9B?JG3Cz4||8%kK&|L`hQ|J9Kb8yJX4% zE=;x>)>t)ct`H;f zBw2-1ai?n!sn0a&2iQ2yfH9P-#?wc2r7!P7D&!Z0CqyH>Jw<@8?7MK_jT(nBV9 zx_Uw`EGCSH6$%b{#z)#jXKw9v(gF0b)nc0tXi7hE{;0QT7Y2-8lqqz_s;w<`Ye~L| zuIjvu^&#r4rvFqGnn><1JXy^eeqAD`}N1WA5l$|CYxbABc3nvOcE?M z406_jAFAG6@Xu&2)hq0rUJIIV8`%VoOppTEzPGIZML7?|#|8!T|Q_6YrCA ziqe_Kh2Ytq1i1scz@xHXh`YI^o8bNVh?Ijqvw)HN!KE8c*L1JLTa)(Rz8M+Zjcdn_ zy+IfIzW$Hh(;2Y|W-9{LFt35RJsjQ#2STPSLG@O0__SDlfwNu%8o`bG_EX9GEd*RM zSsN-wrbj+GuN2H&ACZmPWJ_%07pHarzXG!tP2co|9n8k;Z8@DyAv3IMhAZyJe)|fL>xCsu*gcd8k2V1dkO*aE<_EB}KSy+Oa7_nlC&DLP6^HHmJ@)^m^ zpA=I%=lS;{&dQc8Sw)$uWO7EkM&-|xI4yOGf8G%7cXI3@7aLB!PFAf@=pXMlB)5N? zNVQTEQfLK>gv}~NpM>Svzo6Ja*MqK@?ZMdcawwVzIFH{YE-`8(=*#q`eK&J4dPdQc zgUJ{UnuwAfL;;lrDh^HU6kb9ACkY+Cbzh|dHvcTHGi z=!?_L)7n}MnZ}B>k{>=!b%}VK9GdJ^5(7j91Tc9F-G6I?qP`~E10YF?zxwpoBH9Gr zsXl%zHmzHGetz!YQc7EWCZkqKL$BA7Lynpu zm5J$~vbstVo-`p~#1y2wiIHVWRu3QgO3B7+a~_$lLKH2iqCESu+!=40Sw>g{)z!}( z{k~e0Td4^A@MVnRSvR5)VWDEsqfwPMV_>{bA+7dd`NY_P$t1@|SjgPmDywUtm((8md#L+&F}*Q9UspAx$N*o{f_lYBDaenQ}srWu2@RZoTwu4G*vY)cVPo zfjqMzPwAKB8t{g4)AH40VKbA6v>moh1*7G3)ipns7VKhi7RK=CSMH(`hLG5`S;dmD zDLG76>FXR_&uYmn-p@g#*%hjC5jwW4t$N+piHg5l#p{n3a^kE#wAnAlpfuE^962>W zwq&iCchV+yI4|XhQ&1>5n=#pssESGZq0erIpxDGwd(qNgk4!3QA8tAA z(F~@bo28!^KX~hV5vsS_Hcp|TlZ5w{-bVFfwr#yr5glVJnJbbhNGkIyHr!Rg-rQ_$ zQK9rmcC2m%nF+i84%+ynh4|RHdGWAMZPaDwZW%5a)oQ-=11=F5P}p+2%5}Yvfm}Gc zrxbHJ{vr{$s)X=ALKA!FC`NGrZ|FUXXZN*#?IuC*{-mg(1xU&SzxUeMt-jlOxb5~j z9F0KU_9P&)+D_{naS_M(*2(sJoS9;nU;;;1R~+wQBT1>#@dV^3ch+PX0i@o#;_g-l zu~fP6bE)*=EJ8RzV-b$7B}@&O08lyhN@nA7RBgXsYi%;KGxtM-PdNB`o(ax#i8^|X8Zt-Ug5?g>UY)MABY`zHEK)=~7c zAUCb;+Nxi7&_;tL(tgQja@vm8Sik0Pyl!Goh_z%da5{Uzf4?B5&A}fzQZa@x*yc@^ zdZyBZ=HPdoW>YjrK37xth@aa98I>jV5V~N{Y*`zLbF)eYyV*fM+@4u=3-)pC(M?Y7 z&UW68uH6mo^e^QdXjoCcK5W|BFY_KWtQxJn9)Ed9HuP$CFwX0HiHcg6+c;}A;yVJC z_IiBg>Wvw!Yc&?4m_u8E$fi|`^|)~RDricj&WQwkxIrL1=CbEUDpPXA-m4wXftrR} zqwbsvmQKh75`FMVYHYqO(X40NC~#JL9VY!gtbpH7UG>{vPKhv&e*X8JY`!Gq`h&`q z<{s@tTP#YV(N_FLjO(C=d3MvW(U;;Y(;AK%y%#;t^Eh3+pP9v)t3#Akq3bCqbdBD$ppljzo~7VhGGG z$!=58ro@-CmUD@c4#t7X68x9J+n`sTaakR7k z%pfc)Q~0xy$-7;00(;v{UAZvV7(>5!vt7`EYS}Xo>hr7*bVSw&21IQUV8biOP)DmyTa~KuvOCUQL+Bh8LG@L2Z4tGXQ|& z>`T8MR)$b0iI1v`Mf7-~Lyh|>)f5`w@T4WI)0CQ}6Ie+)Me1f3?xq`}s+X3bZc1(9 z0WyI3W@pA9ED6}(cuh70u`cZSXca$8(0`AVe>dBiyM!JEdll- z*|#lq8lIz`$|Op6Gy@9$m_csfZOMW$x^j|7PxTgeKTMdD9gv2snYFl11R)pS&e@)q zY8A~^8W(~Sq+Z1s)0y{rouysywn{ARI65YNO!7C<%zn94+R}(OKBe6o_|*)f!VIA$ zXMHfYbjyy#77~fFX(>^0KD>EJAt6!Z?di~TB%j)JHoCCS;{9;zMPaaQfnR5~@3oTG z^*URV7wXb@zjXJ>b1pC=>*e&k@=)tN2lup=8a3dMzsYB(y5;^l!)vEkN6ce6_wKqb zxYLUppy>u~iOATomrjoMPH9#pI%DCa`@>g=3Zk2euGDQ0?Cl|UIizab$p#ZH;DLKa zZCJk>J4sUvy-t3-74tuAmQBnUz&~$#|8RVC_c_bgucEUNl{&GIx;>?xTM)C?MTci* z7y(GL5T8ukk+;!mbL*uuF=8zkmaYE3pf(r!by`(T-aB*5)~+mNBZXxnDZ>N_YZDw~ z`%`U~i71?<@5oJ*JDJcyq10WK3EgqfQ1-&&g|5%L{h6jA)huC91X9ld$NcigP0Id! zlg&W^nG02*Q_2Nz3YXLLMet>y(fXBocWsSyu>Unb;1FhsNbtrl9gcZ83BGOpD_kONKj2N3SOe$C` z!!Mh7r)|gn6dU}C!6;Y|lm!Zqa3r62^&o0k{Ek*2aK05R%8d9=i0cJrb)oEi;&BY^ zM8)4HBfp_KYh@tGuroS}zrM8Rtu`Qq`XWiH6c8b;>9}<5#VubP=(aVU@x$&`dc#?I z?dF-(vmNaE+6kQ?*7TKww`z0qx0w(11$F0{5;xgpT--Nc1wZ$BQ!IlfuY(^Q9n95Jyv1~^pIe!hws zov<(o&#&#OSP52pZAbgyEWpcN+MB~Z13$4G zo!--m#i+d$C^XJqIl)g_<1S1)Xkjlr0eClo$*hp$hooQW<N^A~pq^|iQNYx}ynf!MOxMx=#YozY- zbEdm`(2GSC1N*%CGs@P2uJ8Tz z4jkwCr$R0#B6NoBJOevTeeS;oUU9IDbnMSg2>74d1X~@M)k{A}Ixk%fE>-_O(!L_9 z?RRT8A-HRCEACocLUBm3qQxDGTXCn*;%>zqiWGM*?t$X&PH~5u|2f|o-N9Y=e1qg2 zWRhg9-+rI{$lf5N!!M7O3px)+T87?u6d7VekGqx6i&cI@(PS$QTH;TWtNypX!jI#0 zIW9R~N=5+N(hhTr2K(1_$``ifWO}Unod{kJ?Hexx4U=FlHPf(yg3}kd zXgsH`_d#{{+@8RC!bR!w45!3i5QL8hET+7SgJ|2`sx%tBH z6xlZyuope2!xeQ|A)wQeR}7MRJYFNp%Zk@UKM9_By9v_y)AG3sY`MW zh4H=F$p#_-_TQlOa5Rp@i*V;>wZ(>trERUw4m>R1Oz6TQ)6UlLUtCsM3rJO5SsAlV zgDbHS)cV0*m2&Pr9*LtI3WSQ6NUKm2o+{N<?t_(66kG(6HB!%1 zmQbt7=;#oOQl6X!73$SgE>Cbbn|ZPZKkl0hKcVbGof3c1Z#}w(=rxbEIO$Ose>yew zJ%|j`5Ungq_;4{9j5X9hz(0(!cGm*=@hM8gTcs1*RYLE#ETTY+YFE~1Fcn+3;0#JW z%(5fU#L!c~`8H`4DA0^c-?v;fUO+_t%{L^jrbiyg&uTgxQHYMM=|^!fP)hrh7C?;P ztiGN|#W;{*lTQN)N57)H=w=!aqA`jUvOxHu51Esy&bC9Adt*Xf5o(fanKI(?VK5=D zZJoDCNPMpl3_%T3JhN1Yt=u(vI)hSybZJhM% zXkoAYc~?^&Aw#tk8vS6=yyrgAy=;Nr5~6k$)6Dn-n`xXE0A&p*SlFN*f=Cs7Q9#Jh zK7vOq2FT~vz-A*`3;3x!|K)-+7-714*Tw+J7Q(2k;4#0rLuCS}5(g_u%Skfs-tXNE zUg|dFh({^POQ+!jG7k1n6AKknhBy1_ADq4x;c{M?2}i#vE<;3d1zR)jLmuqFll$rn_r{{+%AorAhvj)v{u5NY3&6N&?>Fe zJJ&dH24Aun=qbnnRxvRGX1#X2?-&<`7?Zhl#2PhsC(7ec0~!#lX5pnmCS$Yh7A5+-zr1riROntSB_$aj@+;i z#V^W_>llTA?CY_(D-5^cas7o$V%k4pYRmd}&fg4)gkATsDJ~jDULKx3?nvSb72k~X z5gL|rlq@bTnhivsT>Pbp8TyT~bxxHMxQEsD_wZ~wEI0fDRj2-Q(#)*VT#8zn&qhd! zzE8DuY@#7#D`n~q?jUkW+i_25>BBe}>e9%vWQv*!R}{cx^j{s|7C5qC>0Y@YPcm!B zQ-}+q6;5=Y^Iud%!XqknsSCx(%eP)hU0tR{T2HvYl7f8aLCM$vCcPuXJkE;mUGF$5 zIS-5?IX9{LzX6HhOVhJceqvk8I|0#cooNYG(8!qtg-g(gff?Viy07u-hfu*#?5;FO zISaVAdxFSvc6OP53BbC75SGy^i#1~S)MwZgb@slryj=Znyd#6Ll9JxuZ{T!qa8dPG zU}{El=g*&tDW?6AQ|I>SR3`(VO!#2rT<+|wED8isMMcF|DvZl3bDXDbzG-M?BB)7M zSC`;|2~nkwGrI5+?^c*W1uV|^6Az!zxY%i{-#XD%OT!RxIz!C&)2)`ey45NxO!JYI zm;X+|vPCB3BX`<*Yv6g)Y`KFZe%CQGJKELU=Lz=w9TBSa!2V^9fq z$;wPX(ni~ZI|=KZJP?bRW_$i+e|$^GKF4#1Im_3`c(uHfP8XL-DTCZPhF*O37Ci!QiYji0;*?&2Kfdm>ErcXR~1v zen=s{OoMcD7Iz13o%y2_?|EsF=g$bg-K@)ZRxX>(M~kD^IsNme`SqfPBTeX*#Su1{ z^wCaNwsCHi{b z4(_rE1I#Q2Q>#rkIECcdKZ$8E8(YnO^)q5j4@zKs2+wiY|BA;NCDc8lNZA4kYH!B& zAO%B(PyOJjtiNvWcKg1o#rF)oGKD8jJ61H|l!#Dh>-_j;q9iei#qy`br`~GK$Ureh z2Ho^HhJLBq7>WFxA1-_kb-qdciMW9_;oW+ct0lti80A5?%jtW|eR6eyzV^Z2DWqKcO*hbvA zBg&D~$pvMn;;)iklTA50Ll+M%NSiKYPGKnuowK?j}MpGNi z|6Lt8KLOWnALwqge;R(k;*WK$i*K+)ZF9osjJ=9-sWhl7+GCL$mg!G{q}{=hbVm24 zDF4XvH=wwG&iBCXQWVuzok$n`$lkOLCsI&kMoE#3NiN2Ugh>WHVfFbFX~=ifLl}0) z9m^5GS8m8qYdO)K5;FYPQ6~UN4=MiQD?umzZbzid5Y%3)`*6YD88N=Y>aqs;zph>X z)VvZ{`9g32AjqQx!$!>w1PSIO+DDUs)RA!{D)H8P{UT{-oC~p;r+#8DvjzHbzlr<< z|HKG*4=zB(#RSmOeF|TW?ZZY#tEuTx(~f1>F)vip%V6NNoqmh^oydfaj!;FJVqH2f z(KRWemt19qiy-IyP=FB43svuw_DEAAsxc(U6MM^!2JmwPO>@|+2O zX$SIg3PhYXL)ZnCqAIh<=K9k-lT%W94=PQF#0n)Dsg;B_?nSJUyY9%8Wpio^3#Bj3 zUbY5eQp(E8jKQvFtL=_E!ibLC%KdQ3Z=dA9C74ffB|5SMs_jmE_vDKI>i^U>eu=H0}O+=me4Bza`MLNjdaW2&n`pdMin zh|Nf?C7z!1@`=Gyfit-KV``H>6_aTDGi*%ZG*=jtc8moa<`(yl6M*AF>IHYx)UKi! zfGg{gxvx9!{!)lo4GjMgT(97q_CXC9a z=pMKkx$=e8HLU;)Korw{=R7+~Ty#Le>GI{V69uCDf~qmSoY1!~MC0QL@K!CzL8L#B z%$IVvoY(hJ1TkwkSvs}3oxz%L^dE9IE;iwrddN0SFOKPCvVk(XKbO`4(=iyqYGDqG3jf($$vFB7>jrT8L5{ua@!=V1 zd#c!7K|&QFLwX?3kh$NNt=z~8*}i~DAPzNWsq)4`r?y0?vdJg#s@w6)UKWk>_CAjF znFt2es-W^^+unv>cLxvJ%wZBKpWI4;h}ZaVDSMn~$r%&4KvZBHLZ-Y1&i=ignu#X6 zj}Y-japm~a_uR@43`)HPmPikK>V2j1>8?tGCv&eqor6L*pxxM##6k zb+xpogl5|WNM=@RI z7h8=bIZmOag66)kr|AeP?RLkxYF^_L>jq)5m`+8u*RvuF(XFuH`IZu_jscF3X@VV@#`NP%0L;Oh~5@i=!4d3%y zB16}61Z^gYo4cL}j%G}L-r=t!DI-A$XoVyP;lUgk=R0Jb>c#wABHK+rbQVvTwMGAh z*HUJFv&R3IQ0?CkPlzvq-qw|t&bucqp{Kwxq#%KEiiJvp=o=(tChF*-r1bJE-;kJW z4m;RB5ob~}M6T5v5%41QCn|oOE-nEA4qRABQ`1vNb}WGhn>VzK85eh5DQyPmf}gvp zxzYEL0}7K-Z|m-i0P%Tbk!&<|?{9@?66M{d5ST4T-XO*EQP{*DRkkYaj;7_SFh*et zI4v(qbSVmdIS#-h&$x=6n<@QBfVxA(Kh9$@8k@#riJB>gV(OfC07nh!$$Ypg0Lv8)=SfGniXTZ0CU|-f zPQm(AfTkU4QB9Tz#qNi@q-)Q))>S&2+48ud1O}TIG8$& z0?PDC86|F(uuv$jLPb?o3PYC1``f9Cq+jZilEKTKdzlyO!C1o=1S4)4YmgbY{>TH) zaBVEkdd&OvZN^9>IU+X*;2SeDQ(wUQebC>}$N=)dR(Mi1A~1W4{}aD2B)tJq0zW=>H>amRH9OD6UV_l zg_Qq0DkcH@FAbUT*AbROKUV9s5&zl+i$2EuBz0Ljz&u%6sJeXV@e@aKLFnh@F!Tz9 zkl-PT#Q2rtJ+q0CO!^!q)-^Qdazw}*7Eoe~>Lp)Znym&QaGTDepIoM=3z^+kiat;W z=rZQNcKQxGivfJ_U*(AR zSn(FWMI2oIJ)d87`mo-gjqzjZ82xH#%0M2oi-G`b?I}?-TAohJlEM}*zf*$L@-ZP4hT$E!wuz8L5Na}<_hl}fHA!Mpd`@gRc;}JEtKS)_smdjj=ds`p zX9(UxD~*rm)~PZ3J~{wW=juQ&;0U|>6}a@K6T3eQV+GO~h2UOUyRwZ=>pQh;j`Ke) z^?!Fbq8eep(PkRhbkfu0hvbwJyTDI5R`L)L@qo7>FE+|M}gDhL%3v$0CTtLEhFP;`(oSj~U@O zZmei`n)PPO2@1Ch+VXoC9Mfg*xHGY~w@+Ss+T|z7Ha$W1cFx&@d8;g%chha~nG1QC z1_q}x0`Ku0%}L-&&>5N(+|^)wl}z)8fvLuh>xvrJ12u&AI+Xsll+XLJJIb$D$~z7( zyAE}jpYGT9h8VIFtNgBiUQ9}24f#I}_z(WkGGz1qau)Y^+NnGux;zg^t$mM*lG+V1 zLEPmxbfXJ^>HvgLd|^H5C1dp0kDBbZCHBkoKh>{h@e#(sr2kIsD2i89oG1wW3w3q zuF#ffG4vcnq$n{5!1_H-n4RP4h|=bv7qwyfxT6TMm@;5Mn4}0@LR><^7K)bdM z7m*s~Ij{%;%tX)->poGznWnlQpT#0&tDRzBNtSs1I4Jrr_HZ+Y@w~0QY z4n84gPeBo~EZW>B#dGdU7v!#Lc%Qzgq@a7GdZi`EZTxmw8mMLOWA?*#&6@4=ouWkQpKN0T7p!*c*nWfY*;txV<-QPCBbd z2MgAFt2zIA39wzM0Tr4nGWFxelrn0?x-QS#3PK$fFeyb?$3C3wTjBwva$S@<*7<0H z1y&`#zxTcZ0jBVX0XjUFbi!5mj+R8Hqj!G+n_<;hjGRV;-$FQx0TA{qF$6>bG@u=- z(WKaw?@}SoRvOwmCy^n#e#9fvKh(JXc*R?x!C{S^ z0Wh%Jqti-6<>Sx$7VR%EP!P?+M1TA4yV6yaH^JtFw7-A=(Vs_zaFy6P3ybQma{NWt z!5e*V;O2B3z8evu{L~9H(ClO}=w=jg#F~iKJYwhfb9aG6WoGMRK|}%^_UL4}BjRc9 z-`%gZb|TQ={uKs6>N;0&<8*)WphikX+;BK6AJ>qiHw{D~Hqm+|qytJA5sQz@#Eh#SQ{^b57tQv#I4fro#-+cno?BN$Bi&93zHy3DJOvKDO&tj4BfwB-|H=Y7ZvOKj1b+>TJTAM2CGSiM)xj6A#O<HuiC}m}P{cA}$6tizlZK^j(KF8&J-_>%Lz&^~&l$)LVlQ`Fs2b3z%m1{+ zj%7H1x3+LoH}3?Mqys43&sHmpc47OY@Nqvi+Gj>miW}%lvH&cd-y*j-ZOPoPocS?i zKW#IZpDfmM+sv|ll|(6|5cN{0@Vhgfadw3=q0*q~j{0<6h3teDZm$O@ zI^gNq%>9OQA(hKjJ_L;kLwTy9OGHpsWPjh+N^*X~NR5w5>cYtS8x5K&<2pAG(%(P& zWmxku504$Lp)*D7e%|jM`tj4~oFp*A1tAh8&bgm{y!w*DJVI_@bN(~Y<~UtKZl4V$ zf`xkC{Hg56rItn=zsD<0pai2Nu^{rmJ75HZM8#b24` zVc8P!Znq~6AM;NiO#SHj%E*B9Y>u9DAhA$yN(sKFNbT8`W6IFLyJH0Y)gjgrlu_GA zBm?H82a(zuQ0o=%XKRBYHOSH4iO`St_g-); z{DXBUl8+Ai#<$ zStuY9UXC)Le(=o{-CKc4F1-5Voh+7GOdL0+jQj>a2&}BIa)OAs3B>~cDi(g*-i|}O zk2DYez>E~2p=yj{q{vd?!|3e&ykEb5B^h^}5PxlZ z`eXQE}&2i|WIb~3tBWePauMQaELIeAZr-e!=1u_1JF z50?HnmO|{Omg0|TLYbNx8rG|5Z&)Wyiw-2Uv>KP422PxNU)^cCX45Xl9Q;07bgSew zHp&iMm|I#ZkOAh>IC%W2NI_AQsKmdT#MYKbq)4*Hs4%tzF&(xX1Rns%=>vpTfKRbRRip0 zV1)7L7G=>#qDTvy+BjYgHgAyx3N+}q9OLdQ0`=fom^o(%h_r_r+GV$^?Y!w~f8j@` zHgj`^WZ|&4QICHL7}=>8G%_%UKbYd*OdmlU%>0(yS%Al!LCc{hqPokL%KG&lW$5b? zt!Uk1m?m$uavYa!{JN>P?Y8n}P)14=3`9@oS}kHmDH0jd_g60R^0p@P00^&zs> zM80T^+oh75EP2rM(L4&?`l3A2ylv?ZaXb}kH9k1L#7LjTR4ouErZ`O#abK!AnG zhC_$R?HwM1{x2}Igu`%_D-6zNN#L}QExiAoB5+UgxKC4mMcu&rkJF|L-$M}f&hHOL z+U)J0{7ZSPJr~qs<5Ov#E|}ZqjONZ8bk6-3o$8Kiw7>N1XF(Yn_fS z^&x*HkVTHW2{N(~QDK=fgo>5s?Wi}D0dnS%A{uYi8GM3dxbMsneKNki+ZENYTyd7y zhdjPRfCNsV#_DXz<|}21l%C1M^n@#Nq$;h`OUfRS%u}CbL^PtOKi*=qr*0+F_o(p~ zb$=1#qEf`4Jv^spT;VvnvJx1wy_76w|7=Elc8D7uR&b-)A)Lh|6QH^diykI8;^^yL zBO&IuZ!0=GJ?-gL&KJ47;_*n+3`sFZGdo@OR0|2?>oB9K8zOY4Zd>1i)*~+CJmHr= zc;f{>8-V27<^J>E{L75=|Lw?Gm;MI|PiP-dv7-Op?9#7f;Ce`T6;T*I|CAv(LnOfH zSd@tV+muN04MH2<*Pq)tQh->Qd?%lh>~%|eKsp>iSlV%HGz`z+4V45qbo<3BIQ&Wn z5Qd!StPo^HC!%1LxRu0XEGa*y3dhV22_ps#0*R!w-gN~oS5Yxt>|341+vzqAuiP%P z3A@{A$wL49)Ec=un11)#9+362LHQza+Pp{cRY3e{0}CxvR+MU3?&RbI^}BP1o{mmh zP+l;AthT0>mK4)I1GxrD%}WU?6y!_*(`CNzd|Wvj_Pt#}k_>4s3xe;Yh!PZ~+@!r`C{!Ppvlo4g3q=x}H6drZh+gRj>LQF`=@^4yoJLeev#^ zF{q1B&nk#&3{9pk(;pwfF?ylzdw5k%HJ;aPV^d_ddEp34t zU)m|y(Y8P7U49GLVkRkHnK7OlkW$jXi{;vdQ>R0Mi7BV+&9^LVTo9xr5Er>l1Msae zUV-RvcfPMuG?2M(nmxR&A33A+exsBvK%w{A*3s%zp$YfNu+{JTb{?g;o0{3$sVEVe z54=)d-{)1_2W>w;5)U44LptD}mEWQdOmPn(98V;~1sqx6+82QI?YObbtF)^j%>Brlo7%VhpkJcl zE&V&LmMIW2{x@5h9KYu+;-*iS7O;pC$MbmCN_+0C(ofXqq9wEGp{{w#H^&QX*GO0j zz=xj^?4Oui_M)_6uN)<_k5}t;TUxwnDWjL=N$&o>gpySJV;`{GE~BwFrMZ~b;s9~g z2?g+D($duokSi&^%(sZ&YUlz*tMNgLQVSIY|}xxaHqos2bd2d>Tnps zftrzgNnbT%zuf>C3BU!@W~Y(NP4PVvWGHvU2uSgHKHGaQ)$oQRIbg!8yv~k>1Dv$p zkr6u4`v33)cO8E?N(cXC;sME5oTS1z=phW=5z9UFi~3v6JozBX^PF$8h>I&5CX@H} zPVbKW03_JQ4KpQN6@G#RE69Xgu{jE&4}z!TwitG5+@vtAQs$lvs~HFpK*M&QJmsbC7#nC_?gh9VrP1@ zLZnc>;xf}w4c}$xWtPBE%O!>dAaa&)3Jbs{7NmPQ#AZ=d%$Q4F^T{JnBn<_ z!Jq5s%uKtQ)yu*eBqlO!ge9%1mWR*>rl3APyul~ zfCyFWW0wGGqQ5;T$EIen`>P2vYT91V(O@v8zcRY=GE20*kO9VR0tlLPId^5`#@al6_im)%a zVZ`j1msrB8FCwiEQM|mqfd9o*C1GO7%Opw)8?1Lp20Ap1<^QAeuptMexkcWJ2;Iy9}rC{t|@VSxM(6l z7%WzSrQ)r=xFiH9&Waz}Vkv0wN{0{`vaWMX@#ka*+=zG=nm4^HoPbSks4K|dw%(8@ zn##>hlS)$tn~sl4`+t=?cD&04UQJVH`C~V_(q`%t0TDA9`{)36y6YCcEs6u| zEtXI})-@?d)k9G=!|>NvLutm0A*N2IS?0ulL_=EJK?_#rg+f)QGG@c3R9@P2s=Q z<*pHpu3MNj|Ehz7B2&w&DX<{_Pqp30b=dmQzygO1m+QQDqS-L>_0w>#Z zaKXe@-}E%Mz3o@O+)ymSXOGWYBitQrLXLMOdT#e#o@gDm{YYjVk@+7F?0vp}!_tT4 zGLsf+_x1_L70we=q8P;eR3i=TTpHP52NV87eab=!?F`;@|2MYl|FrFaU|?hq9OV6g zGI8Svsv&@$9}S1qDF zM*w^~26Dj*+ag(+Kt;U(NFdz9S>@dafY>%%6f6}JrS|xOBFTc25oAT&R3$T!lbmgd ziPR&tK*xDqRPjcK`}@gbj)?8AFONHeQ@ze7^>f28o!{)O-qk+40@64+z>mUfpZb1S ztK;qE-h@`8T8r~|mZ+}9SUR1Ch6ZZD8v+7gI0^py9M4~>=J(6=D)LQ9JhwROv_361 zbL`Zq56dnSL*g%6;=^k%Cu_s=)xSo2e?JKAzXSDS{MeBde~4T5I;ud8?${GOn`%Re ze}SR8gzVR+z4wF~EvsCj1Isvh=J)WbtpHxGQx3m#wEM|0G1~0A-wb9jm0nF7@F)`b z)6{pL*KgAt>s)ki%DAv*J_XQaRS;cD%}w!^@t(N;ajOon3{`7O7#1 z&S1hM-o})G?IUu6Mg9|~-Z5gneJ)KxeH;Wyc^;x8hE0f zfzx2IVbT>4C_U3$Rh7;DUFvrLU9P>J+Mbi?uoK0A93OPDn=e8Uzi+ljJ4AjVn*1RW zu1+7DYHa2v5<4??J8~#S34#TQ*_!n|ywW~668macbXI#UUI{1Qjv8M>xHZ~TzsFtE{0+3E~r(%6d;OV%fx!_%nuwg9UbY&GrsXcmAmdH&TLKYAudVbg-_<9bDrmJ}l!WxXwrAf)Z-&%C&_ph`URyxW*S7WbNb-3Eg542Sfj$l=!%xKk_;Yc}8y& zW=&5CDT&(Ifo4Vm8PnHb50^{%X2&n}<;`ZLk+SuZOFw0qv2Dr)ZFvU`I7+9eO4kOQ z1u^EVXIf6t{ZcJlTdtlP?EkH?{Oy4yTxL0lAOA_X2)tJA{eBEqN(cJ+$aqn1_@du3 z`!LGJ4DgmTq@#d4>XD_m+P`KY1(nadhXhP=u#ai&wRv8Sf6-pCbBjE`ve4X^DlOXAK*%0}TV1jbzkbrftW7FWQ!O8r|=SQa9D zyNsnOfaXBt`7I8);(bko`Cnu1z(!d;_r_m!OB%lp&pwo=tl3a8{rNTYzbLHZ3<%2t zB`I1oXW{o3YSes)nmA%t=FTd=CPu=XO3TS*?&$I0Z}&rGJi?WH040DOTFzAd3>9%EV>^CK<*&sc3%7_^SLBB!%Q+n-pvm0dK@#1+DW z8B^Hau9)SyOB_&eD}Px^-+UuFSGKip*0eumo)}A~FQA+y!i0f=QRDmg#qD$%{w{Ia zd+pIcr_L&_2Mkl%@3X&F7SK61 zn2H3&Qi$!$H|yFrOB+KeU;c(&?D@a!wVX}nN|L}PE%<3wwj45(4~}tp!CUJfT2g=l zRbVge+1p^sr<|FYnSBqjkV5G5J|mHuF8ni0$b2_kq3xm@CSe0WtV> z9Z7t~gMZl(1cnN&5F**)4>*NRA=hj`h~U~3jXnl)z1I+^Hdgy$OKnRlfAoCmYkPVzOS)aMFYJ5U;_0gT&yLAancp%5uD$-x>_RMeTYM0z4yt^0f8 zfU#I4XwCdK_TnQp*w7Zot8khvG}APvMY57;K)F)J5A8sQX*^Zi*G{?RUHoTP5-sMp zT;bvtq9h;g(w`jLiX0RVLnG{z%B#eSQCku0lww#)zPm4*6Ky$L=&d0l3l|4Nk9kBO zu~{(=ujLWhY06%Dp^skoe{)F6-d#@H2w*2IL3-&fEi<*nks^ERiSAwWm>4L-6vs2J zd=3P`!pIlr8>leLgLS3~2OY_;u^P9P%=f!egVDnA07{jztWQA&&-)ZZx9@;NZI9gy zJ4T8z+uOY#@SaUkD+|&*5ip}=@@F+CMh$AeyX_HxtVpgWkb(A*8$t>edD(r}#No!o z3D!wFL;5!+V(*tVW zL)Yfe7~`UIMa$S%LRp5xfyPSHV)2zw-+jQMP|G&{v4r;&679z6u(hpqDXgo8>7%TS zUFSIz&yM=`NGfY^;99gIeq$dWD$EjdWT;s;IUk?w_!>3_qxdbDcwoL6;-vQ7 z8=iVo^J<9gn_(c<8+A<$CZ1_v?DgGudO&}G4sg=hw)W8|xXYC;>MyJLzj-;fKq_cYBW6svAPezZmn?}XE4$3Yc*MHzM`%9UsDX^ zm@R{N6!!yL=>2zzx_n^M(v7^|m(cCt7CSqKBmx&3^RY5%Zp`>MRBWd*Koe0lj>b@^ zXOuPh%DYiV|ELx(ssQ7MBeiBX3?j@OitN2X3SFN6AyAqAO`z`T`NG1AuS<4!XMAG- zaWR_qxu(uJn4O5pvS%|Dt|}Yu$@}Q;eCr`PctRNlyn5V;Uz!KS&)WUodF{|`oSBo2 zy>1+|A;>%7$!&h6G<+f0+QFrKAt5C(pF7oe&hhIMinQ43BVh3JEpN-y>x|~}yucSh zzu5|8VisKyy(?R!_q-^zJio4C)@ik<2rAO?n7oLZ@s&r9Y4H$n`4HGx_D^k2UzK}; zk(?TSk6i!${{Ich8F(odNJxt7-tc@7Ff$^Ezbj4EkA+Hs;pHT58I6KS3ex5Xcj|GZ z2mO+VgtS?TFJI#_0rUhB00`eJ0qkD`b#%SSekrqD?CrBfGJw>-Q3ePFK%BXOak~og zs$zO_z{j0X0;)gN`hZAoAOSTAebIG(=hGku3e9u* z_%UJGea%-*Lxax2|8Z$2pYplneW3xzY$T{$5S(yYMA1*fIo$SgdiJ99FG;`H|AFED zs#v^&y#!v|SER@1AF*oL=W^^~I{QWaUlhRF<7#p2a<%Eew(iG;QEi6L zV1bwcNtbW1TR?bc_smzhzU921lz>)RbCA%!S^x=NJ`5>kYlb#g!rz|~z|=Ge*8-JS zE)~!2#@%V+IcZ#2g?VH8FI)NYav~&RSwSYgyT+73H2rCU$)V)oo6C5csbdUjBrR6Uy55f-v zl*FG9xJ^c>R`$PDLHU-*m)MqYCdeBl?@|ImJ3>bjzP4Molp=4$tL?BAEV98wNwqD{ zZz+pRe;AS65RCTT5|8#`y|*yvz~GEDceW6VocO*W(wL#HSSKo8O_qgyC6*pjMR{pN za%!o&Q(f)%vN!}+k|C>T3W@9$avZ7=;L5)Gwb3@2jia>p0-GZf2VeY6QC&)yW;XOy znRv)q9lZ7p?Fg<(3xzgXYuY3Gs5_i|XfiUr;j z7S&r+^oMuPtS|!c#ESps z9X5ca?93GQurRx$4c{GW%16=3&%?#{d*m)ighI#hkFkrT?I04l9 zsteZHf4~tPgVnfD^8-9P3-c(aJc2k=?;2kvNl#L^ySpedoBCpXAZ_Hch9w((zvF z^9y0Wq}q3NVvL|dPUOPREr#43KRjh@VL0_)niL)Cofu4$8fbo)xpI8vPkI%eaDxu^ zSr**lfaDE_1gm+Ax@;-{ud6V&vR?DvZTQs(L4INIE+;Dj$zM$BuQWF0<~>|4k|Dc| zl>jUNMDcrW8`Vr^1>ILw!$7lgyugQZe}6yr0fc0BSu}R{R=<-~w?*9$@*z!)DKk?a zxwjXYLZ!#2NlNe(&FqD5Cq)3IyR4J{yzZ_Y779{|nhF2k6i=-WfjH|yG`YxDMh8gJ z?W1a`gagL+B7$#5Bz46gNQfYG6d+?B4|yyRG5lSE94;@=2wAHUJL5<|1`Wd0{{_g7 zp!#PHYaLz6nils@wJCgkP3<}+N?sKe2dSfBH2$t7lavBt*t%l4BVG<^4_}DAj0|1p zWZ-=;Lzm=a*e|j}qJRQdrl@Y}7*G~Unn~cfwf+Sec+C5>S@-5_Dc?SuP~Q~?9qThe zjhS@_CrX(ro{+Z;;@fyoiej{bjh&sw;H5W!d9G5QW$pFl)_k^H=aW2~5B$}Bq&ypn zjn{g#={}#sYPnKDjQC5F&rNN1lCsYx9=CB1{2#eok^*Y70T1_Or?BM9v)7liiz%JE#w!ibM&!_H3PHYBk+8dqhO%FKlcP=_{ZkN_xqDQ6E3?CQg9G7`= zHQ+~aGd`k8pMoymcPM(V6BXP+?k8Q*~%M zaxxMABCa=O8@si@!Bt@w+eQA>-b&~-!A~kZqT%Su6gJ7Woo)$e85B=3YbJa%$KN}T zInO6h7@S8@dDX?xxL`l8>=BT-H{ZxnWT~@!Hq9N0w{_>!l#O?3;_>j?w;au~k_Y4H zaOCg3i};*prX%dF61mI?YR8&3p3==pIbI|9*i_CjVw##9W{zq^%rXQM!hqdkZ@ihZWVQm*gzYZAhn8qdk!cQm#1Dh@n)1d*%m(L#Bu zR8X<00%RtWQR8vx-K>8_6@kRXMnoNRel{FxO1VVY*6LdqtOc zq3$K|NJ;6j5=6TV;J$y&ALxFXx7>e5E#wqCDp{wSixb|OK&_Q8{JISFZZi$X){01?H)0qSw;pLqP=&WsO-M+*z^s~ z1f|hLM}$%Jf2=@>&0}-Q{Ke6;@J1HZl7cnjAPwuXmwC&oaAnq!IC9{*<5Zjb-Q~y3 zSS_+!sBLV1bMpc~{{N8nRzYz#+O~FZ3GOb9ySuwv63?hXMOcMTfc2@oV` zaCdje>2K||{{P&Zi@o<{S5e(XSG}{RjPZ;Y8Ucb}Dwax>O*{%aZb6D02il3*@Fr^m z{npsv5sVAyYKFgV7V&LGS1~)Xs|PJ|ei_4(YX@~2)o5zjz>}R2BUR@=q#Qg={~nPy z)BYuNvLZV;)|?x7+wge5U|#%5gw}a3Y8DOtSIy$z zVq{l#bHQE?VR{0e*i)+AeoVa}yF)WMUBM8ZAa82vZ%pXrsN#&7D|fdvC7pC%IV?l5 zh^c2_9^}R8VGZ2f8=>O&QDDH_Ws^{gu)op0k#5MPx%rnUFPJ+<8R)s52Ooc#9&L%n zDt%YooD2n1#&X0!u}^;RE}hDbnsw_?YIR(OPP`?9Q-Jhm595v26X3>1;7I!&`fb&V z4dm#poXfA#BEJ}cu|6I6?(xrh61=%9@@0dHiOr4&z5k@DWdV!lr&3Vhbpop(j-kd+b9$mbh5`uGXjB zUv=SkAhZY3$(P3WDd~otR3nURxox}6)g)PVB3)w43qib?uMm{ZeAbA385*T`?%tP1TZwqHxY-{gy?)%`DjO&A~JytLa$lggWnoMyUt2*Fmu0rQd!Z zX=<(i`|BqO*6}R!rEAN#wNK)Xg=ZK*n$d8|qhn@zLeE_oWn@`KA~l6CEsQsKwehrR&vqlCc;JZ8#I;^b5+xb#_pIlKv;ZBQdN( zdjj?};oPq*tySi2cMH+=z0|YRv$Uf*2@U6yFgW920nlN}2_!iR_O1}VvL+tNYo-c8 zMt{*G7(6*5bbL)93_IZ}*~gKq{#&8WYj?n|%|!2EWX$zH@b7PRi_*E`h!OM(~#c?DT4Lw&9)oGO8 zddjKlrhJ-3XC$*yGwc%x%P?puIm%Ak;Pu#7P#haO$Y*PAUH{{HzkM>=U@)ma~O*}9$T9p&wfg3&9#(FyxZXTZ9 z&gz?5C0**+T8Dj>u0Ctp5IdzLS~cNcjzAlvRO6H3lQ`9dFnds*yJC+lPmsBhgk(l2 zx|dQe%_)(yo$Yxu%YVrkgYmV+U-SmAm1t+q|1vYo4Lp6prhESbPO%9hFGyN94keUfGxrIJKPSb7ZdhvR8AD2Ci(>S zd%r2rmD7-nUqAa5$`dAVB&}$6D<{^0Yi(3kk2?1kG7F~>JGV)!U&VhJUF>=H$`bYO zNZ$+0#7BreU+*^D(t>VGp;N<)U)Xucc6X~VwBvg?L1F640x2v;w-`PdW@LN5*opcxxtH*DfwQ8zw@^d3_BtXWJmh4 z6g(Q#F}Yu9SW#DESekIAw6SAOAKuUYnH>r-qg+4J3B74#ia)m-K_@ZqPxtJq*f+G2 z27+NCi#5t%+gA2;rOal;9sG|U%_5-2qm7tGI#RYQltT4uYdt8s8m;x*YLHn&Vk4Jf zN~-A|+}4VQHN0aAspNK`SR>+gM1^wwTpfZi`v@f+>&5Iei|ZDKj`BW z1}Emz4fqudzIyw6eg3RSIh^diFSI75~6g$D{`evfNIB1)*`?;U`m7egy+ii{g3J^G~j0xKm~SWI*Xk> zfjAl|u0L2SSssBsMeo~wB##L{a`G%x8h$Dn-pAd+X6Lw*H4!ZFI6`*Lgms%I6somD zaiC)%n;cEUN8MWJZ_K|X;(SmB*cm)%rw|iyno7;>43JV){Js5z4@Tv@{pO?0&HJ0t zsAaaltxLSM|MX)&8Fcu{R8958wSvRbB{3az7;m;(@>_HJqps8hi_aZ;=mkLGv5GG7eW zFxjU@0Kyii{m~xR1aLK+9G-zBwFEiam{7Z#YPcl{rd)3om}2a}h_3LK{`=x`1gUN% zM7&x5bJkAp6ZiwdWA_>ZX}nLn-85doPB(uOt2B?KIm%$a_m&=jR-u<~nGl2+enN%y zAcN?MT8?dpvpGM5(Z|xC+bh%CkHO8v${3VG_+b`WLr&hcBuMd9o{fyHP)S@lEV!Az z$Uip}%1qBg^SRX&J$*DnK;xric9togxI9&*U}YNy;f#9ugZ zyioPefJs#L_#5rA;3NhbKP!rI5(+!uF(!xmuzMYs(P{zh|KJDjN?~SJ+ zCjt2+onfzpA@SdWA-Q2fVozggpdlRPbjef_P1;9A|h^bH)=11kkTRG$^_nFTg z9!41Vx#>6qwRW-o42P> zH^hpw7mPrbcv9DCQtLg3%jvYjEwWA}7e5LKZm+1VFn!&|-&1?vRkOO<9_pxTY0=L2 z-`7|9?lGbY`img?!N~?{ia8NNiDQr=_37wzBLh~-(4N_F46zR|4k&}HgQ_W+G?&eQmiTje;J3M@E z!?fyPKWeZk%1z1bH%9%v|B zJE&#)X)yPE-M%YeOJed-d4xT^kH)t2XNaaP-lnD4lRtC9%Mp%ZVh;AnaF@3qYzI;j z-nX}sGRo9!v{KHvd+W)M)?8v6Esy@fWT@1q2k(}B&%a8rg^&~^x!yg_SRu-kT7xr$ zW&HbMj`O8e%IOPH=07kTP=@GJn48uFmt2Q?D2L*0`Dh8qeRf&Q4=tH`wo`{AxS6-s zn@d|=S&Dnxv;B|8l7+}>+sDX-{gg&kTcX@^P}G|m4av$dK^i*;lr?JDMsSm+UfWn# zS%V)>GZghWNwBN-0PU!#p1tKtlPCmZEQGp?%|vbccSQZ+N|2PX3NqTDVT@y?$Vto( z>FxaD^L^m=uBJt^)op>H*p3QfhHE9vYU_wFd4Zdykjh-75c?9CLtxXUM7tBK7vEjq z;BCN|7v40|9=&1ZbHf*@yrm6Fs0=D1H`K)v$p$pCA?=`BlmU*T(+T&d`i=Qlj8JT; z1ytSdq5Lb!?P8fN>yLe2MOR7i#D_i_M9*vNX0sAOU?j->;B4mtdV3x-2;9B}R<5Q` zoXA)hTVp7JlK=V+E$~Yt`%Hw`pD!c#&`c!@lxH7RMH@4>!X6I~w;I5g5j(vs4vaEO z`IkzkPCfWGV8OQU$DN}lOH(ve?nYK1;FVKXB2U~;v>;!2Fko?yTIV~BNw!7O$`gMrw5Wt zAA0?0nE-MB-_o`}A6MayT9txsKiq z1n80maoOxZ&Ky6%uC`~3{IH)uuc22GJOO(~(|l+G8RC3`vER352wV6aTm?|H$#peq?Pk(-T8O3Ea=JojIGc6sYON2GU0So<0%T!mNDr>Ne&JPcRgf4@iGdz#1h^bJ1@@^vhy)pO(g;=P} z3VM5Fk3XW`mBH6-H7wl;=y;i>2)isrDDfZ4O5c%K{w?5ftzL#8)W~Q$i*$N1Y_SZSu3d8UBHI&BgOdNC+w6IB$O-?)XUbhzeDIt6#!QDpu$k)?-?CZgM9|+kCD|})PW3wHHM1iZ( zgC@2E%bvVHbCG=|*nyAvuq9Jn6E7(1u!Z!atx_Ux>S2uQZm(WuPOpi3t&5P+_e`ItHL;U0{GhaG<7fQGYmhT!M_fmtHwG`1a8_eJlo^JHIOEbnBv9%!hrG2cxI z&KlWA*9_LQsnqWzZ&j#ui+(;bKj!3jCKCgEBI}#2a}ZcFI~aI|WpRL|wdSWwFYHFY zMmJJeHgub8MwcV0L7K`igr~5Z3FOT8AhHf{E--vk{^n40t;6weDLZ z43fRM+mqz@5yTs?#!ncD@5sZ`f}GO&{mW*!Iodt`R=9!IBQTT?TXfTQdqVS>0<|~Q zT*_Oc7lAz>=_?!4o76=8a9`fUMh?Nbiw%4-T9p;kf3xiU-!R5Yc=cWwjpC|fsES`( zY`(-WHOU{;Nc4sZ^@B9|DF~Vdj5gn+lskQ(j{2TBh)4(dS)t7Mseg@9P>e%~0~N+1 z7c6B!aQmDLqhBuR^GJ{q-S-JtEjW<7FrJ}Yu>kd4M&<}V+cHIGF776{21td+lPuOQ zWMi#A_?f@?(@Stbej~`H*VNQ3W{vve`Uk85y)_rZ_Jd#_`3BtFti?3=D)OOhg)()MSb{_qg8E66iNQO1 z_F6P9`$h|;t?H=%E(60&(5n7i@p8*}VKngL_(Ad4oE;k!LaOX_OTY zJs|m?kc)6hJ^faXLv6b()I5Z`%z!8#b=&jzrDupNYMx-pH%3y;qqXOMWQ*p&eHHJE=#hfNguq?4k}dDz-^5feyYC2rOjV23zjnaE zuzf$2W1pyYGx|~zqABWBo#$!_u82<;*}tg~6|kUV&$;sLhlNDI?jj0fV(dLiWH4ND za7!FX5T6~Mrq`aE9Kop*k@p9E9-N5a0{4UA!hO&@prmnweHdY-@CYvKHSC5^Gh&L2 zI)`S{BKq0e8=|0khn#B4&x!5^!fN*tR<0_Yu>dsXllQI=J5G4cvg|S%9;;FLRI{*{ zW5Lue6?K_ffliS3#t(nV5o6~YAG2%-ENMIp3A>q;i?mM*-SzqN&(9|#K8@WTv{t>G z-XgB|Q$+)p60Y-Wa=KcqS>%PG)f<()HX$QF zvW|GVLM-Q$e5s%zt3lvO7>nC#V^qLPd==iCnAr0p?D;_<9nP15At;A-o;Pn zALUMEP`H=U7r>Hz!-7@d=wYR(AR~&8xI54=AFG0AA??7d^^6A}_eZNQq8A%m-CD*U zH#i9PXL=r^7%4C8Vfz~YIQ)*gVnuj5kR?Wki+9v^>w$4x{7Lwo{X-L0y4@dj#Ca#*OdPj{#f3O8S<&1igV3bk3o)yczY5sCTV<*WqnVmu#0cD& zC?0afpWvi}37SwdY=gjU9XPCUa$AbXe5(#R(-}ierShWg!El%XNZ1lCRt2H&e6c%b zBARV8-i|(`@G_mqW(8#O>QvR8M4jD62hNaUC#Z6|_>WF6ShpzX!sjg+1pDWL+$w`? zs;7b<^)E{q;pPbB^ePUc@K;>=BgA$L1NX>mMR5dj1(?J!=0e8O3%J*0LmL}CfVbOx z2wU^j(C@nQ#|kZ-pQ-8htlg{1b@_lf2Zs{(ah!_k+z^BZtS*eG9T_+ifR5H-4Ac*! z&0N&BR5tRN0H{Q?qfpVUU+h1yO4(2!KNRy7{(HQgU%TK*yj}PdoF4hV;FEQkAiG|Y z)Aii$xxc0&)cGwj=|B6mljPBf&|1>}5CY7uFC!c_AY6We-TA(G9;u-pCKK_&#cfRw za}9YUj+Dxh(H%}|)N?W&ntL>K=Q}^sdx$uC^C6;@?CjVOf&RhDiNs$T3<>@x2%_&US^6%e_VeG!XJ|&fvilt^K#Ky#tg?zCp4t91)5fSj=tU^LU zxa*TJ)DzxDIyySXr^;9)!g8*0D;(s%BVlTg#@se}j7gBno!8nlf|Ug$W>HhONT^1< zm8Z{&neTDw-OCAt-vh99!Z!uH|~T` zxzYk+(N9BR4&f#;V1#pHI09f>Kj05Ur#)j+1LpDJ^$s8GXag^Irn@%^m+)1|`y;2F zT;oIO(Yyf=awoituypwC3h>#Sc4=XiO~l`I;w)zL!?y!|N6#Z=qW;VQW`61Y4~#z} zw4DXyXRo)Jp)?scizCbrlCs-`+kfip+V*Vp8I;G7K|Am~>&aUDAfsSdRrdGqe!c(R zqrGUDu1ay6ci~so1@S8WzMpFC|2)Bwl?w?&qyGyrA=2>u@l0u@ig-Ked9UiYiVxLC zT*a19X|-#WXyro3#2~WHu_fLYt>tn#x9vQ5I!LzW$W7@nAsjgv<2O3keIYMEA80SY zUi5!rPB3G#HA#V0Koa80J((OSGZ*a0yDpgCU?Yq?qYDP;!5}0z7F<&>_=+PWLr22_ z5OlRBAqNnIKSiDp#*yvuUc(te3Aot^%aw){T3%3^6OAZ*OFg%jgIXg>(ltL*YGu&| zd4&>5mJFAKe_4J3qT%&D#2MM?561Q`D1P|x(D#cAmVzDUD`jpy4K0M!6?w1$lZB{D zFxT#j_OK(7v{a$+hqKLMir=JXgU;-&Ex+~W4S2PhYhnOvvFwCU{Q_2ei8>*)^Y9ZY zV)}bMWpBJs^%{iYJXOW7Q(ntW_d$cq5b-MagfYfCAXtiNMfs~UI99F~`#M}5>bs}5 z=c3?tp$Qp4rSMmq54=*HgzKkl+GxKJr;cJQYSJ_LN(_2?A>rYytVY#xF-jAJYm2d$ zoQMj33BOX01EJLIc8T|D&X?^?gP>1{wz)|(Y3|r3=hq&4?Iei7RjYjG0+eefToQkp z>UPr-qeiUQXFs<4>^fykCee6Qg4sRfji$HXc{j~%V5s3tYAa_-3?zX2CoyRDy@)8Y zo40oqlMC_IQc4BG>Hltz*p#3)?w)C|3#uTg_YZ+FPd!k^wsA%f!8JNZ;;nTaN{l0N zmn!n5{wU8s7s%$)&M(GZ20rK;Bw}(T%_GIyu&FS&mG%-4P>C?A@aC~gPK5m>yDF&j}&hU~y zwISMpF56F+zLDgO1W{v=9{!$w1zZ#RsOmj_;g&nPpOd}WXQR>W{YGs?*b@jfgYhGV zIJpUilzzE)N#|6vU3)`uikOODmK6NR6<@kUUD&hf`CoK_X2`jPA4Z7soUZHVm+$kK zCJ)l`?;XuaRAe4mBg}z$FhM0g@Fm~HkooJ-DJXMK>I>A7g1d50>v8rEps9am%qB}R zOnQ7nh|oUDWVB!>{3gq6U1zQo-T5ylcW#@tPb&b+Y9r9OB|BQGy9$uB19y0D+O@7a&e> zbW!w(-w_hI2a%mz{%v}oRsU?f*M0ECWueCKhPgt~!;W61)oN?mn>NDCl>lqAX1^ve z456w?Qc{Oc;Wxm%#MCVOoY~}Br;Pl9r+Qc73&9^W_*f(}OUqD%v88lJhy2LoN=2T< znj@V*tA97XoY!{XC2xZ*lSgnTzVem`skUJGEVEgEL&(@PQge+d*y zdZgHw;0EVImY5HgAMa9RH=>S+!{*J%Q&Paw9V^TM9%QgKlwt>9O<2lG2Zvn8OxYF9 zU_%Zb9v1Bx^DQ8iyK!-uMTpP4V;0<9oUWf%TB6`9L1venz-kIdNkE5L?_iX6~7xTWX(skwJS|C5{-t2 zEPWKnz6+D4GS}loGAY;6?7qriDA;Aayp2*NERBf0yXn$|4@N(q{-f3D3}NMsM72Pt zUlaZNdUO8}`1j#6gqGQf#jv}V;I~V4zt7jR9Q|#H4pf0)7rvD^X5_gS*doly8xfV!9 zkfykveo8@fl|w^~(X%Jd6?scTh9U?!|IlsmrXhNFv>*+nNu7N)=)zXeU&*SIdNIM1 z0qUg-ZtbcfrjH+5sk7ge3d{J4h8{Ch1J4QZvcX9|U7DD=+R+C~1S^t!<25w5{CxPQ z{qN&}F)m11+>{0I+WP9Wi#-^L2{{|82|91IAzU6#W3*pFVLA ztoz>j#$AK<==NzE09oWue};N62wvv0Q{KKu-=~218DuAL;{N%(Hg@PP1R20lctiU( z(6mk(hyaX;Xs~{yFL{I*8GZ;7GZozBiaOci9MIDGTQ-)@$$@EN@S{E3M|B+?X5?C` zMJpS8AoTrCFHg_I0qv&1wH>L@6eX{Gbi_G9)=Rt#O}%9l^%dhxQ9RoAU2D6o^o%sd z9OvZMLK|9<=VS75K$0g^R~!Dn{&4^_W^k0aG{wKahyTXQS0jvGJ|t)>3cjDZ$7rh2 z8Q6gn(@m!5f4NQfv4kE!Z_%eQg4Sq9sLNTuK>xOTQrs(H7RX~WQ1#1MFYH3yPo*=q z1|<>L+Jav*3b2y2c89ZLTfXxeI4E^5SjnKJtm>`c{-U6z*~QD2Y~X&%P?zY63Favh zZEvdA^YfHoNeg!kKNwNK1CC8whx;SiZjNOsm(0)X-pFhk*rw%UHpF1yptPThJ5rSj zhw&lW^_gc2KPIY-KGak)?hNu=H^6Nh2nfWrUVbS?q1KcfRT6z30a--l%u58FMkg4l zV~1BO3cT*A8-N|lBVXsIWf8%`$3aGNc^FVPT!5$}+8MN?UAj151+rQJh>H9g;}e|` zcK^r3x862`Fmp)>NsRVfM~Q>u1-__ikLv>%rgH_81I=R>+2n$~htxOMx+p0`kYu*E zckOmLTBotr*Kb;dC!6FCc);1*=S@=kd9-y*Spe1YU>->3S^;D$Itj;w`t~hw?`4a>T`_OqalXKH5)_XgV()?5cjKTx zdUdn53b|p6JZ^^GLp0y>|H#5S-|kn9lWvEJU7FLFbPXIFs>D7*RuHatv*fRv2>0`v zYRix#k;9jDP#LzGM*k2mC5NSMAFX;d4XR;(tpfTE{4~lzJ@G7MmWAmO#x%?Ug${NK zJXB|UJLre--cnl+{a%ERLNVK5YOx8lS2EpW8ZR&JGbmmGeOjuQSC}c+@+RPjnzh`O ztj$u9HEBUQj2;u6O`19n?@2W&_7fzo17`@VaSnMHkMxsm_ugie* z#C)M&i3i2@9(2yE8$;ZM@CCP_eRfB(c&?*K`m>1_D@jEE4KBT*d@=1=)u*JB%_$s; zB^9z!cJsruF&ak`cN#e#=b7OTa*})Xa*Wy*e_Qkbb27qMX_f!>Z0K?ZRdqk`X zYz42u7C0IWvs+eo(pyEuDk0T*<{<(#_bdgn$}&GJy1fc2@f-|=ic}D1R$VSE(RuK9 zY2(cT`eb-OMT$M?wChE3J1=F4yGvJ-y^^)k8-T@54zxgf=5rv-b~Y1e9GjqxAt8_l zmfBXUGEJ1zgv-}p5&Y(Ja4o>`5P6z^qO;0FoS`3smsCEtgzTkN++>-lpp>S&_$^zT z+&>Y{hj@%*jMCdf&^0zn$&mj-8bCTzMey&(f73KxoKuK;$AR9zfuluOq|4!Qbu3gD zELJEPAbu3&hm_=LBt7fW%?qf&3%c^r`#BU1_W7;>t=*(?0~Za>T~rX8F8J4*eFXFh zX;LSfU}Q6~UEL{D56$SoRqHSbYoAztATQBtudMs7%T$m06v?0?y%YL@spaP})l}?{ zrC7#|=oAs&`M`er?DW;V@9Sp7yw3G$Ogdk+R*u=u{CX>9bhGU%Qm=p6%91m|B&8-G zn6oklDk0jL2SiEFGEJ{rCQ$v4OPe$-09qFsx^MZe<@V06hjuhH@s4rtTMQcxRDsbw zr3j6};Fv%>L>5NglP;T9MsZCVuM;dC-lI!l1xL<|XpW67Ks>FodMMrZEEmJe%W~Jt zteB?$NxgO=hCjP;_?gkc0hh8`LNTGzlqd=CAb}&*&0N^4?n1OJ-{0j{w_y=%Sqm3w zHJy2xlUtL*kM7$sl|GV6j~;J{H2DD)R#x6NQHO$0l4PM)3NGEqg`!(RJ@hmJ8W5&9 zB_X{dOj*vF41bmS3QiK^*G!RZ$B-nR$A<=mVDo|mXvv)r8c9KNa&q0IVFaTi5X_*0 zZz?Laz%$`Wsn}Kr#nCUdC@{tYeJB>goteXKvDiFmEoL(DF7R0<;99HLq~c`r*|tn+ zQ19u&T3sEt{ga~ftU^VCq`OM=p#atCkzu&AsI)q|H6IIg+LRGDpkOXn(TJ{G%YN#+ zxO#*<@)1b&{cB>rQ5v`AUaKrexjy}IeC*Gq&CyIhobd2ks759|?XS5yG(t7CmCZg$ zmM30n4m7bEs)1XE(X&r@5LL0=IW}%lRU{xzx|$Y<_(T zV;J%qH~9}s5ZI4x4E1v`OW+RiM!lNdSEht0{=8l*zO zoJ>5e@1fL`QUOA%*Ot#+5^9a8F$*+P291`@_lb%YV>c4!yPhWfFcaFf9Uwz$jx@GZ zT4He8VLD!#z<_?r>Uu0A6ZW1F6cXy**c~ZtxVwx^PVnS~K5|^+a6GV$0@KTMDB89I z7}DvA+O?OPhgpz#Rs|H2^G_$1YegbY(=5AvSdXiVWEYca8WiXpq_)Edm}DTi;8ThW zeC=qp;58FZy+-Q$WRGZTnvuOgY!ZTrPy@DU=A1=|7SUFF1ZW$gq82jPVI8M{@l^{H zw48B!F>PL1U*keG6ICybgsAl3sLVu`BemJZSyIL4By|KOf276h}#Z%a(w)sr;PK-s5C@66R@Vhnsr7o1Z06?N&bD#rxaLBSQsla!ibU*{-X z7z`F&W{8W9ItA;E;I6W?$PjbWo+w9^D;VDnOjN0vba}4dJRNoFBAVFXt^XH`V;f`)#6o1nd81pq`-Blg}40SKjONQiubwFzCb?q9Tgc+-y8>*(j>&~F% z3hw*q9wFKrA_pFfPuWkD5sEJii{52Mil@fumeB?m8N~71cPn*o@jo zDDfK69$HuvJ>xJOV5VH>D`Q3)Iy$!3jMhIc3T}+_A$H`A^6qH)auQ*6cK8?sL`izR z-s`0wy?8Yzzgp4D8T07osTgWX#kFv2Pb@OANLI|VUv0`nH)rA}sfFovl!3uE7S9#W zL#(->J4lf-0zkm)Wv*6gne4tVpUUj7utyGHWkpO3i2-T4)q$pkEiG zdIOH??w0Vo0mcfysV>uO#%o^)IX;M@FNqFg=~JkCA&O!w?6n5l0X_LK+L>#-4?hA! z{7vFU)U->aa9AR_7#AI0l~`&aTkeemkSN%5g(6Il@~DA4RSBZwl_Wa`J0IU%_mg@v zU`w{)U5DR)>QuB|v(eg^r*2L<2N0U2l>UT@0sbBKVF}2e)4r1FqZ#9yGQtiBgFQ7 z;_}q(f=R|_^=;M}5=7tgX(FAa>1_2ov48&o_bta7-0=r0XzOLfCB(6%ybZ%Y@?}R7 zw741?CCzZYl`|T{rKy%i);=WDjh{NB- zXiVoxS565MYT?pER6aKs+Ya5t#1$q1M`Gs`zkHV6?osNb4=K7u8cTi#3aU!AN*B%+ zK-Eg;oC<@mzM;}uiu#u^Q9hQqZW{lJe)2$a8jLQFwp5ZY=*3M{TFN?cN&M1%hC%}pvJ|OTi#}N+!N}Jq%C|h_9dzNSrgR-gr7BTk zF!k|i>jFX;OLwT}zQE~T;M~KlFrlJ+{Gzp#b}i({$(f+Nl49%@=dXB3O(3W~F6Y0F z_DJXL9;+=_`ZW|#LFX}U4o>7HY_eC^f96N8<)rysJb!av5v0Ya@sS3=fIL50r)5&I zK{KC~LH>A(va_E%3`zohY`i#v%pAuhpS`|Bwk+xzXx7X}9Ylj)@e=(Te?=YNRBbL7 z+xOIi6G&#^)L6Y%A4G=Kj=1kqRg=a3si*&pscqcQC}4bIUjI!Nrho>&@#IN_?C8u3 z#6rg?1)G8gG@XOQ-Ze{zfmP(O@2}ayAL6sTf=8;(t6CxE1&W2wQQ$QCV7dzqnKyOY zA9r62RMMH7d(AoJ?ByuWm{7_wEsQa4It;EHlz^-OSynNWfXj*44?QJRNw*tOa9t+R z;NA&jalgm$#-bEa>Pyb)iSOvM*}~pqTX25%_P{EoxZ^IJy1B@#rfyqoi=$}lbXywQ z1&$JQUH>!e8W9!W$yl9VZqD@o!cc}9MVe>N8XU%maW1;&5lrBN2*C?#V5Om&p- zBW$!3;>aLrI0f%`4PvbPTQ8>9*|PV!ZV8!$0?i>Y*l2>1;AJkunmK8PhK-zO{lCk~ zdH~&WQ;VH-c9W~ILH06OcI9=LN41cFr6HaF%^;N?`hmCVpEhETLezN~9+y zxuve2CR!8+y~4BqrDLjqnCo^w6oiZOI*a9w=f$KFM}hX?3byP({E`~|haHJj+ehp2 zJom>ebK+pI0;E3QQ}$pYxYL6K(9R-X!I2#d69J&S$N40>)H0G6O7V26np}3pELYOP z_Zj#-^{m}CSy(m6L#0uvf{IYVWyI(UW1tH~wIo048`9Ypdil6^MN|j?Yb!^NbO{d% z@>qO+d^LAS6tY7vGEKt~8ygzV3v)%L-Rv8F>-(F~N+ zk}A0!Ab+p#J~6&?JhT=WvG7_x6_@ zB(aIC-njGgn{o!F^EyPbpeo&cTv?SniL{*U8?8tWJNpkU{vMKr0b2gv^LD0s8}_L1 zM(GDpg?;}5K`ytN55Ut&77xb6HMh3@IBx%DQj7Vb=1Awn)^!>3_Ehk<{UPVw)60tx zxk?yeO(|84QnxspC_irIJoh+s4XrSjqUrM~a>vz@P6<3G;>1$B`*?hF^s8vG%B_r$ zK;m~1x#^WYZ2!;IfosS|)zIBBT?!BN}N z+=6Ne=O|yPm6;ePiLLnHlg_{xu891tD;FLD(9QT3|Pcy;@sFBa_h}YjwJ<@-A*Etb&`xDDxue+yF3`y{KC~6JM zEdm}}%A{$p7}ftC7Brmwz5Q^v6s`Grf35sjN}$7}dzz8_IJ4;XtF%Gd0)LS& zfANWST0H4Zjv&=5EbOC0D7_*C`!A@U))47CK%&dgrCwy?m?DDM3-GQG9lBU~C(lSeO;)YhT2nWNzuFPj9oK+M>O+ImS`e+wBo!d8AJKg>MP0jh^c?v~p zZm7L0z!y>TynTF@`Xe^AEiUM*{bKY?3dZz9iX-x|u_Wy_g;kN{z0{<@JrbqJsc+GH zSXUj7DZMUPMh5B;W!%nn>ww#+oY8uuE6d&iTPj^D(m~Y3DnlLJE~@|Y!L`QXQ(>1Q zKmIH~YaJI!q~GA4KmEmO$#ocKp|BfBXzwnpt5EH)(U0rT0|B7ro4Nn@pY6Rtn%=W8 zzpXamAA0YJWnE6Q$Cp`IyM zl55P2hr%wGjB)JouMY?7fW~FH*6qUj5z$!qU*^g*pejUxW~s@ z%XKlo^qc5ZeTDBM7tt3--?($^B=<6~K>F1|Po>pWf?xkxS0f@`8p#0c#CMPr{#jO= zoO^?&_l9e9ANcH?HUOUKH(?Qm{#WjPp|I?sq#IgUPg^tfKm& z#6sTejcFY~nW{!q0)Fz07nqJA$0mP^{R&1?d&T}=Ew9@eG3W&l6qwb(_?X1f&SU(2 zav6mlaF~ATL(1~_iv6bYgT(F9Ke0)mljdiqQ=T7HDuWL}ptERPtNk=cTwd0)D}*}uy$(-KsgZu6q3RK)i#*Cg0_Cb#5|>shDqU-jvr^_XZfQpKknhrs zR^65;ZsVTEp4ZR>hLD0}wvGyCXEk@*y+9Pt1&D(>+M9y@6g|+H_^ZwzQDQYau=Vu zoLIl|B+Gy>}qI`lqWHJVm@cja7``MhHglRXeZ!kb^V^#cYt_((@N{~ zD=LuLAIW?@L35E{))cgddm(lvj#J_^Rj8z zDtl%+V$C=Jovlo3uc^*-(D2$IS|&Ng0tbPmO`~y=W{QV|0G1&hgA}T^_M-ek^Kj{K zq!TS4_?Z^65dOWoA2;EoeDC+_ozU&Q*&H`n{syslf*lgY>f|G}iK;<(py57rUr+b; z+O&gYpDJmbJQ8e>?!$n;GtIT+4-!4(P)Fl#%K;LNLXW2kButr+nnHsmoH8fqS&PP$)ZDD?{b>N}P zu#iR+GuIEY0Fd?I&9p=vW+Yb0^nYOWIUzP+gwb*STF|<__BEdK8?M9+*X)YfI zwa)VIVK?qCSzRWN8Gm}6RiJ@@s=0or#bd)6s3nWnoR+YgPZ%;*`+|zS>I^KD3}lw@ zDBBFeLE|^5`ARCb3lQC^aixsJO6b=v8Osb{8q%^o0J%-W#4 z>&za4MO6DL|J<_iF5>XRJf{0-f)YxSf|WYkne9|=gIkg+sL)ay9P9z};~JMddYIbI|5mSV z9RQzljhfe5Uh_+L(ZRuGK`yS!@ubzkC@&S?*TfYRt#&dLk_JjnD@sQH=BF(FgtN_9 z1%1U97T!Gz))kZxOrhYwUVTMCG=^adfm87z(=yfTj?XCh>|gCk zs~eeniQvOkus5Ye!Yp(Pr8-x6hgSCsu>_=EEp=r8fu*~T2IEQr(6BLzUgbdWPi(dx z3)5$|zY7rom(^airgr*I3_MCnb>VOiIYc!SV&!fX4xDW-G7U* zQ(GiXO>7`L5}kl04Rl#bniw$+?7^FQXZCSMbWqBaKgHn+6?k2(VdRRaseKg`<&7y4 zHw|%tQqcsaWU!Z4mJ?swkU+?A@~@{9Dcg&(*)LFE)zc6qU708oXr*Q7;_S(x37#(N zLO&?_2kfL}yfy)3L52Wp$i3n)^6cgmPLgm$6Tqygo42AS9{_otVzdic(y3P}fi`0Mw4RCY#1{uK2RmW&R~@D*%Ww_fS1 z;TdvN7#iug@$Mfmz418AC%A=e;gIi3b*J(i{AQj58{eSfNS!G0aJp<6c!eLhb%dBE z9yY9c#Z=;`P9;-<<8GISlb<0E@~V(;VUqT#Nmo&gIgEPKu>wC=f2cEY_1Ua#C#oF= z?nk5^&8-jlP7J_gKUEbS z(=nJEx{!lq`;;E}hmT36!-;V_UrK&cL-1TjEfOY?0}DDKaC~6_FslQWmd1s`3;a{0 zC0bTC;)#kFip=+fQY@-tXjtY4(B6*;m~M7hxYO?U9~R7UaNMc1Zgtns%a>~^5cZl3 z=z95?O>4fzQyRmeby#f+_j7=uPp35lye~5dpa5w|E+dHIa5uNCaPLL3y3kHK| zgHc9F^e%drMDL6qH5g?^Z=(|uz4zW*^yr;EdH4SBYoC7ad+?n`Zkadw!OZqgvWM5%kXnh zfz#7V|F_pfA`vUvBpbmQuPxcx+0`UDK|IzotU4pG4jI?6c&TBw#9{Xofyg=LJ~Zu< zPMwhG&7RJuE3e$7n4;}`*LYw4=z;Ez(BvfoL zweC`lSQsv*-COJkZnv`{g!F7$k0c*jnvVuWUoqu5jy0MZ&M?N2Uy2tjJ(sw*`BA2p zOP1O-Hty>uS@ZHK?{`^cVAX83OVki8CAsO}t8asy|4vxxF^^gs0kBga&C=nuDK1z- zeGtyKWIDs&@re$naYYm`;Rl_!1<8e!zNYEb=s3Qp(|RZbDPk`lopBly*#tkT$ZKw1 z5IKXz3l$|Z?NCusp%z;tM2nnm4E+`tJ-Wo*rWPD3CkzZG=g0So{z&~<{}mq(GW+{d zyeR01xI=>1+~?JZ6rw=kO8{jo73LI?)4!#MrSrdQkNMwIg^L73KX^TO9m9~_bo92r z`i9u7x=yT@GnR%Sw%@8qlZrEQFg!t0lbCe3l|-?o>bnoYBF~3W> z3e_@ARQ@>Ry`-Qdk^yV*yPYSBpA%%=ISAgL;!W23Ahg0Gps_bjJy;pxu|NNVR9~IeX%mi%2B@(CFv9WXX&czlJ0Q*R(J^F^hp}8Yc zC(=rejd(5pgilS1@9|ooeXTd-&=j zi4?7~)VH_-)+ZY|N3o4QOI3vgit(Oo>&!FU7$S7KN->`}xGAyJJkv+{W7AS=Byc`H z$0vw~3cff}`YrxuWEPqxD`-1)))tg{>H^9a8fMcblzUWmo%4mbsO2_^_HRDZJd@xP zaWzt3G+`p$*7Iya+gq|;l28d9w0Riq$ze~FKHi{n`oao)bh)G5YW>e0BmNK~amv_; z4j~%UBs5h&6+T066Lt7_jYXvmy%WHH5_BCVyJF{%MB}gfwJ*0ud+54E70saEUVYrP zb$r$#q3P2d2#o^$vy__`7y{D-QKRy<&!yQFwRP~iaA2y6*^xuIgbLeO7*D~o`L^X6 zwlTXnig_h~t=z!|^x+H!eWw!&hTvHmc3$bVrpVMQXWwyyfkw2F+9 zgnRf!_|L0;F8RIRKjCK))YzXYDjTE%$F0*yvjtcH2Feg;Jd^Uy9#SB9f#Ny8!FXL6 zaiIS=h%t&482O&LWA)5Ox|~po$jLNl{4Jga6X0uR^~HQcn|=MKT!Er23)X@ABiNSh z(zf~pX< zjSQxNi~P=saIhx+p8gettRb-8nGl6B2)KTTNWr`ifMRht&n5{>&E{(<*-acnqNL0v zVSw%UMuIS(*^dat8ANH+y_9Ks+F)1;!Y#bL9NddoE^HM*zoBF&pLFPcN=epxb*1^< zSB6M8P-Ebvk~C5FP7A%5^7#vDR8oY(BOgcOU%5PoxyVKE{pi=@AjS_|sm4Y=9mwT> z&e;$X%TyuUsnv-aS{VDsA|L2Q)fQ!3R+64UM<%$oC7xw-T9TEZ2h4f%&9Yt(V?@yWpUbX`9WrZyQt+TEqE((1Zy=4 ztD|M>StdNFbsdUbsjY$?!|Yb|eQAq5FNlj1oyMyx{Row1Zr+%!nasKAIK=V8()#0x z7iV`PmEcQ zEX3>Dt4F^5#Tjpio%c#*Z%U#y&G!jUhi03D?&W*W0f*2QEh|GsKZ0FmS5FMB?)e-~ zr=59W@70^7s*w9@2ixL@bl*Rc4-Rg93+`6OQ~vzA16`>k=4WY-5-;AiQfOBHpx5tr zrW`<&$|0AOdk8!;)}LyOJ#$pIhO01dV5RzVdEY<_=sP9Rui~Gc*nbzv!{A%robu>e z?8D%Ee1JPhg@~x zjDOH2>Na90J(8+b);K`N)!~VkUnOQfu-}1JRV`J{R|vLW7T!BU;A*}dY`B) zeqLNM=T|eK^t6C=LX0>0a!#Z)8 zdaZDK-meeU(FL`QP$J@XC`n#C23rIIXW5C*BSCs+0AqL19fj;7CtVd-chxjEF*bA0 zyS?Z>A=zsptk3Py{YU)LC(-oiqDJ%vu!!y(@GgmQSdq9z_mpMdU6(yv--r-B%QSEv-ej>i7<#+n^8j4`yrnByMJg zL||l27P;7w0yP3CKi}E~zZ*MZ>TMScn1IdXOU0Zg38m#dUa;*yO4#}YZlME?;_OQe z*Cl-KneXByuSj_DUiVV9MsF7?bw*FcwazO ztA6noAuAmyvrSBFg=>t&G_fD)fmdosVqwHN@^M#6uDwyUYO}6NEdut6O?itk#u+Zz zQElw614r)BB4-svbmrJKhHI&5#$?rNrkXxm2($Xt@Nwh^yjH8LLvt4b{&toU)J`A< z-s96OVHUIH^aI#iarf7}#c)%9H{SsD!Lx0CRC>jq;%eC#f2}PQ0L1EtBW8 znJD_bd2Y;-?wG3t(i(v;_1rsBN?{%V^G|tH{+c}#{Rjz#6y$}-7P#>L1@=Lc0GHCc{RH1zI>xr%HFsa`IdK-0z0?==2q}Ci}6N)=1#b6 zLkxdqkiNb2hPkHPx+)RWA_)KYXyiF#v2;0`B%av&{){B?{$4*mvZ~37x?pzz!9mFv+Z5q4i-bm;szMaU!9sAOXrXGN)#1*oF2*})$8PFX zr45`d=|#ej(>|gQL1~&@PfJd=O$Q`sfE@{e)MCIRzRq@NyU z%wE!}uZx2NBu+G0OvH}YQV)X%Pp36vB&?Uv#V~foWlIvrwGTauf4SVf4P?33)d;`4 zsBGx=O9eI2Hsc7vs=saPUHM? z3YHejU31GcCkhGDeVX2Xs#c&E@%*+Hl#v)K7mWUs*AstTSUwd^D|x{CE<^8II05zU zR2gpxFpol{WcF9!N|Az9j26MD*LUOKZ|{5Ya)$)-sE3+}F*TI2;mP@QWf3^B1cWdU z72*GQhDkk=)C7T4%G-~$)}IM83b!%gui(-%U15cJ%E-}1JY`&BITj)rSg@-%6pP@g z<`5QQsMi1seJ;}`Q#WScq-2yI#~!vpr=Oi>RQ)>M_t(^5$*V(J6BVxyO)xuIo8*G>`~jC5 z2v33olf7hJfcK+HpK5GE3x+4bgu{N$<)DmQ=*oR{Eir)EInJXX>?*-o4bbIB>0Q#FN=b@StsY`;o9M6nbea$CgX1ejooAIB8mi)EM(84?y>1v2 z%KgxgEqKvw&d%*(!M%}ybzSWM>%zg(vReyCPlmC~pLG?P{hsQ8a)XzQ-FeEu{YpH9 zu)%1RF;++N4(-aPXhd_4_cqfU1T__GHkcZ0XZWDaUNt3pHNE>dqLx-xj&t96HD__$ zv?NeXx5s_wQxDr^C91&X&CN|uOimQgAOU9sQ&68^ixCL1p|N$aapSYGnFB<{E4>xt zA^ujOepUmjs8(Q}es)zD&dlznAJn-)soNeJ+|b;0y%$Dtp~TT(x#p}(L|vIQIN4(% zu*;do9tV+0Nnwi%rzxtSX>^kv#UoM>U^fW~e9tU9pc$6}VXI`ZPF<6+*fV%nRz-~} ztFp$=X7iHYw|O|Nrln1XH4EyNbXRy1$%O>Vn>7lw>#nsN>{lNg1$IYH6b|j^W+tkA zkP_`tlBLobe?FzXkJ~wc(B0j!tcY4LK)J}4 z>@SWv5ZrqdsM^$g*RvTF1C)k*PV(9uFWkuQay5IpJFK5TzHOr8+o$RnM5cl}U>S$# z&bJkNXWU0sg;GAVpQ#&}lJ+=d!`jcv6#a2CT=@vpyhy|wTbK*f2)J~ z1na~=c!q;g(J;5FctE%ksRd-+2j+~kwS2+OZ7e7yD{5mZ~)CQWtzM%69JxPRm_C=Nk5 zCH`UNn570~KS2zwY8X(Vr$^CC+!u#tQ)vhoLQG{tq?$FNDBkuA)@2MTl2N81VpGyO z_5HFyrQDK5HpzFBf|H)D1p>)2&({MTY6RZa;MmoK?qk!l85?UNH8{era+fO#n7dBC z2w2AzZ?W~Cnd0A&e&}Q6$^(fAICY}9%WB*gZdh#`zRGBpd%^rWuqGE0x2?auuq{@U zmLR+n|4VaOg;rbQsr=|)8+)%Qa&?Fh+%^2H>EBWchy9As=#V7&H%az3y7ow%5_jXIZG$H5IUG&{oonJzTP3G`K}*uF2i7)!)>tyX-xRcAZeJC1`zhGJyI z8O3RgIMFkR<~Zs9@2BD<6IT24eo3oLs3DpA@v~J{%Z&`@iv7A?)0@71cvC9_Dlrvv z2O!2#0+|JjupM`>6z)dXS=#k>7k#Zo>(vkP&BBVM>$Qg-!3D=gKPHfFMi6neWsr{W z?4QIY^&+bfOBLCs-hw4l0@pq=fhmjvbp7mbql2z@|W!D zjvPYj(ly-86;3ML3b2@r$8_o=KJd|K#(N|tlR~FdY!RC7Z>bk zZ6>F4$hbb6o8}vY>G9SJ^&^hE)Ku#9T*XMp@A_cYi!E!*_b~jD6y`@{P^S)@ zj9(X5k7vpf7}=GQ!Ut}ggtI$HINq~&jBmFXC|KWmdlG&9*tMAw&?tDjJ1zaQA)ChW z1t!N;0D##uz5D4E(j~h3xasnq2=jY_&y!I`ZfS|U7u|vBxpq5UZVb&VjHmJy7f~tv zw?`RQwlpiEFS`}kj|Q$?lbn)DnR=M`P{*o$rW|~%gEO#SYZVP3 zv=L^LI3uNWU=%5C#w|Y2j;e7pqe=tcQufEWOtoI!9jBj38hcsvKQjmigVtgXrMH)# zJCcIgFBl7KFyx~dT_n&@#B;Q*ZMfyUrmP-!`=5prFg{aS@ksi$88&-V%ingq%!hwm z#U*M@1#M78{PnN9b-zy}-%NXbeGa{sZ01mQCxXAkZwK95OpGquDT<{``+o>|flO!v zCkYqNO5JBdByT^>RhmWIBt6Svvm2&!Bi_S-;s}N`H=${dDiB%P#Ct|d>DIq2_~(lE zY6MdX%?hpAf#kr!u{uOO<2zw9CKD3AS!WWB2ZT+!A$KbqeKj)9KYSe(^NTUJj`EZ(TTmveSs=sGi?|?EDPe=kZZd91hJij(_ ztp<@Q#Eafn0l~JEPFDHS)&}62^zSdL-509|OPjr-hKLFVpHIga3fYoui`bZEf34n( zysa+!s1l`Q=BXouKTO2NPTEb5};J6%-$WHZyQd@(ZTjnVLYnB|dr5VFC zh$nU=iC#6s(5>3ik7HdM#L#T-xfgV#UgtNIBaTkkM)aJHdFIYTH?MY9IjlV62Yy5;$>w6(>a^g&>Hw`5-+kAl`kji+%RM~?+Xl6 z<0j7b<^ursZLL+Dh1W`jgo)1)am{2WR7`oxss68-q**0Foot=9#+(JBy?d%@?OGlnqHU%rkQq^5W*$TQG2kv{>7l;?gez<-? zUw%d{IGy(8E(5iL4=$#Fxj9K4_Qh>@n=W(2 z8%+u_#uepj7hRf36x5l`@)#hbY3V8BJMYQ7D94CDl4?-VKfMh7N`)v3{2B5{lG;!( zE+Dp(h=jiD_e$<#->`5vCi8zR<^MfD^-r>(uVUXmyO_m0#1}<}r>wuiCoiO@toXJl zK}}5;mzoUX08Bl%%D$->d82KBPF*fIJB1|1b8U4G z&~fTH+bXtQkpVcq$ktXU!XhgHjc_?RyYmla-)B{o?p|@rFL)suCZ;Cly4M5ob9Y!E z7E7E*3vpx_v4_7OfPcZ|Ia#8>Dnj-G)GCjk=2H7jH7RnO#1qLza3qxAvk?vUM zDeCc7YATyVOuVfL)zNd{Z-~xG546d%4tf3FL?$YMazp4<-E!D78m(rdteey8meTq_ zM|H}hdfeY{)vztqEd5#o3A;X$2_AQS_9Xh5_2Nt24;>r?KjFS5B_6duXm)>B>i|>zM2{#|8Pyt5lDE`7XXD&ll)FVRPXe=39EHS;% z=btL+LZ1lVGyZ7V;C84GJ!~37d;jfXlsb0M1WdO$uKmyW5-o)puS-9APxt-k+~Kzv zyp*_G7QtSb<>-@uvMbRE9`FNYx}(Pl6bPg(f>6+6MonNu6_`81PgL$six5pAwJJ9`YP2fd>)|MAiQ$7ojgBVF9xr<$wXut zkx@JhckPpebea9S*^At)OUF){@iIumj(g3@Ca|Sn>se(tKWrD}3SQPU^IX=@&5YUR zfOW|-58y}7ee=cIw^S`N6NqssF|f0N@YKi(SV3PIo952DVrlO6ryRuW2)X+7yX||l zUEf@vMfU4DLz@?T*4&`A*&0L5d^?|tVM0X>CNi9L4?h`2J@!KJqq3?Hw{SZ>)U?FRUW^kPPHK5Icko>gD@@^2V_YNNFQS+(BpWyFY| zja_$lCPde!3)jYWtcf+wq=bj|(0IXZ;K=+=X3gz`^}Kv^)~GKu~qsg(i3IGuz7F&Qtb1LRe9>WRKs)fdWCP8 zH?0BU#`B^BZPx!4>Y+Lpc9I1XDOfo9qU^K+nokzziq%p4uMk^$FxYMpKP0!pALgd= zd-GLmiuJTgFJeoSOu1b5`i}fy)mAW2*Z97 zg|i!}yfdyrRkR>qXYwW*TmL1-q9fWW&_1p2h$zzraPZDF-Ktpo7fvEYpWZEh(Ijbe zr@L=iaGV=x8P%wg;6c^YK%FB<70ynjXqPF%a4Ys7yJOv5Zw!H-rz29V>`%0{Xs=Pdyt-uhD<_nlaNnbbT&< z2qZWXOQquF>7SyD9kICqa`iq$neVcA*_R3Y_Vi0pRHsC4ZXZveMoc?fDDyZ zB`~lT9I|%dZ6k+0g1V3r-bM{-oluE0_w1j$<(1gUPU)V?X%kzb2=^`Aixj6#w#-UZy&=|?<(7Q#4 z2hpk|9%x1NOg^gvFRuOk6) z!Jp06yHs#%NY*ZT6d8QkD$_Y!PVrr0Jr%JmOp;Y4l#)09o*Ww}}97zXXYhiz*>CE({7G_>X4EBrWoqvvkymu%lT zK-b{iL^Fp(M0|MGA|*IVW2u>DRUNbN0b^e_w&L2dDHZ%v-KF1!F>M?~tQvsR=Br7l zor!w{m+ofg#)D{yuFOt0B}~j3NLr#UzX>Gt_1o$@?~mY}N!Mi2E`!>oO_o*EDCrd| zBPU!?sx(vlCSEDy-{R#}XAjUknt(lH#A};FOR_MRpqe5{i(mnzoo~=;koE5dIgh-M znEu&&831{fu)PTh)8xX8{X0cj@9nr3tubAL&!Izq6B0h!6r&7HXXFgBaJ7*OO`r^M z^pQH7scV0H<`Z{*>}Zp&i7b)*REdtQwq5hAbt*sj>Mh9>7}p|IRA2>cXy2)lF7D1aYGQz(4;N92HA)E#P51X>U8DP5YjRdOx+ftN)>XK^iCtjTnTwB2%6?RnSm zkqhFc7xMYf`0YHvEx#e(g4>Ed**aM1n*X!?a5U{g+09(peSxW8gv*!Rv-#{wJ;dGm zy*@bru~%LB+A8-ko84Tvp7)UG62Pg#R^<+va0cl)pLxlfp^3i&YPDfCO-P)TZ%#BK zl@P>ZTV-ytu7)6;wnsLS$xV*^}!4>ey92V3exHdYT5GZ4=&ez5&}z+Cv0PV~eoE7QqYwnz}r$%H9l$gBZC2A2G7iW#8kO<;GSn(wCc-Q-} z6jr1FD?L2Y@8nO13B0&oyqKwAlDF%Mw%8vzl(1!DQ=Lg$yimEBFuK!%HWiO?zC9wB z1t?pY1t)Aa2}f-cDxmBCv}{~LK%5)a=cnF_??n3Yh1=gfG?y)1?>x{PrsIZANxA%A za?=Cw{~{ZEkL$072!fYhFeEXfK(0b?j7;%+L5NWykEW%uYk_RU*^xB8lq;P- zN72@MR%MB2Ec67iBbzd2L4%29awM!GkzYMo17C9xpB#N7U^(UIjC&SnO!Gg>#P|~u z_BcTly{)b&^ET3+%s7H=(@f-FD3$D!%~g5VCSYR~Gpwo!s8k%2#f2az!eh09Fxgw= zjg9L72;=jkHdhDcb0xLq%m^wD>U+(?qF6jVV2&a(-!%}x0Yx(;R5ptZB~`A9_kBBo<3R|wS)Jm@5hVrnCKC>bHRA4nioH#{>7(jI>t*5aF zyph6aE{n6-h^r$mRkGqR$nEmmms(NPMn@C#Gg=r&vqXqP1pC=RM_J?R-e?F;GQ!l zp+bb0y*lYBvvA#-e7Ez)y&i+Ggctxw~qG-Lq*A6`Je!cA!I{NCkBzJY^wKt zJuUi*8;v+L)-gfW4ms$Z_h&X)rS8jk;D%Y>xA$6Z;5$Wr++_UwpeCrw8pc@)uFXbZw$8jS9#1T)zCVFZQ=`GlG&x zO#@PJKhI4zr`1>G_7NS87WM*}0=Y%iGEkE&5w;!SS}0`m$d1;1(3Z;VnyTb39+jrR z#GKY{;~vTe6-uLP!-VuH3r**x6VCIqIHidK3Awi0H(#00mDl&BLW6?nWR=^_kNdoV zrr@T4C=iatrC2Zy)3aY{SfjC>< zy=VJ`BvcP-JD2Y|*(}GbbEK`Bxl_C4eppL~_>I~zbVZHNZXRe&E;MUKu!DrFEk<9^ zidfz?7nDfZ*{eM?PFiCGO-624)Ee;8#|;lqQjgb+TSqtD&)NXf?f+(P>}^xtY&(nQ zJ(^ux)3mt(%++mkLhDgl7aFF6j8y?4UL^(Erh_;f+$TCBy26ws7H{)c=`$1ukVXRM z(V}Ij38ge!P2l=3`N7$U8!v$i^S2Vwx<(H;h+6xaqFN)fh&f#zX=EPYaqHi9MsG*e znA>uS87CsABwiBA8Vz$+YGFU0_j8V-+<<+3q%3Zq6*V~9`i(&mVF24qMNM^Fn?&>ZWH_T^o4(S!SHO zTa7@uFVS&S7VI6|ELuBw?m~;f5mg_;-)SOb-;B<_WlZtAivaaHoWo^jk)x3qXrnYB zZ|Rf7mWRA$M3lJz(;qbL@XMF4AVtal;so%7J{nT^4}r^7iP@Ds9uY|J&1ZdkcYi|1 za2%-?arY{4(Aqb!cs1z#^hT#E&JfqMH`*O#f0!wbx=7UCOOGxpszM=cqDl;N zONx}>4T5PzGG;0*iiC0;TVDb$?6y7H@Ng=FZ(~1$0lD{TJO+wCmvFM+ft?tM%HgiZ z1xV62Z<$&P+ep~#mPjO%nr3xvNVBV{B-yXtEB6>#D*{P19;j;m+y~ympUHX+gnPu1 ziG~E-Y^aG>m;YKj)_TgXtnv7(^=f>3=mTTz%@+ir0=9?#lMczAjbH% zx=xz(0rR^O4*UaXZhqYBh`1rH!7WAv54|ad+I1_(i(!CV!SAU{PN3T3x#U zct_MuOMUOgp19hI#YoW3U|Ja5`Rw8(02Cf$^yN!yJnoIx4bUs?w28a2jEoC1eZ0|^ z!92}?`S$E7nL_B7ZddAe&)OY?%95l>?z>CHX;m5xW;D3%>NWR z2&HiAlANmL593V*zL2d33u`ScCD*RBVZi1))4R1<+C8HZ;+J3Mw)fW&Mv$ ztVdbXcy&>;PIv`ZV9?;DNw$76*XLFSk5c{mQH4aY5DgyeIA1c@DSA{m=8YKL)EHGs zUIs{(|GUfGd|YkBA>wEMC2=||qw*nd=pUHS;2#)fzh+8AJ<*3yA%;eHH5@)LFffVE zToT45^BC;lBK~#Vqd^2q&QQiEJMQ1jC^y(XP>i(a6x}809yAWMukSc$xv|$)TtK;| z(Tcl`hdEAT-?j1lCFme0;$ES1_SL^Y*Awn-7i6JYS|n7vvJz|xtCIvf1^TTi$$u%+w z@hThgAwwCOtjJT`M&Z1 z%3e3w^%XIWo}1s_KZW9_r)v-d87BEV6xv}i0tqG6E$Z)jK~G9~61YhrzC}hHVr7*8 z*aXj^u?d3Q?t zN=xm6&2FRmfgmDiaJJMyvPJ@7A1=p*SwLE+?b>I*>pMvEl4Eux)1)%PWHR4#3qS4M zbc2>siBxZP*U+Zj!-$4kWx>?-v$qA?Z)_5<2b8C5QAO_r>vH}ct&yDP(jTHJI#{;* zl^t$hRaosqSzy$afp3BNX{c$4ezPJ;)& zeI+Q@8%1qf+U|iF9u7D?G0tUrg843WYKa1>ysl(K(4{u4i5v5%KAm==%HywPSzeJS zw^8wwL-45O)+?HQ?_%ogX?etJ8c(15x(;qLTP9pbE9SGegS(!iRq@|R`dq7rO1Fz^ zY8QNqN_Jvbf*6tyjP0dO88~LH-g7E_{LEYQ%jOItD>_gm=sBZG=P7(PmhCO^f3$B8 zW$eI}_&3RSpM4PR_r^sP)50R0KRQgBet3vpkC?^-Qlg`xXTN9ir-nq&hLLpb|IPFj z%vNIZ2< zx4Y-D@1zfvAz{kcGTl+k612zrI**4rGXnee81U0ujXCa~y8fXR1hC?}4PFs`q(hZ( zH{}E3N>eqpjgKc0%p;I*>OLU~O}^mpW$sl_e|t3@-!IYBAHx;JU6h=^xk=u<9QGC| z<*Q#5v%wNH5aFF03Mac}codcpL-_nY5iGDl)BK67I%hGJzsUpfDm<@+FZKNDXVIRY zL=#?+AzL#jx?Rf=DAM&C4b>t1pF(viu)9gHb5cX4jr|!bEN_hbdg#1w9lcjNDALEP z{eH>qE|yFEPSTp3o#Z5*cPdI0VKOsUH*m~({AgL7)Y4>j>cOcsHxPtt#e`8L9SA@L zeo{1!qXwjkm{^6D9EY__xtl&<+;s8Y8zp%=)^h8Pe{uy-Y-~^na0-l8pBHU}XmLFt z5%s!6$8xS5Ilf4$P)O|I`k&v5_mG4*(+XA_4x)P`LuB~pF=k`SB29UU2+K);lbYNU zCIupC$2h9_zzm6ZmKIo8TD3mqK;{w$>x#)FbDPq#YB?eW8!drTLRq>vu8|t%XkEql zsxp(un))UQ|TW#?Q`}FaZ}m4WSf$5mWneyg&VcQF2`TBPa+fh z>|mxuuzIyAt?#qv=i85&xr&9Y_^raoDg3j}#uQ>G25)^X>SDeETrM!E^~-@`yh%Bzc`H=>*__8){1QQ1r@F&Z9ZIMJdk&#(sqm%qhQHSl`K6m%%tf zp9PO1Ja(Z=*68BJG7>390+|D!;~utsjjZbgv`r!Le(>-%y0*vjI`FRPbX4j5-&xUb zx7M$Z3_LeGt6xvP1ipUiNxI6`RShk0#Pe>GOelw1k7l7=sS9)gA{qzW+~W++;3eh7pzH%Q}-D*>5n6gVIR__Lv?o*qXoke^q+ z^j&GZ2nsviVZLrbuvE{ODZpG_H527)p)ym^!au2(R?%3RY`ryWR?2yuKF&vv7JzQQ z+EhQ1k&0jp)wwKkpWZP`b(-j+Fxsi%{jx@HSCIfLs;X&k{g|Ny!JQ+U{BdQeIJEHn zTb0{&zk&@B%;hHEeiyPL;t0uH@cfy%(5$^v0ocwD4AQKs&w6J!XF6AAO=70C%bU)B zGkD==dZUtAQ#4shia3&kjwhiq$9|y>e-e4?!i{R3z4-ZgjLbQbk-Sipp~-Gw49`@i zk9n)_Lr=yer)ZrFa5O4y)@N{6oZqa`z1i|^>l(P1L5$M7m5O*h4jS-Qx%-~_?FlCf zc%dsil5_M<+78VbKJOa<$~OJDnTq9@O(H|LfDAZ67iM0OOBG_@UTwry zy(>CQn|#-ZPb1+s*>bngRV@^_`4Ie~sDHeN)!YXbg6{sD6%l2*&dnmkBA}_J<)tH5 zu&B?g0$hZTr%xRw*Eba>3JVLVa`{bsUXKC2Y<;rs^U-z;V=b-AkMiV(M(fXorn%c_ zszq0EBVx34|Ddvi8y|w8XVto{h$VJ(v-SZ3!HD6J=pE#El`hMKyHC@J@q%=*xtMwS zD}tUBMNUXQ55MXT|# zo=))7i0h$qYf&5dJfPR#ykY6plq2x-r^~};Z)7#x9;LoSPXSf$cHTO?R>l8_NbV^ zcZ)jC!ISpy#S#Jq$)Xak|D0tK^gS{Bs9E;K2TZ-cZ@1%~J77Ig(Gj8Niq1qBiG9_V z(U}N05#0H|Z2kY9K!yhWrT-hLU+B^3Tx7TVc0H}={@l`i5;p6NU4~D(eLY%6RDsvZ z0tPpLJjjGx8!|t6z{YzgLf%54o0_C>e&gkf#0J`K{2bXo`k(D&)3_Pq@_XK!lfe^6 zM$n%ig}vpL1y^v|S{_Q=+&tXYCVB6vLwzTxixrUY)%5B4NRaHYZmNd2@S7Rj<1s}A zJ4d+|P3KsBGS)o!I~;WVM>2|=+O{Lues>m4pwTWPXGC>yGD9JOuOQmIkV58u;Cc!~ zm33>}h{)hsUZIrWBXYuq%UvlNx<38RwZ8UV_f=wUo z*Dh#A+aAtE3e!ZUEeRfkZ~yo&EEja0kViiloi9H5P=@?4=WCO>rD&#t~>v)dT?n!o^7pj)_ge}TC68a898V!R`Wi47@>ouUzyzbb6j2t?9$0R3a;yE zzD74M?cbvv9eYJaS4eJ2_xd?)z!PaPP&$0;rMDV(7lFj(53YzsuiX+uv+j;qf2+rB zzW;dA=G#cOh<-+0gXf8PjH0M?iQqVnG2g*s`pd7)CmDw>9pK&&W<~03 zaWFw?o>DvWdekcWc}}3z=ll{sG=J#gwWh8*&&Ks*s|1hrprPQk6c6;Tsv$W5!Xn%2 zJg93Q0S^{&KKCgqNlPKbn1H;TVqiCIo1GFYzJ4D11f#;^{impnq)DVQ zna_#}8Pyx;A42}IYPoMR86bRnWg^DDB6rsJu3U3PD|CTx%X(?5Kojem@ zJJpLJWmx*$gNd*oJUY4xi!V7JTavVvpVNS7>g5Rg@5VcohI&!-8=0SMsi2Nl$qz)V z-A;J@kU||0F6bOF%L5!hxO!$*d7xSAdgeCs0g+Lv)ATc6mB$Tpb+$%ypNL3- zsD?6$_~J(>i$(R{He`ph?Z#Dvopg|HTK>hu$w>{$>W~Cg?iWX*z&1&S#CM;`ybG~C zIgnYT4q;q7SGuZdT2 z?i2|zIerTv2-e1MNEEHeqyjObz>IfnKSn^A&&Oi3uPPBwD0jaFGDWPa2#2SeKfkrA zo2U~r82lom+}V~AU@-b+h-9^HVPq!%IysR+7v4~+$z#$%7-_9WPbZA}NrR_Rz=&?s zx)xvhr)5u?Y$o>+6l11XHou>b%B(cy%21HrMZTE85=u;?(TG$I0oWKQL~2AE(}+ox z3fm?^*x68AG%}2LnsjUkYT7piZYkZ-2x;~CH)zsoX;Pv1mL#B7&-nMwRR_Dis3Y_y z4#X)~f|=o!Bv|+Co=K8VI9k)*d!GqrID_;qHn3))Im1^l0VUUu;kO zSvf?R$hptmt6e=O{n*|leeV^T!?w>f1KOYm_E!Tw6j1B~)#hvI?1<6E7&t>e1GvRu zmNAu8&+;VTx;>k!Mb+a=7LC8ObU1jirf2QC>-yH+F!1rRNf~Nk|3vjpTpUX(oSCI3B{C@G90ARGOFqU5MGU&DP>6Vk+d+lJrKDgN z|Lj|j4+wW-Hq`;ipYWCj@W^(Cj6^n5T+7zLoUC`N_;uT_GPmmTGP{a8sjZR_MXqdl zYXc`Bs+~%Z{h`)#@uR(n({$H!w6A>)u)nj;d0zCx*C(o$X!GK_Iuh=}hJEI7*^e^I zYCcjw>}MHNXy>}{L6W2v#^w&6A?n0XH#CTPYNfpo5Q8w?yJj@(Zs}+#dKWfg@lhXg z@hj5u{?w78Y0IEbv&z|*(e88FrA`yGh+bLlx#f60iL1-eFSPpHiq?gtHo;1%s0_98 zg9_EA7K;q*DD?Bf8XZPSxzaKs+X-Aq#;LQZb63m^$MhNi>9)tx*Lqn~(5q;;Xf|c} zb+r4smExyWabNpUllw`Y!#S&g{iU-k8K0ipJzY3o{q8(9)8cXSBg$3u%J>Zn(#V%z z@@R=-Lyc#1&0&Qh0!cj9n1BSfoH=7mwUNrtH9|K(wyyr}!rQdwdf5ljB5*)jY*{ue zT3Kd^1A9?lY_AU6DH>UQv0-D8JXcYpTCk*3$$1!$^|IzkG8_q z32U7F#9rH!SsB-UnNTWN@oOsUW`0%2VEHKR@%RX6VQa9*Qx>Sn7*PZv7YDJg46ZbA zK`OnK6<=gB@LqaW0qtcAk(MpPv5uSJ?O3|fjT#?vL;R4 zVb?3L$HF67MWY-*SceesQmf?obB)+4(boVU`-Br;6B!p#f42H5mK27(_b$4bapwE} zvD&Dw05%Ti&SWA@>vxLe%{18H#`TCF(>s%@E@l zs3IUacL+IDwp9Ku$nhIWoz{ZU8Tqb8o`BMf@MD_N$G&&0{}E_){J=H-WSm34-ghCWDvK_B0b>eun0K@Bsc!&e+BV7^R(gy8%S*|uwipzWP?!1iTD)o%G6VHJpVR4sMgU?r4j%r(G>yo)j{FQ=t%6UGpu)ca3ut*!0_^6WQ;a z?^g+U`jguq(fyB)@ebK5JPM($_}-z6oy!ieIWu9LG_v$c-=$j_&hWY2?ZYg~@&o=h z!?zC*xj9;_T|I8UHeBx7`(D{)9m=ZLHiiHvRkXF~QVzVWP@{xU_+O~_YEwomEiFCt zX?GbW;3Y6p;#|1o5i`7T7x~?>5q1df>6LuqI-z{!He)@e3yz}lZYgcE`O?eqzb^rJppQSI+y6VXk|-zAB3_JpPf^6jzW9s=#!k?b z!jT;3fI#K5dE#pQu1Nc1$_Z$dWqs{p;dzuzr&AYM4wB+x?v8w`*iTw(ErdaNN%RK; zMXVz6Qy$$(TR7Na$12OV;&urhp|`5$RXv@jwM&wE)nRFPK~#)U8)8QA>1ld zuJ|MqtIFzrRw5&C%+gsR*CxdTjm)OO<-yGz6MznQNws7_xD2E{tBn(~(+K2h51CoV z>cfT`HEE(Z)Me?r6gQJdV>nFunxgDn2xu{WW01vKED#<`xM&9Lm!ss>h{em2yWy3^ z+)=_%^op^ro;!-@V^5ARJP(o!Hfg^N6Sdw-@I_fsRqSbpgf((@b2LPDfrYtBgV=&2h$rr}?$!#QZ;u&FYfVx#B74g0Lg@fo&m`@$ug5+2vbKdsxd2i}gtM_8)e0Mys7 z5==_)X?uN-TL+&W*PmC}x*uG8;dVxL>^@V`D{JvCOq9~uB_9WI&>ks};MP_kk7Rl@ z*{$Qsq55Bqbj-zufsjilefF;ejO!32UkTJ7caXMfj71H<)HXxCy_&|Mlv+g3{HV$z zC0Pe8QHEA=l{2y=M@Z#GgdPmaW^8Av$F$LswIZNsO3nqGxh@C%7^v3?A9}bOJbP`> z^Rk_CT0%J(?!AbErucNNMk}?9QS3XXMd-YqOyHjB=jUy;CS?aRF zP8JqBs-FqH72#1$N`e?*uKI3OqCIP^*_g9Z*FVpU2>}-cl$U%B*G`y8N`6Zp&7G%z zNh=#xXp{17DWqOt$#dUhhI+Im5ec9j;e?|IxJNBptp z?Z_eUVsh@L^rDY{t=nWB8)Wh^yjJzmph28LnZwXBhAyEbnaiFoS#|A%UBD z>f6F9*i^K+jdaJ3EzOK2MV=Vacl2wRxBYR!4laY@FHN$9ev8=T@30&0lR=&v)h%gI`I!HG(r7j?x^bihnjlVQ!1Y$-k4gHDaN5L++*d` zu2=Z~$hh;hcjzO~6LQVqv3?m=H)6kB_n7u*`Dn?K#Ju-ilYw!RrEXNKy5UT=o)uut zn{A^mc+`wl`h$y(7y&93qEfBe6vt91T`#QDI5{%O)HkrK2g;{^^zV@Avc!&%Y4e!j zWk|ph7f&X)E?(+sJtsZNvOouSq*WPY3?2tMCBg-~`axCIEk{V1%#za%JfDc7w#D~xY%S_#`I5Wf0FvkdRwH#s~)xOH27a)wi)SiuKzQnZAvt>Mgc#z&-=j&KP8?1DDF~%gj$F^cO2V!;4YBSf$tNq z0w31iX|95{Wk!wYJhny1Unf6a(SDM{=e(AUl|}9izN|r|a2xF{eg^&tp};2ppW86; z6D`_3|LEE6ZN`Up zOZRRmB7!d8MT$kpBB9R`y1nO;v^$a+sl=p{@qzMFKdP~ryzh(;D9bK3-T;^qU$S2# z=5+tE4c4!-B${lN6+8VDo8;I#<=Iv0D-juLk*d$M{=b7z?8k$#ZFjQ7J3DOXC^|pv z{0aRM_oCx3Loh%43IA17bJx$5h;O7Kn$U~Q0U+{l5~0sP8!heFn@FWanV~dV>MTDl zC0vT>Q|jP2^jUU1kQj5@e|HR>i-NSs8{-}{+fTxfV9If53kA@=cWm$%^n~3>Q`C-U zHfyim2>9-}FDz}MYnfQ2z9Su;Kw}U{LQMs{6XUqt>Mt6KF@AgpU>g2A6G-v~l-4Cq zYcZ;skE=n5=Pj^XqREZ2ht{g%|OjzstsI<6=BPt_ABr9 zE1b)1?>_*F4_7nS_hz`TKx!R=P#w{N)Kl8F+4UH#UJtX$9erkKD&dwJrt*{lwjT*; zsH@Puwc3o0lK*5}2?vOITt_r8OKK{X^}Ys_&&wjfLuIoga?lTN5*2Nz&Y-}km+Rst z>fgB-J>G2+(Bi`MEo$ke5d5+&XSWc!%|v>B)yT-8k6rn$l(n$l@QXJSpapH36$}h`&*E`b2)X@lI+d!zhw4$<0Bt0@Nc2vyoDnuTskoB-&Q7RjnjaYUMYD(lU;5 zCGfmOPyo*QVohx(ziZJ#g)P2hR}ZcUT6ghVj@Z^pyz;Y6AR>^H`*(p_t31D&!0 zZ#Kd)C8uVJl>|+&rpZSV9R?Zj-eXw|y+XnA5;_RVXQY+y^@K0c3I3=I5T4Dv6C=VH zDezoJfT$3&&;ZQbhiwM%<-uHlXbHM^5Q|9K3gWdY{kJ5^J~@bLt%!?7?u^Hq2zz3MHI6W<z63MR=Z*%Z-vFRy5*M7ki?KBq#s+iQo2U z)#$6{nu|W*(b!WTwO;p-V>qou*Qn6hvmtyZO5`oB-KQXFee(N&iaP;Al8pA2o#JykVer?B79=JUB0^$*T!e(cr|DPIaI}E$GEPrsQ;)lo z2w#W-0`!ILyM~(c*==`8`MpKK$;=b%;NT#uLqV`$?VCYs{Hl~Lxu=%7(xVFlzWOxE zaSY;%=Q4vB*j`$BE-UYQY0<)iWy)e|d6l-61}^iuxFPCDEQliqmCbww2B0czw2Ueu zDSwYedSsTru)zL|M24wr;M9*3q}G{j$`yr~anNvR*ziLWgodF}(^u(#mDoNn$JC&= z1%PTpXbO*XDqg>|oKt9Q{kUse8)Wah*#J|b)U`v2ec$*qv1supi>A)w%?Flgi%*9u zr(1*Y{!)BELfP7F{8=~{<^~~TNYy(esTW3xh20q}!yBq>Tnrk=Q)8SSFKjfK#J3B` zu9uXKeYM|qxoajFnQlRAZWHFvD^;PRt0=zU$*ydV?LQ`$>;tM1_m6-T^!o~=(L{lR zFT1hFK@Q_e61=|Ce0l<&DdP?$vpi|5&6cUcHK)!ytOMpvNgsFyIXu{NIAJMlImNei zK(N{=h2Ja|g(Dt+(?FHisW)$zz`{hsh4xmdreHwZ++H|2uGgp>)hTg{u#;o=E`dU- ze+C9NrC^~Xp%2fRMu~%NM_%``Z1h_oIcrnhG@vnApD8?L`35oSuE_sEY{s|BWsibQ zS>Jh&ty8aQF_coL>kyEq9-mxnUw}VFzN)u+{h8K)Q!5IZ(Z{erv{dDvebp(rAaGjW zppLx%@UmUrJy(QD3wiEilhrlWIC!u^P=lGL*>=Yu|22^h&mPv&G@WWjwh9<;t}z$| zN_77Rs}yRR7qmhuOg#IC^p7JT`>qd#Raf!8iaw|~Pvp5Ybtp5}K; zD)7*aKbZRL(_6H61)|n$+S~!`Fn3hQ_{)ttUNkgEy;x-`ybfp|ljbetB0BKHz!rATrC+V16oVS$Eg zif*Hb@y`D1IwN*`KY}kn(j0g?M#=urLwwcs5D+55&hDLO!T{&miv zz9K`5IrN_i^Z)HW{GYDuZ?W`md*mQv^=RQ=iIGs%$Cdhp`4#^-Fusa|cJv>FQ1%1> z<5SRSc@ajVt=`V7>47(p`s{lZ53V1Eqa9}TU^p`_3*C=s^!TeqsWi~ zTi};*=G5A%Ay!j~QYy}%l2-|KALgqu&-7D<j*!t-yzi|bLAx*da_Q1yj4ZA2j2k0jDls~Ru`%I1##=%Hng&)9B_QF zm^OCZH4#Yk-Z!CKr%swwOfUp;!E8+G35U!BbVKlmoEDun_y)sPNs)j3i_ctTpZE=; zn*4Y6?E{PF{^YoJWSg^C0A6YsrttYgt@YrCIEpy75R0W-dwRTw zUw1!uA|zOk*#@rTJiMOA`oSFGkSi!CG3&)!6N2l1XMTov)2RZ(*mX>{c?ieBDI7rs z$>ZVXUNn06X|$NR{$R;46GS}#jT62~TcETU?tWbEcJF1RonL>tYW6tkye38H#rt^h zpYpK%huB(vBQ3W$7r@s#mxn76w|hDGmp?*$Cxm;%h@e=E3F5q+rvqegI(F~KM4#Y0 zT4(A9=jv5@(9nx z!UjB9+*!}6ny1-QFD_yRr%Uyfzv|d%0<&=*DwGb8kkU$8iu^@#M9r{_K!nV@mP!37 z@lbrRM9$Qr=$-KO$}uNV7#RAze;52}>sR0p@*`&)p2sztj^FtcDJUk;9g!Ii37=zX z8-69eMKyD4l)NMPT)zm)X&1Jn$T;*%tK1t!#f5jN>0xIj_hFc1M{-7Y34_7h!ir|J zU{XBps8XC>6>2(iakrx2qZnJpJ}VbB>eAQA{j@_{#g3)QPLirqvxUd@O*+8oljluC zIl={9Lz_x5S_MqGVQq8uK`pcS_y|9KTW*-@S1Anvl6`JcJNxnJFkggg{+)TLBE_*8 zFVGs72T1##Xv(FfdEBRcVv&qZ$GUtXeFHd6Q~Anc&p*?C^3+l(Gc_{-XE8px^qDQ2 zbA5NrK3+C09a$Z2rAh#{=Qm@q9IusQ(>CU@UH9KaI$oc#juY*Ic^t2U{k;)`<5LO@ zcB6ni)@W%?gR51ebvrd+-G>SG z#*FE=zNevk8S}uJnQ=?O!j?|wQK@c*Hg}J*QXL^gMyq1_v6Rel72trFsH-Es2@DG` z?`Y!1Z#INg$bQeS+K+n11q~qF4AsAuVI(k8_L5vGz`kE5N0&CxseXOEc>)VW?RIx~pI;U)LNMQTx1KdEC;GY8{SN6gCcC z!C^L;Zg789n(^`K=?k_E%9v^kI{v23j>3740&#Ose8`1-hD;f6nubj%U2@cDK3cqv zjoH3bR)8W1+jw6pM`W*(?cofj`8x%ZSmnnMJ2Jm<~vZaae(Qko8hYP+mj@c#&*Ti>_}*fib-2$0?*qYMh_o~4G|h|GvZ5NeX6qVXk8e4=4ImO>oe zlc4?$Kv;xHzI4QU<~kzo-5)DRe@l4YWu@%tMrGs3K*aL3W)eNKN5KMANNP67n# zn7*z*Psz2@nA7k99iGLZR#vj=p4wNg`k%bw1)m{n4T^Z)@_Y1@p>xMu!DPF_r4@7a6ZU)d(7J0)WI={>sHA8lF&EG@ za`PO3$l#5>DCPSbD%?l}Rpq~JEYXmHypnX@+ebMqJ|oC|bIj-kIuL;?`(?{!kb?8% zJh;hv=k{t-PIEcIVzk0^#9WK@@&<4?>;;NmEB;^v%nFet;-a#LgI?L*Q(JU z5_${YInZlbiQ6j_U$%*L^@%m9XV>CNy=MJ{jrYMeXy1hpD=7Rtk3yYthdVtu^5Sco z)rf#V8;}t`KhK2W!`jU;C_DPL5?E$W2v|r?PKn?vJ7Cd6EsRb7{5hLmx=9lU?nIE- zVvcQQOfLPB7yIw$!o99x`byDC`nN&2%dE$oA)NLtPSjZ(>SEo`k0*k)ry>35DeOiL z)!yTFD^(b#4Cdo3)g9B3S=GL)hxUkO4A8YJIE?$10a;dEPUV&VT)E+nxwK4vH{vQh z>!LN_(I=C~E`^1{&}~Zc4K85D8nK~QUU{InyyWfqKP)6NdDAkn`#N==IDup*bHKGU(httSL&Eke?R2?D= zz>RQN{UF+R{GWId3h`~K*h$LH&84jVJ1j=00-I(t(gFRU7(R%qCXf>k25G6NY;4%g zSJWcXORE$7d*oXBbVd=4@pAaS;`VRr=QIUY0&sds+_8b(MMd<3e-S4x5VEQ+10Zaa zt$nOoINli~I;|Co{m!B|vV=s~x?%2*Uz^ST$aG~ieL(>fEH)kNgi*@Lso<%he@QqE zu~J&EDUZwVSe`HCU0dA?ao(KCiS8#Y^w;_$q9p@KVw1-19rpXRwOx2l^C3Qa@wwWd z#QpE{VH(0f_QgniSH1@A=FPWB54H=|%`jhS?ZpzMp>Y4+VDwu&q9YbGngGiT9MKzU z$IZIXh9G0ov+pAI{d@XUEa6W|0(YCdG5Z&iBS0O`{pmu*J9<{A#hqY2eU)1|_jcc6 zkZ1|3R@vxIp{mM-bCTfQMFjLunZufAZ@^6^&%BW`n4gYk9vhNGlo;xgiaMqnZ>-%v zM2^c;r%q{8Du7TZqUSk>$jGM4Zn5f^8H>{r&g;}c#?`u~`Hl%@dko2r9BP|(@jV`+ z_m<0Ct$gl$iyYL`W*u@dCZzL=427Xh=t?zyR^p3 ztHr3+^P`_~#dqAZUeE;(hvl-a?wO^wWpE3lR`ff0oS=X*)~Z~)OH=ddCv3{YI$ugX zb|koA`COLMe%ZPGMt-PfWk8+Bz1aN~`$-cT&z25x&)J*$BmMEp8M2}bWNG-1C;z5n zh`WeLQNu4WHMQuN@@&(YL#ySayEk^JF{df3%SUdbHs#f&HRnX*&BOS1ohMZW*Db;w zTVEow04YR&3`;1EY#`09X>r*SDIj97G6pyog|6RRr{7 z@e*_i0F(Q)41V4VaOX}E7;al;)AR2d&onxLZ!JO)eg3NHs{iYZ@@Ve33)`yW`iuj- z_CNWAysnzb$MvAd##M>{w|1Uv5&|*9Mxwk{*k`;Ps_zz+bMW92yaED?M3!?U9U z7PiJxe8~X~?{Ar#Tyl_R=||%)DY-&t*6+5T_A3U={qC}OLt|q98k&hp7@63-q^O*Y zCNy}(fw*Z>+qNQjwy`3o`B!algG7aqL~=xeZ8<2;6vsxyzm;OdZ*TN*irNsz&WL@G z=NLMV+~vwCzW9|abXa?`)$DS%C(VkQMB(9DC^UJF-a&a*Y#o5lX6=%c#M?G`?$;)h zO)5M>N*y0-o2tdM6aFLUvB_-E z!`FU`sJybYA$hO5;ivAL}F4)GsZd{pL<-rmAojaN2c>Y9< zp#*!Jpr(Lz1Yp`Ch8|&XS0e^BTpc z)u}wX9O@=h;l;NIDu%e4=^eZ$*O+ZY1sozalUCBzjnPz#^t~pYM$HyGEZtv2A~XPy zmqXBG!W~V()!PxX9~^w2!=^V9#hj1d(c7eK(zeggHP7wsi>3@hw7(!ya zSC%(Ztl+t$G2|T2kGNsaZR`D`w|=KtEePZv%EI}BP}kcSJ)NZrW8MCPdJ&$wrYE5= zwA}$b{1GtaYO&oA9CQc)fW=%zra4}t^-Vu5)w<~*ipS!gJli|O$6B~TuwSOC$t2aM zH+~RFw|yRA`GA8fcO7?+WJ2Wkye0b7*Y!7)y(MbjckP^los5h5%B$yfyHK-6KV$Y) zSqv}XN(A9|(y<{ChPf)FQ`B5uLQ|+Gnp1HRW}H5}O^&$&GOtOxMQB6T5myGpBmgu$__?TH{419HU6W#^XfdgBl=wzKjty#^CgkkerebF%!w!dZph}JvRZDkCu;R? zpDpFtP2FA|q%Imvknz^LR zV%n@O-0VVfp zyj56I*?KsUD{8t7+|4o)onq6WewjIJVf)cCJeGTTAp5>T=W1Bk0G^V|N(Wv&7Z@&_ zpUh(IwLq{z)l|O*^u}h}r{LL@9%!ZX74zse>9}&DE0XKE$vkGX(NF=mVH#>*|BImR7o5R89d@~hkM{4kOEM9S!5{KEB zd(dpnq)OA0=dn}Vr91c1CKKJ&2#e-&2-ozfaQAXhjvJ^N zdwzKem1F-Cb63+~Gb44sV{pCL?>y(xhuEdn6^=ewWNGYbGucl%bdIh1RtNsD6M}71 z;u}34l!L28`ib^m>E&q#9xN>H&a>*l^BV2o7yC218|6b<(t2zbGZ`7AxglrgUQ-jA zD;LbJW!Q;5i#8!T)FGk6y+(-OdH^Z|W50#ycK9U9YZ2fL3cmjbvFv0!&*Hk<#iMe% zlEk_Bd2J1i*20E6B#Wj&q}hUAIwxchS~hg=~{L9bM#$(l`4#D#hph;@+C!;Sdk_G3B?jb7wd}_=gOAJ$1^Y()>S&7O@b#v88 zC7X?i_*`R;Tz~Q>)L05GT@jpCwa_ekI!Z3UHK8C2YQUm_7$6w<)*CmxY`4q*{)j>J zHgeT*G50Nem+x5hqeT@3}^6vQE57Ze7@K8(lPX{Tl?GQ-+S_EG#0H|>KD^Ehv6fvFcK5&)^?8E%T z2TJk{U!@o+{fChG#^>nOM+VKf!^O2B_VIpDCLStc%*tw$bEETx#XWrnDT5mhhr?g+ZQWYG6kY;JkeqZ}<3+sz{9n@tNDO4OWw znm8N=D7sB#_-GhkX%FKJeFER_F)5*mApYA>*O2fBn^#J*C)eDO=wj)9?_LejGzdnl z<1~*-WvBF_!!+1?2eF)E z-zJCzqIRk&zBPnN_$$U2fo&V+xj*Yc;3X^x^gCE~V-%+1FC-WezA^!)KOD|1u8LAE z8|+AC5`cgC2uv$;d@?K2NJ-DO z2iVM4qq1Z&7|2Wq#$5O2qGbeT=oiWY%VRws>=VI)PKyT&vy0zAbG%w* zxoX8JFs7Z(^B-t}FfY}S!b(lm_(JEZ-lB*WBT+S|l0hc2Djaet2%gNt=Pk(VA!4_$ zId!*;84N#K#78+&-{Ks1{zlRkXRDN~`#aBJ(>#-}a==I9Dj3_LNn%jRCWkrxYs=?3 zVYtcfsYfXYCY>4q=)CZEtD9!_I5^E5A1dP`&RiX5zgVf4TkKpmnxROU$T4Z2DHvF^ zTkkx-{PDXa?iDPuptz#5QE5vfNJCR=DI{_$^w4X=#Nz?j4xjUD@m=TKQ8VGcO-@PF zvh^o@xSRDr_UP@|pg(~1`v$(NTbU%UjR=|XlCHT^+MEFh^A|6=0&HR! z-&;90E`x;9k*YdFDkK|F*MRmW zElTJONXjQmiDF4<;F?wuj|dTj_7k^G;2P$aH_u5$@Z*_@J*2P_^tT-Urz$>j-a7@%F!KQoh?RC@^Hap+bRh7h-#K+<3Zsz(AcVU|7d6uj866Cgu#h zSEJniszRshtD3V)t<3kiCP_+@?tt_0r;SkJr&FI%pE(wz!es9v-FnS%GeSngGtZ+H zlQ@yPG@gA4VoGxrT7y=XLVS=8?psx6nyx^7nRU>>GlLRo*1K$(-iP1p-22?1Z&Sfj z7sGzNock@if2k1?pV&>p>;G#v_&+&I4%A&exIm;c8-SHGTvQ$G2a0#4}JReCFOQogIGr2LlnosWXi*k*1HuAXK91v zdTBv}1ZN={B(3m+lr3bAkz_7whb96teD`VF+9cVx3HCTGBuV5tvFc<7CbRX$v3KXa zj2uj&F!Xyg2tgFZ0?sjuhb6fLQScBdH9>g(ZXdR&ee-%iJ3h|yuH%!`b|y&x#a9~e z3jp0gI*wZH%V6`cm?h1|pxnnJt17Oyt%=~Z4sVBCskNln5CTE|h_vUMxM#-Nkk&UO zXIZWjxKlN=k!dB~UDur_?nsA-DhgsKQ>6&`bhM)UvJ>I#go`59fpA1yms0L)O8M!7 zZwEERri8ex3?Xv6KB{UzuKR>QzbUo>=aO7b5Qu24%Pd5&#=w0}BS#ddR1-85d4M2* zB8I2SJPZ0}xytQDIa#khs;g0Few~R6d@y53s7f%P+}1geA%UW3jY!21HmX&{ViV$RVng8xCTZPkuVb5+5ss3(C1pVh2 z%dg8+0%BYIAU#?e8R({7W=4(RwK|R&nm?9FjLIl5AIg%rb`Dg!%exfqp18+$pU*Yp zFY=lYoPRqhl-o*q_PsK;jp5pCGdzYbeV?Bmdoui0>$YD4%0?b5jv}Q6dhDH;eAoqu z%p#ZjXlCLoSuI>$TSjRS$1KNh3CY`hKIS}Wbp|1~#@!h${F_Fnr$ajTkvhRaaM8Tm z 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
      )4cN{FI33FI)y5hc!oYlhZS|q~g z-V}Ap1ZtdzR?>RkS;d15^_W>I)?-OQtr`pYLNlPOU(@K`9okx(^8(8I;5aefQ zB(+2lN~?!@*E+a0Cl@AB8JA9?go+7M(dAsI7FuG76!h(2F$p>@?24aS`*AO8)7os9 z6|H2wWVxWV_dh!vggsb8z?q*s(E4YQm0LEJ*#xj&+oYFfn>8md7q|;nH+xrf zy6|`Sj{fI2he0crDhIk63~LK}jawpmE^}9+RIKZl6PR~1 z$9k$WL&&QYOYZq9-F^oz5?Xm_f*evKlVPIElzZ{Ivn)U6~kr9q}gBW9^!(4obqvrmJQQFYD(%eGMt`*G>i?_Ck~?;`t(NMVHL3R6M^RGrW+nC<=eqy2C9w0 zE9}QSrf2OMcAa%Rc|i=tUP*TKu38Lon6+Pf(1Vdg$pvy+qFkd*_J8hliKfHOI#} z0LbC?Ab@_Ot(HSRQGtgRuxm($$O`v&>2WG1zOnzVHu6f#yo~FDaG{V);rag78bpAu zjF1I19*h#?LNAZEMb+A1NVXJ_^rA(nb1IrJ+iq$h(!6&Wn(rDA#~g0AN}Mmj^PQmu z=-(wIU%yLOc${=D@eV4(JX0ksr~LgNaGVEvL=PN1rfCcK%<6sKuI+OB5^tQTKdCLC zPFxKT=avynY4fix=JKnS-v{4cnY69Ry?%6Avz&|x}2PJrs(8v^m%=XMH!Y4t@y;-?}<*I@t+V!#QgXZEV~+iHD+W~vY{s1k!;QPj;3S_YIo zDo*oX{Ui4{ko*!T^lTS-uJ_-|;YXbR^I85q+WAv1f6C=2r}6K_@sCvaPks6K0{T-f zf6C=gJNh$DZ^l4>;+KE#7ygvXpK|#Xe+lTzyNzu_igQ~!W#GGh13o$$H?9?5x%Ke> E0jn5Z`Tzg` literal 0 HcmV?d00001 diff --git a/documentation/sphinx/source/images/FDB_read_path.png b/documentation/sphinx/source/images/FDB_read_path.png new file mode 100644 index 0000000000000000000000000000000000000000..11a48718ae03375cf09fad5d4d3d8fd228399ec4 GIT binary patch literal 459742 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 DIExy`!o5_UR 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

      Dq{s5f)eyr~FV;`ghxLp}Q+TmqW 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

      SP7eoBoCLaj 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%0AWf<`-pT=H8$20ZWVFu%=7)W?3@fPdv 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

      DCX2IjlWh{$PkeQ9EjytTOXf?;{Jj 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

      kiVE!(>z~*!I?Oz_;=f~5Ocb;&am%H3GQTS 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 is an object that holds an asynchronous call and becomes ready when the async call returns, and *wait()* is a synchronous point when the code waits for futures to be ready. +The following code reads key k1 and k2 from database, increases k1’s value by 1 and write back k1’s new value into database. + +**Example Transaction** :: + + Line1: Transaction tr; + Line2: Future fv1 = tr.get(k1); + Line3: Future fv2 = tr.get(k2); + Line4: v1 = wait(fv1); + Line5: v2 = wait(fv2); + Line6: tr.set(v1+v2); + Line7: tr.commit(); + +The transaction starts with the read path: + +* When tr.get() is called, FDB client issues a timestamp request to proxies *if* the transaction has not set its start timestamp. The logic is the Step 1 in the read path; +* Batching timestamp requests. When another tr.get() is called, it will try to get a timestamp as well. If we let every get request to follow the Step 1 in the read path, the performance overhead (especially network communication) will be a lot. In addition, this is not necessary because a transaction has only one start timestamp. To solve this problem, client chooses to batch timestamp requests from the same transaction and only issues one timestamp request when the transaction size reaches a preconfigured threshold or when the transaction duration reaches the batching timeout threshold. + * Timestamp requests are batched: https://github.com/xumengpanda/foundationdb/blob/4086e3a2750b776cc8bfb0f0e463fe00ac905595/fdbclient/NativeAPI.actor.cpp#L3185 + * Thresholds for client to send the timestamp request: https://github.com/xumengpanda/foundationdb/blob/4086e3a2750b776cc8bfb0f0e463fe00ac905595/fdbclient/NativeAPI.actor.cpp#L3095-L3098 +* Each read request, i.e., tr.get operation in the example, will follow the read path to get data from storage servers, except that they will share the same timestamp; + * These read requests are sent to FDB cluster in parallel. The ordering of which read request will be ready first depends on requests’ network path and storage servers’ load. + * In the example, tr.get(k2) may return result earlier than tr.get(k1). +* Client will likely block at the synchronization point at Line 4, until the value is returned from the cluster. + * To maximize clients’ performance, a client can issue multiple transactions concurrently. When one transaction is blocked at the synchronization point, the client can switch to work on the other transactions concurrently. +* Client may or may not block at the synchronization point at Line 5. If tr.get(k2) returns earlier than tr.get(k1), the future fv2 is already ready when the client arrives at Line 5. +* At Line 6, client starts the write path. Because the transaction already has its start timestamp, client does not need to request for the transaction’s start time any more and can skip the Step 2-2 in the write path. +* At Line 7, client commits the transaction, which will trigger the operations from Step 2 in the write path. + + +A transaction can get more complex than the example above. + +* A transaction can have more writes operations between Line 6 and Line 7. Those writes will be buffered in client’s memory, which is the Step 1 in the write path. Only when the client calls commit(), will the rest of steps in the write path will be triggered; +* A transaction can have reads operations between Line 6 and Line 7 as well. +* A transaction may return commit_unknown_result, which indicate the transaction may or may not succeed. If application simply retries the transaction, the transaction may get executed twice. To solve this problem, the application can adds a transaction id to the transaction and check if the transaction id exists on the commit_unknown_result error. + + + +Concurrency and ordering of multiple write transactions +======================================================================= + +FDB orders concurrent transactions in increasing order of the transactions’ commit timestamp. The ordering is enforced in the timestamp generator, the concurrency control component and the durable queuing system. + +* When timestamp generator serves the commit timestamp request from a proxy, the reply includes not only the commit timestamp but also the latest commit timestamp the generator has sent out. For example, the timestamp generator just gave out the commit timestamp 50. When the next request arrives, the generator’s timestamp is 100 and the generator replies (50, 100). When the second request arrives and the generator’s timestamp is 200, the generator replies (100, 200). +* When a proxy sends conflict resolution requests to concurrency control processes or durable requests to the queuing system, each request includes both the current transaction’s commit timestamp and the previous transaction’s commit timestamp. +* Each concurrency control process and each process in the queuing system always process requests in the strict order of the request’s commit version. The semantics is do not process a request whose commit timestamp is V2 until the request at its previous commit timestamp V1 has been processed. + + +We use the following example and draw its swimlane diagram to illustrate how two write transactions are ordered in FDB. +The diagram with notes can be viewed at `here `_. + +.. image:: /images/FDB_multiple_txn_swimlane_diagram.png + +Reference +============ + +[SSI] Serializable Snapshot Isolation in PostgreSQL. https://arxiv.org/pdf/1208.4179.pdf From 2af1685bcda307c8bdebd9fd2c0fabf2825dec9c Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Sun, 22 Nov 2020 18:40:57 -0800 Subject: [PATCH 101/317] Add read write path to Technical Overview page --- documentation/sphinx/source/technical-overview.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/documentation/sphinx/source/technical-overview.rst b/documentation/sphinx/source/technical-overview.rst index c5dbf29e37..d25991478f 100644 --- a/documentation/sphinx/source/technical-overview.rst +++ b/documentation/sphinx/source/technical-overview.rst @@ -28,6 +28,8 @@ These documents explain the engineering design of FoundationDB, with detailed in * :doc:`kv-architecture` provides a description of every major role a process in FoundationDB can fulfill. +* :doc:`read-write-path` describes how FDB read and write path works. + .. toctree:: :maxdepth: 1 :titlesonly: From 6e59c8ddadeb1d781e162cf33915c250111bbfe2 Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Sun, 22 Nov 2020 21:19:11 -0800 Subject: [PATCH 102/317] Document:Fix image file path --- documentation/sphinx/source/read-write-path.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/sphinx/source/read-write-path.rst b/documentation/sphinx/source/read-write-path.rst index d65310d96b..33185bac88 100644 --- a/documentation/sphinx/source/read-write-path.rst +++ b/documentation/sphinx/source/read-write-path.rst @@ -12,7 +12,7 @@ We first discuss the read path and the write path separately for a single transa The content is based on FDB 6.2 and is true for FDB 6.3. A new timestamp proxy role is introduced in FDB 6.4+, which affects the read path. We will discuss the timestamp proxy role in the future version of this document. -.. image:: /images/FDB-read-path.png +.. image:: /images/FDB_read_path.png Components ================= @@ -98,7 +98,7 @@ Write path of a transaction Suppose a client has a write-only transaction. Fig. 2 below shows the write path in a non-HA cluster. We will discuss how a transaction with both read and write works in the next section. -.. image:: /images/FDB-write-path.png +.. image:: /images/FDB_write_path.png To simplify the explanation, the steps below do not include transaction batching on proxy, which is a typical database technique to increase transaction throughput. From aa07df6a9153e5532e0212eef4b6e388e2da7fbb Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Tue, 24 Nov 2020 00:04:10 -0800 Subject: [PATCH 103/317] Backport to 6.3 the ability to read xxhash3 checksum for sqlite pages --- fdbserver/KeyValueStoreSQLite.actor.cpp | 43 +- flow/CMakeLists.txt | 4 +- flow/xxhash.c | 42 + flow/xxhash.h | 4559 +++++++++++++++++++++++ 4 files changed, 4638 insertions(+), 10 deletions(-) create mode 100644 flow/xxhash.c create mode 100644 flow/xxhash.h diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 598bcc0f57..e2e40f4658 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -25,6 +25,7 @@ #include "fdbserver/CoroFlow.h" #include "fdbserver/Knobs.h" #include "flow/Hash3.h" +#include "flow/xxhash.h" extern "C" { #include "fdbserver/sqlite/sqliteInt.h" @@ -100,22 +101,41 @@ struct PageChecksumCodec { return true; } - SumType sum; + SumType crc32Sum; if (pSumInPage->part1 == 0) { - // part1 being 0 indicates with high probability that a CRC32 checksum + // part1 being 0 indicates with very high probability that a CRC32 checksum // was used, so check that first. If this checksum fails, there is still - // some chance the page was written with hashlittle2, so fall back to checking - // hashlittle2 - sum.part1 = 0; - sum.part2 = crc32c_append(0xfdbeefdb, static_cast(data), dataLen); - if (sum == *pSumInPage) return true; + // some chance the page was written with another checksum algorithm + crc32Sum.part1 = 0; + crc32Sum.part2 = crc32c_append(0xfdbeefdb, static_cast(data), dataLen); + if (crc32Sum == *pSumInPage) return true; } + // Try xxhash3 + SumType xxHash3Sum; + if ((pSumInPage->part1 >> 24) == 0) { + // The first 8 bits of part1 being 0 indicates with high probability that an + // xxHash3 checksum was used, so check that next. If this checksum fails, there is + // still some chance the page was written with hashlittle2, so fall back to checking + // hashlittle2 + auto xxHash3 = XXH3_64bits(data, dataLen); + xxHash3Sum.part1 = static_cast((xxHash3 >> 32) & 0x00ffffff); + xxHash3Sum.part2 = static_cast(xxHash3 & 0xffffffff); + if (xxHash3Sum == *pSumInPage) { + TEST(true); // Read xxHash3 checksum + return true; + } + } + + // Try hashlittle2 SumType hashLittle2Sum; hashLittle2Sum.part1 = pageNumber; // DO NOT CHANGE hashLittle2Sum.part2 = 0x5ca1ab1e; hashlittle2(pData, dataLen, &hashLittle2Sum.part1, &hashLittle2Sum.part2); - if (hashLittle2Sum == *pSumInPage) return true; + if (hashLittle2Sum == *pSumInPage) { + TEST(true); // Read HashLittle2 checksum + return true; + } if (!silent) { TraceEvent trEvent(SevError, "SQLitePageChecksumFailure"); @@ -127,7 +147,12 @@ struct PageChecksumCodec { .detail("PageSize", pageLen) .detail("ChecksumInPage", pSumInPage->toString()) .detail("ChecksumCalculatedHL2", hashLittle2Sum.toString()); - if (pSumInPage->part1 == 0) trEvent.detail("ChecksumCalculatedCRC", sum.toString()); + if (pSumInPage->part1 == 0) { + trEvent.detail("ChecksumCalculatedCRC", crc32Sum.toString()); + } + if (pSumInPage->part1 >> 24 == 0) { + trEvent.detail("ChecksumCalculatedXXHash3", xxHash3Sum.toString()); + } } return false; } diff --git a/flow/CMakeLists.txt b/flow/CMakeLists.txt index 30e16d8470..c25a0fd0a3 100644 --- a/flow/CMakeLists.txt +++ b/flow/CMakeLists.txt @@ -83,7 +83,9 @@ set(FLOW_SRCS serialize.h stacktrace.amalgamation.cpp stacktrace.h - version.cpp) + version.cpp + xxhash.c + xxhash.h) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/SourceVersion.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/SourceVersion.h) diff --git a/flow/xxhash.c b/flow/xxhash.c new file mode 100644 index 0000000000..eff6520fd3 --- /dev/null +++ b/flow/xxhash.c @@ -0,0 +1,42 @@ +/* + * xxHash - Extremely Fast Hash algorithm + * Copyright (C) 2012-2020 Yann Collet + * + * BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You can contact the author at: + * - xxHash homepage: https://www.xxhash.com + * - xxHash source repository: https://github.com/Cyan4973/xxHash + */ + +/* + * xxhash.c instantiates functions defined in xxhash.h + */ + +#define XXH_STATIC_LINKING_ONLY /* access advanced declarations */ +#define XXH_IMPLEMENTATION /* access definitions */ + +#include "xxhash.h" diff --git a/flow/xxhash.h b/flow/xxhash.h new file mode 100644 index 0000000000..1b0f98bb60 --- /dev/null +++ b/flow/xxhash.h @@ -0,0 +1,4559 @@ +/* + * xxHash - Extremely Fast Hash algorithm + * Header File + * Copyright (C) 2012-2020 Yann Collet + * + * BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You can contact the author at: + * - xxHash homepage: https://www.xxhash.com + * - xxHash source repository: https://github.com/Cyan4973/xxHash + */ + +/* TODO: update */ +/* Notice extracted from xxHash homepage: + +xxHash is an extremely fast hash algorithm, running at RAM speed limits. +It also successfully passes all tests from the SMHasher suite. + +Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2 Duo @3GHz) + +Name Speed Q.Score Author +xxHash 5.4 GB/s 10 +CrapWow 3.2 GB/s 2 Andrew +MumurHash 3a 2.7 GB/s 10 Austin Appleby +SpookyHash 2.0 GB/s 10 Bob Jenkins +SBox 1.4 GB/s 9 Bret Mulvey +Lookup3 1.2 GB/s 9 Bob Jenkins +SuperFastHash 1.2 GB/s 1 Paul Hsieh +CityHash64 1.05 GB/s 10 Pike & Alakuijala +FNV 0.55 GB/s 5 Fowler, Noll, Vo +CRC32 0.43 GB/s 9 +MD5-32 0.33 GB/s 10 Ronald L. Rivest +SHA1-32 0.28 GB/s 10 + +Q.Score is a measure of quality of the hash function. +It depends on successfully passing SMHasher test set. +10 is a perfect score. + +Note: SMHasher's CRC32 implementation is not the fastest one. +Other speed-oriented implementations can be faster, +especially in combination with PCLMUL instruction: +https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html?showComment=1552696407071#c3490092340461170735 + +A 64-bit version, named XXH64, is available since r35. +It offers much better speed, but for 64-bit applications only. +Name Speed on 64 bits Speed on 32 bits +XXH64 13.8 GB/s 1.9 GB/s +XXH32 6.8 GB/s 6.0 GB/s +*/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/* **************************** + * INLINE mode + ******************************/ +/*! + * XXH_INLINE_ALL (and XXH_PRIVATE_API) + * Use these build macros to inline xxhash into the target unit. + * Inlining improves performance on small inputs, especially when the length is + * expressed as a compile-time constant: + * + * https://fastcompression.blogspot.com/2018/03/xxhash-for-small-keys-impressive-power.html + * + * It also keeps xxHash symbols private to the unit, so they are not exported. + * + * Usage: + * #define XXH_INLINE_ALL + * #include "xxhash.h" + * + * Do not compile and link xxhash.o as a separate object, as it is not useful. + */ +#if (defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)) && !defined(XXH_INLINE_ALL_31684351384) +/* this section should be traversed only once */ +#define XXH_INLINE_ALL_31684351384 +/* give access to the advanced API, required to compile implementations */ +#undef XXH_STATIC_LINKING_ONLY /* avoid macro redef */ +#define XXH_STATIC_LINKING_ONLY +/* make all functions private */ +#undef XXH_PUBLIC_API +#if defined(__GNUC__) +#define XXH_PUBLIC_API static __inline __attribute__((unused)) +#elif defined(__cplusplus) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) +#define XXH_PUBLIC_API static inline +#elif defined(_MSC_VER) +#define XXH_PUBLIC_API static __inline +#else +/* note: this version may generate warnings for unused static functions */ +#define XXH_PUBLIC_API static +#endif + +/* + * This part deals with the special case where a unit wants to inline xxHash, + * but "xxhash.h" has previously been included without XXH_INLINE_ALL, such + * as part of some previously included *.h header file. + * Without further action, the new include would just be ignored, + * and functions would effectively _not_ be inlined (silent failure). + * The following macros solve this situation by prefixing all inlined names, + * avoiding naming collision with previous inclusions. + */ +#ifdef XXH_NAMESPACE +#error "XXH_INLINE_ALL with XXH_NAMESPACE is not supported" +/* + * Note: Alternative: #undef all symbols (it's a pretty large list). + * Without #error: it compiles, but functions are actually not inlined. + */ +#endif +#define XXH_NAMESPACE XXH_INLINE_ +/* + * Some identifiers (enums, type names) are not symbols, but they must + * still be renamed to avoid redeclaration. + * Alternative solution: do not redeclare them. + * However, this requires some #ifdefs, and is a more dispersed action. + * Meanwhile, renaming can be achieved in a single block + */ +#define XXH_IPREF(Id) XXH_INLINE_##Id +#define XXH_OK XXH_IPREF(XXH_OK) +#define XXH_ERROR XXH_IPREF(XXH_ERROR) +#define XXH_errorcode XXH_IPREF(XXH_errorcode) +#define XXH32_canonical_t XXH_IPREF(XXH32_canonical_t) +#define XXH64_canonical_t XXH_IPREF(XXH64_canonical_t) +#define XXH128_canonical_t XXH_IPREF(XXH128_canonical_t) +#define XXH32_state_s XXH_IPREF(XXH32_state_s) +#define XXH32_state_t XXH_IPREF(XXH32_state_t) +#define XXH64_state_s XXH_IPREF(XXH64_state_s) +#define XXH64_state_t XXH_IPREF(XXH64_state_t) +#define XXH3_state_s XXH_IPREF(XXH3_state_s) +#define XXH3_state_t XXH_IPREF(XXH3_state_t) +#define XXH128_hash_t XXH_IPREF(XXH128_hash_t) +/* Ensure the header is parsed again, even if it was previously included */ +#undef XXHASH_H_5627135585666179 +#undef XXHASH_H_STATIC_13879238742 +#endif /* XXH_INLINE_ALL || XXH_PRIVATE_API */ + +/* **************************************************************** + * Stable API + *****************************************************************/ +#ifndef XXHASH_H_5627135585666179 +#define XXHASH_H_5627135585666179 1 + +/* specific declaration modes for Windows */ +#if !defined(XXH_INLINE_ALL) && !defined(XXH_PRIVATE_API) +#if defined(WIN32) && defined(_MSC_VER) && (defined(XXH_IMPORT) || defined(XXH_EXPORT)) +#ifdef XXH_EXPORT +#define XXH_PUBLIC_API __declspec(dllexport) +#elif XXH_IMPORT +#define XXH_PUBLIC_API __declspec(dllimport) +#endif +#else +#define XXH_PUBLIC_API /* do nothing */ +#endif +#endif + +/*! + * XXH_NAMESPACE, aka Namespace Emulation: + * + * If you want to include _and expose_ xxHash functions from within your own + * library, but also want to avoid symbol collisions with other libraries which + * may also include xxHash, you can use XXH_NAMESPACE to automatically prefix + * any public symbol from xxhash library with the value of XXH_NAMESPACE + * (therefore, avoid empty or numeric values). + * + * Note that no change is required within the calling program as long as it + * includes `xxhash.h`: Regular symbol names will be automatically translated + * by this header. + */ +#ifdef XXH_NAMESPACE +#define XXH_CAT(A, B) A##B +#define XXH_NAME2(A, B) XXH_CAT(A, B) +#define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber) +/* XXH32 */ +#define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32) +#define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState) +#define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState) +#define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset) +#define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update) +#define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest) +#define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState) +#define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash) +#define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical) +/* XXH64 */ +#define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64) +#define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState) +#define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState) +#define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset) +#define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update) +#define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest) +#define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState) +#define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash) +#define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical) +/* XXH3_64bits */ +#define XXH3_64bits XXH_NAME2(XXH_NAMESPACE, XXH3_64bits) +#define XXH3_64bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecret) +#define XXH3_64bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSeed) +#define XXH3_createState XXH_NAME2(XXH_NAMESPACE, XXH3_createState) +#define XXH3_freeState XXH_NAME2(XXH_NAMESPACE, XXH3_freeState) +#define XXH3_copyState XXH_NAME2(XXH_NAMESPACE, XXH3_copyState) +#define XXH3_64bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset) +#define XXH3_64bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSeed) +#define XXH3_64bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecret) +#define XXH3_64bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_update) +#define XXH3_64bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_digest) +#define XXH3_generateSecret XXH_NAME2(XXH_NAMESPACE, XXH3_generateSecret) +/* XXH3_128bits */ +#define XXH128 XXH_NAME2(XXH_NAMESPACE, XXH128) +#define XXH3_128bits XXH_NAME2(XXH_NAMESPACE, XXH3_128bits) +#define XXH3_128bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSeed) +#define XXH3_128bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecret) +#define XXH3_128bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset) +#define XXH3_128bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSeed) +#define XXH3_128bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecret) +#define XXH3_128bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_update) +#define XXH3_128bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_digest) +#define XXH128_isEqual XXH_NAME2(XXH_NAMESPACE, XXH128_isEqual) +#define XXH128_cmp XXH_NAME2(XXH_NAMESPACE, XXH128_cmp) +#define XXH128_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH128_canonicalFromHash) +#define XXH128_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH128_hashFromCanonical) +#endif + +/* ************************************* + * Version + ***************************************/ +#define XXH_VERSION_MAJOR 0 +#define XXH_VERSION_MINOR 8 +#define XXH_VERSION_RELEASE 0 +#define XXH_VERSION_NUMBER (XXH_VERSION_MAJOR * 100 * 100 + XXH_VERSION_MINOR * 100 + XXH_VERSION_RELEASE) +XXH_PUBLIC_API unsigned XXH_versionNumber(void); + +/* **************************** + * Definitions + ******************************/ +#include /* size_t */ +typedef enum { XXH_OK = 0, XXH_ERROR } XXH_errorcode; + +/*-********************************************************************** + * 32-bit hash + ************************************************************************/ +#if !defined(__VMS) && (defined(__cplusplus) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 \ + */)) +#include +typedef uint32_t XXH32_hash_t; +#else +#include +#if UINT_MAX == 0xFFFFFFFFUL +typedef unsigned int XXH32_hash_t; +#else +#if ULONG_MAX == 0xFFFFFFFFUL +typedef unsigned long XXH32_hash_t; +#else +#error "unsupported platform: need a 32-bit type" +#endif +#endif +#endif + +/*! + * XXH32(): + * Calculate the 32-bit hash of sequence "length" bytes stored at memory address "input". + * The memory between input & input+length must be valid (allocated and read-accessible). + * "seed" can be used to alter the result predictably. + * Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark): 5.4 GB/s + * + * Note: XXH3 provides competitive speed for both 32-bit and 64-bit systems, + * and offers true 64/128 bit hash results. It provides a superior level of + * dispersion, and greatly reduces the risks of collisions. + */ +XXH_PUBLIC_API XXH32_hash_t XXH32(const void* input, size_t length, XXH32_hash_t seed); + +/******* Streaming *******/ + +/* + * Streaming functions generate the xxHash value from an incrememtal input. + * This method is slower than single-call functions, due to state management. + * For small inputs, prefer `XXH32()` and `XXH64()`, which are better optimized. + * + * An XXH state must first be allocated using `XXH*_createState()`. + * + * Start a new hash by initializing the state with a seed using `XXH*_reset()`. + * + * Then, feed the hash state by calling `XXH*_update()` as many times as necessary. + * + * The function returns an error code, with 0 meaning OK, and any other value + * meaning there is an error. + * + * Finally, a hash value can be produced anytime, by using `XXH*_digest()`. + * This function returns the nn-bits hash as an int or long long. + * + * It's still possible to continue inserting input into the hash state after a + * digest, and generate new hash values later on by invoking `XXH*_digest()`. + * + * When done, release the state using `XXH*_freeState()`. + */ + +typedef struct XXH32_state_s XXH32_state_t; /* incomplete type */ +XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void); +XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr); +XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dst_state, const XXH32_state_t* src_state); + +XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, XXH32_hash_t seed); +XXH_PUBLIC_API XXH_errorcode XXH32_update(XXH32_state_t* statePtr, const void* input, size_t length); +XXH_PUBLIC_API XXH32_hash_t XXH32_digest(const XXH32_state_t* statePtr); + +/******* Canonical representation *******/ + +/* + * The default return values from XXH functions are unsigned 32 and 64 bit + * integers. + * This the simplest and fastest format for further post-processing. + * + * However, this leaves open the question of what is the order on the byte level, + * since little and big endian conventions will store the same number differently. + * + * The canonical representation settles this issue by mandating big-endian + * convention, the same convention as human-readable numbers (large digits first). + * + * When writing hash values to storage, sending them over a network, or printing + * them, it's highly recommended to use the canonical representation to ensure + * portability across a wider range of systems, present and future. + * + * The following functions allow transformation of hash values to and from + * canonical format. + */ + +typedef struct { + unsigned char digest[4]; +} XXH32_canonical_t; +XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash); +XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src); + +#ifndef XXH_NO_LONG_LONG +/*-********************************************************************** + * 64-bit hash + ************************************************************************/ +#if !defined(__VMS) && (defined(__cplusplus) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 \ + */)) +#include +typedef uint64_t XXH64_hash_t; +#else +/* the following type must have a width of 64-bit */ +typedef unsigned long long XXH64_hash_t; +#endif + +/*! + * XXH64(): + * Returns the 64-bit hash of sequence of length @length stored at memory + * address @input. + * @seed can be used to alter the result predictably. + * + * This function usually runs faster on 64-bit systems, but slower on 32-bit + * systems (see benchmark). + * + * Note: XXH3 provides competitive speed for both 32-bit and 64-bit systems, + * and offers true 64/128 bit hash results. It provides a superior level of + * dispersion, and greatly reduces the risks of collisions. + */ +XXH_PUBLIC_API XXH64_hash_t XXH64(const void* input, size_t length, XXH64_hash_t seed); + +/******* Streaming *******/ +typedef struct XXH64_state_s XXH64_state_t; /* incomplete type */ +XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void); +XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr); +XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dst_state, const XXH64_state_t* src_state); + +XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, XXH64_hash_t seed); +XXH_PUBLIC_API XXH_errorcode XXH64_update(XXH64_state_t* statePtr, const void* input, size_t length); +XXH_PUBLIC_API XXH64_hash_t XXH64_digest(const XXH64_state_t* statePtr); + +/******* Canonical representation *******/ +typedef struct { + unsigned char digest[sizeof(XXH64_hash_t)]; +} XXH64_canonical_t; +XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash); +XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src); + +/*-********************************************************************** + * XXH3 64-bit variant + ************************************************************************/ + +/* ************************************************************************ + * XXH3 is a new hash algorithm featuring: + * - Improved speed for both small and large inputs + * - True 64-bit and 128-bit outputs + * - SIMD acceleration + * - Improved 32-bit viability + * + * Speed analysis methodology is explained here: + * + * https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html + * + * In general, expect XXH3 to run about ~2x faster on large inputs and >3x + * faster on small ones compared to XXH64, though exact differences depend on + * the platform. + * + * The algorithm is portable: Like XXH32 and XXH64, it generates the same hash + * on all platforms. + * + * It benefits greatly from SIMD and 64-bit arithmetic, but does not require it. + * + * Almost all 32-bit and 64-bit targets that can run XXH32 smoothly can run + * XXH3 at competitive speeds, even if XXH64 runs slowly. Further details are + * explained in the implementation. + * + * Optimized implementations are provided for AVX512, AVX2, SSE2, NEON, POWER8, + * ZVector and scalar targets. This can be controlled with the XXH_VECTOR macro. + * + * XXH3 offers 2 variants, _64bits and _128bits. + * When only 64 bits are needed, prefer calling the _64bits variant, as it + * reduces the amount of mixing, resulting in faster speed on small inputs. + * + * It's also generally simpler to manipulate a scalar return type than a struct. + * + * The 128-bit version adds additional strength, but it is slightly slower. + * + * The XXH3 algorithm is still in development. + * The results it produces may still change in future versions. + * + * Results produced by v0.7.x are not comparable with results from v0.7.y. + * However, the API is completely stable, and it can safely be used for + * ephemeral data (local sessions). + * + * Avoid storing values in long-term storage until the algorithm is finalized. + * XXH3's return values will be officially finalized upon reaching v0.8.0. + * + * After which, return values of XXH3 and XXH128 will no longer change in + * future versions. + * + * The API supports one-shot hashing, streaming mode, and custom secrets. + */ + +/* XXH3_64bits(): + * default 64-bit variant, using default secret and default seed of 0. + * It's the fastest variant. */ +XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* data, size_t len); + +/* + * XXH3_64bits_withSeed(): + * This variant generates a custom secret on the fly + * based on default secret altered using the `seed` value. + * While this operation is decently fast, note that it's not completely free. + * Note: seed==0 produces the same results as XXH3_64bits(). + */ +XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSeed(const void* data, size_t len, XXH64_hash_t seed); + +/* + * XXH3_64bits_withSecret(): + * It's possible to provide any blob of bytes as a "secret" to generate the hash. + * This makes it more difficult for an external actor to prepare an intentional collision. + * The main condition is that secretSize *must* be large enough (>= XXH3_SECRET_SIZE_MIN). + * However, the quality of produced hash values depends on secret's entropy. + * Technically, the secret must look like a bunch of random bytes. + * Avoid "trivial" or structured data such as repeated sequences or a text document. + * Whenever unsure about the "randomness" of the blob of bytes, + * consider relabelling it as a "custom seed" instead, + * and employ "XXH3_generateSecret()" (see below) + * to generate a high entropy secret derived from the custom seed. + */ +#define XXH3_SECRET_SIZE_MIN 136 +XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSecret(const void* data, size_t len, const void* secret, size_t secretSize); + +/******* Streaming *******/ +/* + * Streaming requires state maintenance. + * This operation costs memory and CPU. + * As a consequence, streaming is slower than one-shot hashing. + * For better performance, prefer one-shot functions whenever applicable. + */ +typedef struct XXH3_state_s XXH3_state_t; +XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void); +XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr); +XXH_PUBLIC_API void XXH3_copyState(XXH3_state_t* dst_state, const XXH3_state_t* src_state); + +/* + * XXH3_64bits_reset(): + * Initialize with default parameters. + * digest will be equivalent to `XXH3_64bits()`. + */ +XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset(XXH3_state_t* statePtr); +/* + * XXH3_64bits_reset_withSeed(): + * Generate a custom secret from `seed`, and store it into `statePtr`. + * digest will be equivalent to `XXH3_64bits_withSeed()`. + */ +XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed); +/* + * XXH3_64bits_reset_withSecret(): + * `secret` is referenced, it _must outlive_ the hash streaming session. + * Similar to one-shot API, `secretSize` must be >= `XXH3_SECRET_SIZE_MIN`, + * and the quality of produced hash values depends on secret's entropy + * (secret's content should look like a bunch of random bytes). + * When in doubt about the randomness of a candidate `secret`, + * consider employing `XXH3_generateSecret()` instead (see below). + */ +XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, + size_t secretSize); + +XXH_PUBLIC_API XXH_errorcode XXH3_64bits_update(XXH3_state_t* statePtr, const void* input, size_t length); +XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest(const XXH3_state_t* statePtr); + +/* note : canonical representation of XXH3 is the same as XXH64 + * since they both produce XXH64_hash_t values */ + +/*-********************************************************************** + * XXH3 128-bit variant + ************************************************************************/ + +typedef struct { + XXH64_hash_t low64; + XXH64_hash_t high64; +} XXH128_hash_t; + +XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* data, size_t len); +XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSeed(const void* data, size_t len, XXH64_hash_t seed); +XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSecret(const void* data, size_t len, const void* secret, + size_t secretSize); + +/******* Streaming *******/ +/* + * Streaming requires state maintenance. + * This operation costs memory and CPU. + * As a consequence, streaming is slower than one-shot hashing. + * For better performance, prefer one-shot functions whenever applicable. + * + * XXH3_128bits uses the same XXH3_state_t as XXH3_64bits(). + * Use already declared XXH3_createState() and XXH3_freeState(). + * + * All reset and streaming functions have same meaning as their 64-bit counterpart. + */ + +XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset(XXH3_state_t* statePtr); +XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed); +XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, + size_t secretSize); + +XXH_PUBLIC_API XXH_errorcode XXH3_128bits_update(XXH3_state_t* statePtr, const void* input, size_t length); +XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest(const XXH3_state_t* statePtr); + +/* Following helper functions make it possible to compare XXH128_hast_t values. + * Since XXH128_hash_t is a structure, this capability is not offered by the language. + * Note: For better performance, these functions can be inlined using XXH_INLINE_ALL */ + +/*! + * XXH128_isEqual(): + * Return: 1 if `h1` and `h2` are equal, 0 if they are not. + */ +XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2); + +/*! + * XXH128_cmp(): + * + * This comparator is compatible with stdlib's `qsort()`/`bsearch()`. + * + * return: >0 if *h128_1 > *h128_2 + * =0 if *h128_1 == *h128_2 + * <0 if *h128_1 < *h128_2 + */ +XXH_PUBLIC_API int XXH128_cmp(const void* h128_1, const void* h128_2); + +/******* Canonical representation *******/ +typedef struct { + unsigned char digest[sizeof(XXH128_hash_t)]; +} XXH128_canonical_t; +XXH_PUBLIC_API void XXH128_canonicalFromHash(XXH128_canonical_t* dst, XXH128_hash_t hash); +XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t* src); + +#endif /* XXH_NO_LONG_LONG */ + +#endif /* XXHASH_H_5627135585666179 */ + +#if defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742) +#define XXHASH_H_STATIC_13879238742 +/* **************************************************************************** + * This section contains declarations which are not guaranteed to remain stable. + * They may change in future versions, becoming incompatible with a different + * version of the library. + * These declarations should only be used with static linking. + * Never use them in association with dynamic linking! + ***************************************************************************** */ + +/* + * These definitions are only present to allow static allocation + * of XXH states, on stack or in a struct, for example. + * Never **ever** access their members directly. + */ + +struct XXH32_state_s { + XXH32_hash_t total_len_32; + XXH32_hash_t large_len; + XXH32_hash_t v1; + XXH32_hash_t v2; + XXH32_hash_t v3; + XXH32_hash_t v4; + XXH32_hash_t mem32[4]; + XXH32_hash_t memsize; + XXH32_hash_t reserved; /* never read nor write, might be removed in a future version */ +}; /* typedef'd to XXH32_state_t */ + +#ifndef XXH_NO_LONG_LONG /* defined when there is no 64-bit support */ + +struct XXH64_state_s { + XXH64_hash_t total_len; + XXH64_hash_t v1; + XXH64_hash_t v2; + XXH64_hash_t v3; + XXH64_hash_t v4; + XXH64_hash_t mem64[4]; + XXH32_hash_t memsize; + XXH32_hash_t reserved32; /* required for padding anyway */ + XXH64_hash_t reserved64; /* never read nor write, might be removed in a future version */ +}; /* typedef'd to XXH64_state_t */ + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* C11+ */ +#include +#define XXH_ALIGN(n) alignas(n) +#elif defined(__GNUC__) +#define XXH_ALIGN(n) __attribute__((aligned(n))) +#elif defined(_MSC_VER) +#define XXH_ALIGN(n) __declspec(align(n)) +#else +#define XXH_ALIGN(n) /* disabled */ +#endif + +/* Old GCC versions only accept the attribute after the type in structures. */ +#if !(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) /* C11+ */ \ + && defined(__GNUC__) +#define XXH_ALIGN_MEMBER(align, type) type XXH_ALIGN(align) +#else +#define XXH_ALIGN_MEMBER(align, type) XXH_ALIGN(align) type +#endif + +#define XXH3_INTERNALBUFFER_SIZE 256 +#define XXH3_SECRET_DEFAULT_SIZE 192 +struct XXH3_state_s { + XXH_ALIGN_MEMBER(64, XXH64_hash_t acc[8]); + /* used to store a custom secret generated from a seed */ + XXH_ALIGN_MEMBER(64, unsigned char customSecret[XXH3_SECRET_DEFAULT_SIZE]); + XXH_ALIGN_MEMBER(64, unsigned char buffer[XXH3_INTERNALBUFFER_SIZE]); + XXH32_hash_t bufferedSize; + XXH32_hash_t reserved32; + size_t nbStripesSoFar; + XXH64_hash_t totalLen; + size_t nbStripesPerBlock; + size_t secretLimit; + XXH64_hash_t seed; + XXH64_hash_t reserved64; + const unsigned char* extSecret; /* reference to external secret; + * if == NULL, use .customSecret instead */ + /* note: there may be some padding at the end due to alignment on 64 bytes */ +}; /* typedef'd to XXH3_state_t */ + +#undef XXH_ALIGN_MEMBER + +/* When the XXH3_state_t structure is merely emplaced on stack, + * it should be initialized with XXH3_INITSTATE() or a memset() + * in case its first reset uses XXH3_NNbits_reset_withSeed(). + * This init can be omitted if the first reset uses default or _withSecret mode. + * This operation isn't necessary when the state is created with XXH3_createState(). + * Note that this doesn't prepare the state for a streaming operation, + * it's still necessary to use XXH3_NNbits_reset*() afterwards. + */ +#define XXH3_INITSTATE(XXH3_state_ptr) \ + { (XXH3_state_ptr)->seed = 0; } + +/* === Experimental API === */ +/* Symbols defined below must be considered tied to a specific library version. */ + +/* + * XXH3_generateSecret(): + * + * Derive a high-entropy secret from any user-defined content, named customSeed. + * The generated secret can be used in combination with `*_withSecret()` functions. + * The `_withSecret()` variants are useful to provide a higher level of protection than 64-bit seed, + * as it becomes much more difficult for an external actor to guess how to impact the calculation logic. + * + * The function accepts as input a custom seed of any length and any content, + * and derives from it a high-entropy secret of length XXH3_SECRET_DEFAULT_SIZE + * into an already allocated buffer secretBuffer. + * The generated secret is _always_ XXH_SECRET_DEFAULT_SIZE bytes long. + * + * The generated secret can then be used with any `*_withSecret()` variant. + * Functions `XXH3_128bits_withSecret()`, `XXH3_64bits_withSecret()`, + * `XXH3_128bits_reset_withSecret()` and `XXH3_64bits_reset_withSecret()` + * are part of this list. They all accept a `secret` parameter + * which must be very long for implementation reasons (>= XXH3_SECRET_SIZE_MIN) + * _and_ feature very high entropy (consist of random-looking bytes). + * These conditions can be a high bar to meet, so + * this function can be used to generate a secret of proper quality. + * + * customSeed can be anything. It can have any size, even small ones, + * and its content can be anything, even stupidly "low entropy" source such as a bunch of zeroes. + * The resulting `secret` will nonetheless provide all expected qualities. + * + * Supplying NULL as the customSeed copies the default secret into `secretBuffer`. + * When customSeedSize > 0, supplying NULL as customSeed is undefined behavior. + */ +XXH_PUBLIC_API void XXH3_generateSecret(void* secretBuffer, const void* customSeed, size_t customSeedSize); + +/* simple short-cut to pre-selected XXH3_128bits variant */ +XXH_PUBLIC_API XXH128_hash_t XXH128(const void* data, size_t len, XXH64_hash_t seed); + +#endif /* XXH_NO_LONG_LONG */ + +#if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) +#define XXH_IMPLEMENTATION +#endif + +#endif /* defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742) */ + +/* ======================================================================== */ +/* ======================================================================== */ +/* ======================================================================== */ + +/*-********************************************************************** + * xxHash implementation + *-********************************************************************** + * xxHash's implementation used to be hosted inside xxhash.c. + * + * However, inlining requires implementation to be visible to the compiler, + * hence be included alongside the header. + * Previously, implementation was hosted inside xxhash.c, + * which was then #included when inlining was activated. + * This construction created issues with a few build and install systems, + * as it required xxhash.c to be stored in /include directory. + * + * xxHash implementation is now directly integrated within xxhash.h. + * As a consequence, xxhash.c is no longer needed in /include. + * + * xxhash.c is still available and is still useful. + * In a "normal" setup, when xxhash is not inlined, + * xxhash.h only exposes the prototypes and public symbols, + * while xxhash.c can be built into an object file xxhash.o + * which can then be linked into the final binary. + ************************************************************************/ + +#if (defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) || defined(XXH_IMPLEMENTATION)) && \ + !defined(XXH_IMPLEM_13a8737387) +#define XXH_IMPLEM_13a8737387 + +/* ************************************* + * Tuning parameters + ***************************************/ +/*! + * XXH_FORCE_MEMORY_ACCESS: + * By default, access to unaligned memory is controlled by `memcpy()`, which is + * safe and portable. + * + * Unfortunately, on some target/compiler combinations, the generated assembly + * is sub-optimal. + * + * The below switch allow selection of a different access method + * in the search for improved performance. + * Method 0 (default): + * Use `memcpy()`. Safe and portable. Default. + * Method 1: + * `__attribute__((packed))` statement. It depends on compiler extensions + * and is therefore not portable. + * This method is safe if your compiler supports it, and *generally* as + * fast or faster than `memcpy`. + * Method 2: + * Direct access via cast. This method doesn't depend on the compiler but + * violates the C standard. + * It can generate buggy code on targets which do not support unaligned + * memory accesses. + * But in some circumstances, it's the only known way to get the most + * performance (example: GCC + ARMv6) + * Method 3: + * Byteshift. This can generate the best code on old compilers which don't + * inline small `memcpy()` calls, and it might also be faster on big-endian + * systems which lack a native byteswap instruction. + * See https://stackoverflow.com/a/32095106/646947 for details. + * Prefer these methods in priority order (0 > 1 > 2 > 3) + */ +#ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */ +#if !defined(__clang__) && defined(__GNUC__) && defined(__ARM_FEATURE_UNALIGNED) && defined(__ARM_ARCH) && \ + (__ARM_ARCH == 6) +#define XXH_FORCE_MEMORY_ACCESS 2 +#elif !defined(__clang__) && ((defined(__INTEL_COMPILER) && !defined(_WIN32)) || \ + (defined(__GNUC__) && (defined(__ARM_ARCH) && __ARM_ARCH >= 7))) +#define XXH_FORCE_MEMORY_ACCESS 1 +#endif +#endif + +/*! + * XXH_ACCEPT_NULL_INPUT_POINTER: + * If the input pointer is NULL, xxHash's default behavior is to dereference it, + * triggering a segfault. + * When this macro is enabled, xxHash actively checks the input for a null pointer. + * If it is, the result for null input pointers is the same as a zero-length input. + */ +#ifndef XXH_ACCEPT_NULL_INPUT_POINTER /* can be defined externally */ +#define XXH_ACCEPT_NULL_INPUT_POINTER 0 +#endif + +/*! + * XXH_FORCE_ALIGN_CHECK: + * This is an important performance trick + * for architectures without decent unaligned memory access performance. + * It checks for input alignment, and when conditions are met, + * uses a "fast path" employing direct 32-bit/64-bit read, + * resulting in _dramatically faster_ read speed. + * + * The check costs one initial branch per hash, which is generally negligible, but not zero. + * Moreover, it's not useful to generate binary for an additional code path + * if memory access uses same instruction for both aligned and unaligned adresses. + * + * In these cases, the alignment check can be removed by setting this macro to 0. + * Then the code will always use unaligned memory access. + * Align check is automatically disabled on x86, x64 & arm64, + * which are platforms known to offer good unaligned memory accesses performance. + * + * This option does not affect XXH3 (only XXH32 and XXH64). + */ +#ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */ +#if defined(__i386) || defined(__x86_64__) || defined(__aarch64__) || defined(_M_IX86) || defined(_M_X64) || \ + defined(_M_ARM64) /* visual */ +#define XXH_FORCE_ALIGN_CHECK 0 +#else +#define XXH_FORCE_ALIGN_CHECK 1 +#endif +#endif + +/*! + * XXH_NO_INLINE_HINTS: + * + * By default, xxHash tries to force the compiler to inline almost all internal + * functions. + * + * This can usually improve performance due to reduced jumping and improved + * constant folding, but significantly increases the size of the binary which + * might not be favorable. + * + * Additionally, sometimes the forced inlining can be detrimental to performance, + * depending on the architecture. + * + * XXH_NO_INLINE_HINTS marks all internal functions as static, giving the + * compiler full control on whether to inline or not. + * + * When not optimizing (-O0), optimizing for size (-Os, -Oz), or using + * -fno-inline with GCC or Clang, this will automatically be defined. + */ +#ifndef XXH_NO_INLINE_HINTS +#if defined(__OPTIMIZE_SIZE__) /* -Os, -Oz */ \ + || defined(__NO_INLINE__) /* -O0, -fno-inline */ +#define XXH_NO_INLINE_HINTS 1 +#else +#define XXH_NO_INLINE_HINTS 0 +#endif +#endif + +/*! + * XXH_REROLL: + * Whether to reroll XXH32_finalize, and XXH64_finalize, + * instead of using an unrolled jump table/if statement loop. + * + * This is automatically defined on -Os/-Oz on GCC and Clang. + */ +#ifndef XXH_REROLL +#if defined(__OPTIMIZE_SIZE__) +#define XXH_REROLL 1 +#else +#define XXH_REROLL 0 +#endif +#endif + +/* ************************************* + * Includes & Memory related functions + ***************************************/ +/*! + * Modify the local functions below should you wish to use + * different memory routines for malloc() and free() + */ +#include + +static void* XXH_malloc(size_t s) { + return malloc(s); +} +static void XXH_free(void* p) { + free(p); +} + +/*! and for memcpy() */ +#include +static void* XXH_memcpy(void* dest, const void* src, size_t size) { + return memcpy(dest, src, size); +} + +#include /* ULLONG_MAX */ + +/* ************************************* + * Compiler Specific Options + ***************************************/ +#ifdef _MSC_VER /* Visual Studio warning fix */ +#pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ +#endif + +#if XXH_NO_INLINE_HINTS /* disable inlining hints */ +#if defined(__GNUC__) +#define XXH_FORCE_INLINE static __attribute__((unused)) +#else +#define XXH_FORCE_INLINE static +#endif +#define XXH_NO_INLINE static +/* enable inlining hints */ +#elif defined(_MSC_VER) /* Visual Studio */ +#define XXH_FORCE_INLINE static __forceinline +#define XXH_NO_INLINE static __declspec(noinline) +#elif defined(__GNUC__) +#define XXH_FORCE_INLINE static __inline__ __attribute__((always_inline, unused)) +#define XXH_NO_INLINE static __attribute__((noinline)) +#elif defined(__cplusplus) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) /* C99 */ +#define XXH_FORCE_INLINE static inline +#define XXH_NO_INLINE static +#else +#define XXH_FORCE_INLINE static +#define XXH_NO_INLINE static +#endif + +/* ************************************* + * Debug + ***************************************/ +/* + * XXH_DEBUGLEVEL is expected to be defined externally, typically via the + * compiler's command line options. The value must be a number. + */ +#ifndef XXH_DEBUGLEVEL +#ifdef DEBUGLEVEL /* backwards compat */ +#define XXH_DEBUGLEVEL DEBUGLEVEL +#else +#define XXH_DEBUGLEVEL 0 +#endif +#endif + +#if (XXH_DEBUGLEVEL >= 1) +#include /* note: can still be disabled with NDEBUG */ +#define XXH_ASSERT(c) assert(c) +#else +#define XXH_ASSERT(c) ((void)0) +#endif + +/* note: use after variable declarations */ +#define XXH_STATIC_ASSERT(c) \ + do { \ + enum { XXH_sa = 1 / (int)(!!(c)) }; \ + } while (0) + +/* ************************************* + * Basic Types + ***************************************/ +#if !defined(__VMS) && (defined(__cplusplus) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 \ + */)) +#include +typedef uint8_t xxh_u8; +#else +typedef unsigned char xxh_u8; +#endif +typedef XXH32_hash_t xxh_u32; + +#ifdef XXH_OLD_NAMES +#define BYTE xxh_u8 +#define U8 xxh_u8 +#define U32 xxh_u32 +#endif + +/* *** Memory access *** */ + +#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS == 3)) +/* + * Manual byteshift. Best for old compilers which don't inline memcpy. + * We actually directly use XXH_readLE32 and XXH_readBE32. + */ +#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS == 2)) + +/* + * Force direct memory access. Only works on CPU which support unaligned memory + * access in hardware. + */ +static xxh_u32 XXH_read32(const void* memPtr) { + return *(const xxh_u32*)memPtr; +} + +#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS == 1)) + +/* + * __pack instructions are safer but compiler specific, hence potentially + * problematic for some compilers. + * + * Currently only defined for GCC and ICC. + */ +#ifdef XXH_OLD_NAMES +typedef union { + xxh_u32 u32; +} __attribute__((packed)) unalign; +#endif +static xxh_u32 XXH_read32(const void* ptr) { + typedef union { + xxh_u32 u32; + } __attribute__((packed)) xxh_unalign; + return ((const xxh_unalign*)ptr)->u32; +} + +#else + +/* + * Portable and safe solution. Generally efficient. + * see: https://stackoverflow.com/a/32095106/646947 + */ +static xxh_u32 XXH_read32(const void* memPtr) { + xxh_u32 val; + memcpy(&val, memPtr, sizeof(val)); + return val; +} + +#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */ + +/* *** Endianess *** */ +typedef enum { XXH_bigEndian = 0, XXH_littleEndian = 1 } XXH_endianess; + +/*! + * XXH_CPU_LITTLE_ENDIAN: + * Defined to 1 if the target is little endian, or 0 if it is big endian. + * It can be defined externally, for example on the compiler command line. + * + * If it is not defined, a runtime check (which is usually constant folded) + * is used instead. + */ +#ifndef XXH_CPU_LITTLE_ENDIAN +/* + * Try to detect endianness automatically, to avoid the nonstandard behavior + * in `XXH_isLittleEndian()` + */ +#if defined(_WIN32) /* Windows is always little endian */ \ + || defined(__LITTLE_ENDIAN__) || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +#define XXH_CPU_LITTLE_ENDIAN 1 +#elif defined(__BIG_ENDIAN__) || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#define XXH_CPU_LITTLE_ENDIAN 0 +#else +/* + * runtime test, presumed to simplify to a constant by compiler + */ +static int XXH_isLittleEndian(void) { + /* + * Portable and well-defined behavior. + * Don't use static: it is detrimental to performance. + */ + const union { + xxh_u32 u; + xxh_u8 c[4]; + } one = { 1 }; + return one.c[0]; +} +#define XXH_CPU_LITTLE_ENDIAN XXH_isLittleEndian() +#endif +#endif + +/* **************************************** + * Compiler-specific Functions and Macros + ******************************************/ +#define XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) + +#ifdef __has_builtin +#define XXH_HAS_BUILTIN(x) __has_builtin(x) +#else +#define XXH_HAS_BUILTIN(x) 0 +#endif + +#if !defined(NO_CLANG_BUILTIN) && XXH_HAS_BUILTIN(__builtin_rotateleft32) && XXH_HAS_BUILTIN(__builtin_rotateleft64) +#define XXH_rotl32 __builtin_rotateleft32 +#define XXH_rotl64 __builtin_rotateleft64 +/* Note: although _rotl exists for minGW (GCC under windows), performance seems poor */ +#elif defined(_MSC_VER) +#define XXH_rotl32(x, r) _rotl(x, r) +#define XXH_rotl64(x, r) _rotl64(x, r) +#else +#define XXH_rotl32(x, r) (((x) << (r)) | ((x) >> (32 - (r)))) +#define XXH_rotl64(x, r) (((x) << (r)) | ((x) >> (64 - (r)))) +#endif + +#if defined(_MSC_VER) /* Visual Studio */ +#define XXH_swap32 _byteswap_ulong +#elif XXH_GCC_VERSION >= 403 +#define XXH_swap32 __builtin_bswap32 +#else +static xxh_u32 XXH_swap32(xxh_u32 x) { + return ((x << 24) & 0xff000000) | ((x << 8) & 0x00ff0000) | ((x >> 8) & 0x0000ff00) | ((x >> 24) & 0x000000ff); +} +#endif + +/* *************************** + * Memory reads + *****************************/ +typedef enum { XXH_aligned, XXH_unaligned } XXH_alignment; + +/* + * XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load. + * + * This is ideal for older compilers which don't inline memcpy. + */ +#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS == 3)) + +XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* memPtr) { + const xxh_u8* bytePtr = (const xxh_u8*)memPtr; + return bytePtr[0] | ((xxh_u32)bytePtr[1] << 8) | ((xxh_u32)bytePtr[2] << 16) | ((xxh_u32)bytePtr[3] << 24); +} + +XXH_FORCE_INLINE xxh_u32 XXH_readBE32(const void* memPtr) { + const xxh_u8* bytePtr = (const xxh_u8*)memPtr; + return bytePtr[3] | ((xxh_u32)bytePtr[2] << 8) | ((xxh_u32)bytePtr[1] << 16) | ((xxh_u32)bytePtr[0] << 24); +} + +#else +XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* ptr) { + return XXH_CPU_LITTLE_ENDIAN ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr)); +} + +static xxh_u32 XXH_readBE32(const void* ptr) { + return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr); +} +#endif + +XXH_FORCE_INLINE xxh_u32 XXH_readLE32_align(const void* ptr, XXH_alignment align) { + if (align == XXH_unaligned) { + return XXH_readLE32(ptr); + } else { + return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u32*)ptr : XXH_swap32(*(const xxh_u32*)ptr); + } +} + +/* ************************************* + * Misc + ***************************************/ +XXH_PUBLIC_API unsigned XXH_versionNumber(void) { + return XXH_VERSION_NUMBER; +} + +/* ******************************************************************* + * 32-bit hash functions + *********************************************************************/ +static const xxh_u32 XXH_PRIME32_1 = 0x9E3779B1U; /* 0b10011110001101110111100110110001 */ +static const xxh_u32 XXH_PRIME32_2 = 0x85EBCA77U; /* 0b10000101111010111100101001110111 */ +static const xxh_u32 XXH_PRIME32_3 = 0xC2B2AE3DU; /* 0b11000010101100101010111000111101 */ +static const xxh_u32 XXH_PRIME32_4 = 0x27D4EB2FU; /* 0b00100111110101001110101100101111 */ +static const xxh_u32 XXH_PRIME32_5 = 0x165667B1U; /* 0b00010110010101100110011110110001 */ + +#ifdef XXH_OLD_NAMES +#define PRIME32_1 XXH_PRIME32_1 +#define PRIME32_2 XXH_PRIME32_2 +#define PRIME32_3 XXH_PRIME32_3 +#define PRIME32_4 XXH_PRIME32_4 +#define PRIME32_5 XXH_PRIME32_5 +#endif + +static xxh_u32 XXH32_round(xxh_u32 acc, xxh_u32 input) { + acc += input * XXH_PRIME32_2; + acc = XXH_rotl32(acc, 13); + acc *= XXH_PRIME32_1; +#if defined(__GNUC__) && defined(__SSE4_1__) && !defined(XXH_ENABLE_AUTOVECTORIZE) + /* + * UGLY HACK: + * This inline assembly hack forces acc into a normal register. This is the + * only thing that prevents GCC and Clang from autovectorizing the XXH32 + * loop (pragmas and attributes don't work for some resason) without globally + * disabling SSE4.1. + * + * The reason we want to avoid vectorization is because despite working on + * 4 integers at a time, there are multiple factors slowing XXH32 down on + * SSE4: + * - There's a ridiculous amount of lag from pmulld (10 cycles of latency on + * newer chips!) making it slightly slower to multiply four integers at + * once compared to four integers independently. Even when pmulld was + * fastest, Sandy/Ivy Bridge, it is still not worth it to go into SSE + * just to multiply unless doing a long operation. + * + * - Four instructions are required to rotate, + * movqda tmp, v // not required with VEX encoding + * pslld tmp, 13 // tmp <<= 13 + * psrld v, 19 // x >>= 19 + * por v, tmp // x |= tmp + * compared to one for scalar: + * roll v, 13 // reliably fast across the board + * shldl v, v, 13 // Sandy Bridge and later prefer this for some reason + * + * - Instruction level parallelism is actually more beneficial here because + * the SIMD actually serializes this operation: While v1 is rotating, v2 + * can load data, while v3 can multiply. SSE forces them to operate + * together. + * + * How this hack works: + * __asm__("" // Declare an assembly block but don't declare any instructions + * : // However, as an Input/Output Operand, + * "+r" // constrain a read/write operand (+) as a general purpose register (r). + * (acc) // and set acc as the operand + * ); + * + * Because of the 'r', the compiler has promised that seed will be in a + * general purpose register and the '+' says that it will be 'read/write', + * so it has to assume it has changed. It is like volatile without all the + * loads and stores. + * + * Since the argument has to be in a normal register (not an SSE register), + * each time XXH32_round is called, it is impossible to vectorize. + */ + __asm__("" : "+r"(acc)); +#endif + return acc; +} + +/* mix all bits */ +static xxh_u32 XXH32_avalanche(xxh_u32 h32) { + h32 ^= h32 >> 15; + h32 *= XXH_PRIME32_2; + h32 ^= h32 >> 13; + h32 *= XXH_PRIME32_3; + h32 ^= h32 >> 16; + return (h32); +} + +#define XXH_get32bits(p) XXH_readLE32_align(p, align) + +static xxh_u32 XXH32_finalize(xxh_u32 h32, const xxh_u8* ptr, size_t len, XXH_alignment align) { +#define XXH_PROCESS1 \ + do { \ + h32 += (*ptr++) * XXH_PRIME32_5; \ + h32 = XXH_rotl32(h32, 11) * XXH_PRIME32_1; \ + } while (0) + +#define XXH_PROCESS4 \ + do { \ + h32 += XXH_get32bits(ptr) * XXH_PRIME32_3; \ + ptr += 4; \ + h32 = XXH_rotl32(h32, 17) * XXH_PRIME32_4; \ + } while (0) + + /* Compact rerolled version */ + if (XXH_REROLL) { + len &= 15; + while (len >= 4) { + XXH_PROCESS4; + len -= 4; + } + while (len > 0) { + XXH_PROCESS1; + --len; + } + return XXH32_avalanche(h32); + } else { + switch (len & 15) /* or switch(bEnd - p) */ { + case 12: + XXH_PROCESS4; + /* fallthrough */ + case 8: + XXH_PROCESS4; + /* fallthrough */ + case 4: + XXH_PROCESS4; + return XXH32_avalanche(h32); + + case 13: + XXH_PROCESS4; + /* fallthrough */ + case 9: + XXH_PROCESS4; + /* fallthrough */ + case 5: + XXH_PROCESS4; + XXH_PROCESS1; + return XXH32_avalanche(h32); + + case 14: + XXH_PROCESS4; + /* fallthrough */ + case 10: + XXH_PROCESS4; + /* fallthrough */ + case 6: + XXH_PROCESS4; + XXH_PROCESS1; + XXH_PROCESS1; + return XXH32_avalanche(h32); + + case 15: + XXH_PROCESS4; + /* fallthrough */ + case 11: + XXH_PROCESS4; + /* fallthrough */ + case 7: + XXH_PROCESS4; + /* fallthrough */ + case 3: + XXH_PROCESS1; + /* fallthrough */ + case 2: + XXH_PROCESS1; + /* fallthrough */ + case 1: + XXH_PROCESS1; + /* fallthrough */ + case 0: + return XXH32_avalanche(h32); + } + XXH_ASSERT(0); + return h32; /* reaching this point is deemed impossible */ + } +} + +#ifdef XXH_OLD_NAMES +#define PROCESS1 XXH_PROCESS1 +#define PROCESS4 XXH_PROCESS4 +#else +#undef XXH_PROCESS1 +#undef XXH_PROCESS4 +#endif + +XXH_FORCE_INLINE xxh_u32 XXH32_endian_align(const xxh_u8* input, size_t len, xxh_u32 seed, XXH_alignment align) { + const xxh_u8* bEnd = input + len; + xxh_u32 h32; + +#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER >= 1) + if (input == NULL) { + len = 0; + bEnd = input = (const xxh_u8*)(size_t)16; + } +#endif + + if (len >= 16) { + const xxh_u8* const limit = bEnd - 15; + xxh_u32 v1 = seed + XXH_PRIME32_1 + XXH_PRIME32_2; + xxh_u32 v2 = seed + XXH_PRIME32_2; + xxh_u32 v3 = seed + 0; + xxh_u32 v4 = seed - XXH_PRIME32_1; + + do { + v1 = XXH32_round(v1, XXH_get32bits(input)); + input += 4; + v2 = XXH32_round(v2, XXH_get32bits(input)); + input += 4; + v3 = XXH32_round(v3, XXH_get32bits(input)); + input += 4; + v4 = XXH32_round(v4, XXH_get32bits(input)); + input += 4; + } while (input < limit); + + h32 = XXH_rotl32(v1, 1) + XXH_rotl32(v2, 7) + XXH_rotl32(v3, 12) + XXH_rotl32(v4, 18); + } else { + h32 = seed + XXH_PRIME32_5; + } + + h32 += (xxh_u32)len; + + return XXH32_finalize(h32, input, len & 15, align); +} + +XXH_PUBLIC_API XXH32_hash_t XXH32(const void* input, size_t len, XXH32_hash_t seed) { +#if 0 + /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ + XXH32_state_t state; + XXH32_reset(&state, seed); + XXH32_update(&state, (const xxh_u8*)input, len); + return XXH32_digest(&state); + +#else + + if (XXH_FORCE_ALIGN_CHECK) { + if ((((size_t)input) & 3) == 0) { /* Input is 4-bytes aligned, leverage the speed benefit */ + return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_aligned); + } + } + + return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned); +#endif +} + +/******* Hash streaming *******/ + +XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void) { + return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t)); +} +XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr) { + XXH_free(statePtr); + return XXH_OK; +} + +XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dstState, const XXH32_state_t* srcState) { + memcpy(dstState, srcState, sizeof(*dstState)); +} + +XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, XXH32_hash_t seed) { + XXH32_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */ + memset(&state, 0, sizeof(state)); + state.v1 = seed + XXH_PRIME32_1 + XXH_PRIME32_2; + state.v2 = seed + XXH_PRIME32_2; + state.v3 = seed + 0; + state.v4 = seed - XXH_PRIME32_1; + /* do not write into reserved, planned to be removed in a future version */ + memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved)); + return XXH_OK; +} + +XXH_PUBLIC_API XXH_errorcode XXH32_update(XXH32_state_t* state, const void* input, size_t len) { + if (input == NULL) +#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER >= 1) + return XXH_OK; +#else + return XXH_ERROR; +#endif + + { + const xxh_u8* p = (const xxh_u8*)input; + const xxh_u8* const bEnd = p + len; + + state->total_len_32 += (XXH32_hash_t)len; + state->large_len |= (XXH32_hash_t)((len >= 16) | (state->total_len_32 >= 16)); + + if (state->memsize + len < 16) { /* fill in tmp buffer */ + XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, len); + state->memsize += (XXH32_hash_t)len; + return XXH_OK; + } + + if (state->memsize) { /* some data left from previous update */ + XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, 16 - state->memsize); + { + const xxh_u32* p32 = state->mem32; + state->v1 = XXH32_round(state->v1, XXH_readLE32(p32)); + p32++; + state->v2 = XXH32_round(state->v2, XXH_readLE32(p32)); + p32++; + state->v3 = XXH32_round(state->v3, XXH_readLE32(p32)); + p32++; + state->v4 = XXH32_round(state->v4, XXH_readLE32(p32)); + } + p += 16 - state->memsize; + state->memsize = 0; + } + + if (p <= bEnd - 16) { + const xxh_u8* const limit = bEnd - 16; + xxh_u32 v1 = state->v1; + xxh_u32 v2 = state->v2; + xxh_u32 v3 = state->v3; + xxh_u32 v4 = state->v4; + + do { + v1 = XXH32_round(v1, XXH_readLE32(p)); + p += 4; + v2 = XXH32_round(v2, XXH_readLE32(p)); + p += 4; + v3 = XXH32_round(v3, XXH_readLE32(p)); + p += 4; + v4 = XXH32_round(v4, XXH_readLE32(p)); + p += 4; + } while (p <= limit); + + state->v1 = v1; + state->v2 = v2; + state->v3 = v3; + state->v4 = v4; + } + + if (p < bEnd) { + XXH_memcpy(state->mem32, p, (size_t)(bEnd - p)); + state->memsize = (unsigned)(bEnd - p); + } + } + + return XXH_OK; +} + +XXH_PUBLIC_API XXH32_hash_t XXH32_digest(const XXH32_state_t* state) { + xxh_u32 h32; + + if (state->large_len) { + h32 = + XXH_rotl32(state->v1, 1) + XXH_rotl32(state->v2, 7) + XXH_rotl32(state->v3, 12) + XXH_rotl32(state->v4, 18); + } else { + h32 = state->v3 /* == seed */ + XXH_PRIME32_5; + } + + h32 += state->total_len_32; + + return XXH32_finalize(h32, (const xxh_u8*)state->mem32, state->memsize, XXH_aligned); +} + +/******* Canonical representation *******/ + +/* + * The default return values from XXH functions are unsigned 32 and 64 bit + * integers. + * + * The canonical representation uses big endian convention, the same convention + * as human-readable numbers (large digits first). + * + * This way, hash values can be written into a file or buffer, remaining + * comparable across different systems. + * + * The following functions allow transformation of hash values to and from their + * canonical format. + */ +XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash) { + XXH_STATIC_ASSERT(sizeof(XXH32_canonical_t) == sizeof(XXH32_hash_t)); + if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap32(hash); + memcpy(dst, &hash, sizeof(*dst)); +} + +XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src) { + return XXH_readBE32(src); +} + +#ifndef XXH_NO_LONG_LONG + +/* ******************************************************************* + * 64-bit hash functions + *********************************************************************/ + +/******* Memory access *******/ + +typedef XXH64_hash_t xxh_u64; + +#ifdef XXH_OLD_NAMES +#define U64 xxh_u64 +#endif + +/*! + * XXH_REROLL_XXH64: + * Whether to reroll the XXH64_finalize() loop. + * + * Just like XXH32, we can unroll the XXH64_finalize() loop. This can be a + * performance gain on 64-bit hosts, as only one jump is required. + * + * However, on 32-bit hosts, because arithmetic needs to be done with two 32-bit + * registers, and 64-bit arithmetic needs to be simulated, it isn't beneficial + * to unroll. The code becomes ridiculously large (the largest function in the + * binary on i386!), and rerolling it saves anywhere from 3kB to 20kB. It is + * also slightly faster because it fits into cache better and is more likely + * to be inlined by the compiler. + * + * If XXH_REROLL is defined, this is ignored and the loop is always rerolled. + */ +#ifndef XXH_REROLL_XXH64 +#if (defined(__ILP32__) || defined(_ILP32)) /* ILP32 is often defined on 32-bit GCC family */ \ + || !(defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) /* x86-64 */ \ + || defined(_M_ARM64) || defined(__aarch64__) || defined(__arm64__) /* aarch64 */ \ + || defined(__PPC64__) || defined(__PPC64LE__) || defined(__ppc64__) || defined(__powerpc64__) /* ppc64 */ \ + || defined(__mips64__) || defined(__mips64)) /* mips64 */ \ + || (!defined(SIZE_MAX) || SIZE_MAX < ULLONG_MAX) /* check limits */ +#define XXH_REROLL_XXH64 1 +#else +#define XXH_REROLL_XXH64 0 +#endif +#endif /* !defined(XXH_REROLL_XXH64) */ + +#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS == 3)) +/* + * Manual byteshift. Best for old compilers which don't inline memcpy. + * We actually directly use XXH_readLE64 and XXH_readBE64. + */ +#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS == 2)) + +/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */ +static xxh_u64 XXH_read64(const void* memPtr) { + return *(const xxh_u64*)memPtr; +} + +#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS == 1)) + +/* + * __pack instructions are safer, but compiler specific, hence potentially + * problematic for some compilers. + * + * Currently only defined for GCC and ICC. + */ +#ifdef XXH_OLD_NAMES +typedef union { + xxh_u32 u32; + xxh_u64 u64; +} __attribute__((packed)) unalign64; +#endif +static xxh_u64 XXH_read64(const void* ptr) { + typedef union { + xxh_u32 u32; + xxh_u64 u64; + } __attribute__((packed)) xxh_unalign64; + return ((const xxh_unalign64*)ptr)->u64; +} + +#else + +/* + * Portable and safe solution. Generally efficient. + * see: https://stackoverflow.com/a/32095106/646947 + */ +static xxh_u64 XXH_read64(const void* memPtr) { + xxh_u64 val; + memcpy(&val, memPtr, sizeof(val)); + return val; +} + +#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */ + +#if defined(_MSC_VER) /* Visual Studio */ +#define XXH_swap64 _byteswap_uint64 +#elif XXH_GCC_VERSION >= 403 +#define XXH_swap64 __builtin_bswap64 +#else +static xxh_u64 XXH_swap64(xxh_u64 x) { + return ((x << 56) & 0xff00000000000000ULL) | ((x << 40) & 0x00ff000000000000ULL) | + ((x << 24) & 0x0000ff0000000000ULL) | ((x << 8) & 0x000000ff00000000ULL) | + ((x >> 8) & 0x00000000ff000000ULL) | ((x >> 24) & 0x0000000000ff0000ULL) | + ((x >> 40) & 0x000000000000ff00ULL) | ((x >> 56) & 0x00000000000000ffULL); +} +#endif + +/* XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load. */ +#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS == 3)) + +XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* memPtr) { + const xxh_u8* bytePtr = (const xxh_u8*)memPtr; + return bytePtr[0] | ((xxh_u64)bytePtr[1] << 8) | ((xxh_u64)bytePtr[2] << 16) | ((xxh_u64)bytePtr[3] << 24) | + ((xxh_u64)bytePtr[4] << 32) | ((xxh_u64)bytePtr[5] << 40) | ((xxh_u64)bytePtr[6] << 48) | + ((xxh_u64)bytePtr[7] << 56); +} + +XXH_FORCE_INLINE xxh_u64 XXH_readBE64(const void* memPtr) { + const xxh_u8* bytePtr = (const xxh_u8*)memPtr; + return bytePtr[7] | ((xxh_u64)bytePtr[6] << 8) | ((xxh_u64)bytePtr[5] << 16) | ((xxh_u64)bytePtr[4] << 24) | + ((xxh_u64)bytePtr[3] << 32) | ((xxh_u64)bytePtr[2] << 40) | ((xxh_u64)bytePtr[1] << 48) | + ((xxh_u64)bytePtr[0] << 56); +} + +#else +XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* ptr) { + return XXH_CPU_LITTLE_ENDIAN ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr)); +} + +static xxh_u64 XXH_readBE64(const void* ptr) { + return XXH_CPU_LITTLE_ENDIAN ? XXH_swap64(XXH_read64(ptr)) : XXH_read64(ptr); +} +#endif + +XXH_FORCE_INLINE xxh_u64 XXH_readLE64_align(const void* ptr, XXH_alignment align) { + if (align == XXH_unaligned) + return XXH_readLE64(ptr); + else + return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u64*)ptr : XXH_swap64(*(const xxh_u64*)ptr); +} + +/******* xxh64 *******/ + +static const xxh_u64 XXH_PRIME64_1 = + 0x9E3779B185EBCA87ULL; /* 0b1001111000110111011110011011000110000101111010111100101010000111 */ +static const xxh_u64 XXH_PRIME64_2 = + 0xC2B2AE3D27D4EB4FULL; /* 0b1100001010110010101011100011110100100111110101001110101101001111 */ +static const xxh_u64 XXH_PRIME64_3 = + 0x165667B19E3779F9ULL; /* 0b0001011001010110011001111011000110011110001101110111100111111001 */ +static const xxh_u64 XXH_PRIME64_4 = + 0x85EBCA77C2B2AE63ULL; /* 0b1000010111101011110010100111011111000010101100101010111001100011 */ +static const xxh_u64 XXH_PRIME64_5 = + 0x27D4EB2F165667C5ULL; /* 0b0010011111010100111010110010111100010110010101100110011111000101 */ + +#ifdef XXH_OLD_NAMES +#define PRIME64_1 XXH_PRIME64_1 +#define PRIME64_2 XXH_PRIME64_2 +#define PRIME64_3 XXH_PRIME64_3 +#define PRIME64_4 XXH_PRIME64_4 +#define PRIME64_5 XXH_PRIME64_5 +#endif + +static xxh_u64 XXH64_round(xxh_u64 acc, xxh_u64 input) { + acc += input * XXH_PRIME64_2; + acc = XXH_rotl64(acc, 31); + acc *= XXH_PRIME64_1; + return acc; +} + +static xxh_u64 XXH64_mergeRound(xxh_u64 acc, xxh_u64 val) { + val = XXH64_round(0, val); + acc ^= val; + acc = acc * XXH_PRIME64_1 + XXH_PRIME64_4; + return acc; +} + +static xxh_u64 XXH64_avalanche(xxh_u64 h64) { + h64 ^= h64 >> 33; + h64 *= XXH_PRIME64_2; + h64 ^= h64 >> 29; + h64 *= XXH_PRIME64_3; + h64 ^= h64 >> 32; + return h64; +} + +#define XXH_get64bits(p) XXH_readLE64_align(p, align) + +static xxh_u64 XXH64_finalize(xxh_u64 h64, const xxh_u8* ptr, size_t len, XXH_alignment align) { +#define XXH_PROCESS1_64 \ + do { \ + h64 ^= (*ptr++) * XXH_PRIME64_5; \ + h64 = XXH_rotl64(h64, 11) * XXH_PRIME64_1; \ + } while (0) + +#define XXH_PROCESS4_64 \ + do { \ + h64 ^= (xxh_u64)(XXH_get32bits(ptr)) * XXH_PRIME64_1; \ + ptr += 4; \ + h64 = XXH_rotl64(h64, 23) * XXH_PRIME64_2 + XXH_PRIME64_3; \ + } while (0) + +#define XXH_PROCESS8_64 \ + do { \ + xxh_u64 const k1 = XXH64_round(0, XXH_get64bits(ptr)); \ + ptr += 8; \ + h64 ^= k1; \ + h64 = XXH_rotl64(h64, 27) * XXH_PRIME64_1 + XXH_PRIME64_4; \ + } while (0) + + /* Rerolled version for 32-bit targets is faster and much smaller. */ + if (XXH_REROLL || XXH_REROLL_XXH64) { + len &= 31; + while (len >= 8) { + XXH_PROCESS8_64; + len -= 8; + } + if (len >= 4) { + XXH_PROCESS4_64; + len -= 4; + } + while (len > 0) { + XXH_PROCESS1_64; + --len; + } + return XXH64_avalanche(h64); + } else { + switch (len & 31) { + case 24: + XXH_PROCESS8_64; + /* fallthrough */ + case 16: + XXH_PROCESS8_64; + /* fallthrough */ + case 8: + XXH_PROCESS8_64; + return XXH64_avalanche(h64); + + case 28: + XXH_PROCESS8_64; + /* fallthrough */ + case 20: + XXH_PROCESS8_64; + /* fallthrough */ + case 12: + XXH_PROCESS8_64; + /* fallthrough */ + case 4: + XXH_PROCESS4_64; + return XXH64_avalanche(h64); + + case 25: + XXH_PROCESS8_64; + /* fallthrough */ + case 17: + XXH_PROCESS8_64; + /* fallthrough */ + case 9: + XXH_PROCESS8_64; + XXH_PROCESS1_64; + return XXH64_avalanche(h64); + + case 29: + XXH_PROCESS8_64; + /* fallthrough */ + case 21: + XXH_PROCESS8_64; + /* fallthrough */ + case 13: + XXH_PROCESS8_64; + /* fallthrough */ + case 5: + XXH_PROCESS4_64; + XXH_PROCESS1_64; + return XXH64_avalanche(h64); + + case 26: + XXH_PROCESS8_64; + /* fallthrough */ + case 18: + XXH_PROCESS8_64; + /* fallthrough */ + case 10: + XXH_PROCESS8_64; + XXH_PROCESS1_64; + XXH_PROCESS1_64; + return XXH64_avalanche(h64); + + case 30: + XXH_PROCESS8_64; + /* fallthrough */ + case 22: + XXH_PROCESS8_64; + /* fallthrough */ + case 14: + XXH_PROCESS8_64; + /* fallthrough */ + case 6: + XXH_PROCESS4_64; + XXH_PROCESS1_64; + XXH_PROCESS1_64; + return XXH64_avalanche(h64); + + case 27: + XXH_PROCESS8_64; + /* fallthrough */ + case 19: + XXH_PROCESS8_64; + /* fallthrough */ + case 11: + XXH_PROCESS8_64; + XXH_PROCESS1_64; + XXH_PROCESS1_64; + XXH_PROCESS1_64; + return XXH64_avalanche(h64); + + case 31: + XXH_PROCESS8_64; + /* fallthrough */ + case 23: + XXH_PROCESS8_64; + /* fallthrough */ + case 15: + XXH_PROCESS8_64; + /* fallthrough */ + case 7: + XXH_PROCESS4_64; + /* fallthrough */ + case 3: + XXH_PROCESS1_64; + /* fallthrough */ + case 2: + XXH_PROCESS1_64; + /* fallthrough */ + case 1: + XXH_PROCESS1_64; + /* fallthrough */ + case 0: + return XXH64_avalanche(h64); + } + } + /* impossible to reach */ + XXH_ASSERT(0); + return 0; /* unreachable, but some compilers complain without it */ +} + +#ifdef XXH_OLD_NAMES +#define PROCESS1_64 XXH_PROCESS1_64 +#define PROCESS4_64 XXH_PROCESS4_64 +#define PROCESS8_64 XXH_PROCESS8_64 +#else +#undef XXH_PROCESS1_64 +#undef XXH_PROCESS4_64 +#undef XXH_PROCESS8_64 +#endif + +XXH_FORCE_INLINE xxh_u64 XXH64_endian_align(const xxh_u8* input, size_t len, xxh_u64 seed, XXH_alignment align) { + const xxh_u8* bEnd = input + len; + xxh_u64 h64; + +#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER >= 1) + if (input == NULL) { + len = 0; + bEnd = input = (const xxh_u8*)(size_t)32; + } +#endif + + if (len >= 32) { + const xxh_u8* const limit = bEnd - 32; + xxh_u64 v1 = seed + XXH_PRIME64_1 + XXH_PRIME64_2; + xxh_u64 v2 = seed + XXH_PRIME64_2; + xxh_u64 v3 = seed + 0; + xxh_u64 v4 = seed - XXH_PRIME64_1; + + do { + v1 = XXH64_round(v1, XXH_get64bits(input)); + input += 8; + v2 = XXH64_round(v2, XXH_get64bits(input)); + input += 8; + v3 = XXH64_round(v3, XXH_get64bits(input)); + input += 8; + v4 = XXH64_round(v4, XXH_get64bits(input)); + input += 8; + } while (input <= limit); + + h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18); + h64 = XXH64_mergeRound(h64, v1); + h64 = XXH64_mergeRound(h64, v2); + h64 = XXH64_mergeRound(h64, v3); + h64 = XXH64_mergeRound(h64, v4); + + } else { + h64 = seed + XXH_PRIME64_5; + } + + h64 += (xxh_u64)len; + + return XXH64_finalize(h64, input, len, align); +} + +XXH_PUBLIC_API XXH64_hash_t XXH64(const void* input, size_t len, XXH64_hash_t seed) { +#if 0 + /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ + XXH64_state_t state; + XXH64_reset(&state, seed); + XXH64_update(&state, (const xxh_u8*)input, len); + return XXH64_digest(&state); + +#else + + if (XXH_FORCE_ALIGN_CHECK) { + if ((((size_t)input) & 7) == 0) { /* Input is aligned, let's leverage the speed advantage */ + return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_aligned); + } + } + + return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned); + +#endif +} + +/******* Hash Streaming *******/ + +XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void) { + return (XXH64_state_t*)XXH_malloc(sizeof(XXH64_state_t)); +} +XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr) { + XXH_free(statePtr); + return XXH_OK; +} + +XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dstState, const XXH64_state_t* srcState) { + memcpy(dstState, srcState, sizeof(*dstState)); +} + +XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, XXH64_hash_t seed) { + XXH64_state_t state; /* use a local state to memcpy() in order to avoid strict-aliasing warnings */ + memset(&state, 0, sizeof(state)); + state.v1 = seed + XXH_PRIME64_1 + XXH_PRIME64_2; + state.v2 = seed + XXH_PRIME64_2; + state.v3 = seed + 0; + state.v4 = seed - XXH_PRIME64_1; + /* do not write into reserved64, might be removed in a future version */ + memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved64)); + return XXH_OK; +} + +XXH_PUBLIC_API XXH_errorcode XXH64_update(XXH64_state_t* state, const void* input, size_t len) { + if (input == NULL) +#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER >= 1) + return XXH_OK; +#else + return XXH_ERROR; +#endif + + { + const xxh_u8* p = (const xxh_u8*)input; + const xxh_u8* const bEnd = p + len; + + state->total_len += len; + + if (state->memsize + len < 32) { /* fill in tmp buffer */ + XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, len); + state->memsize += (xxh_u32)len; + return XXH_OK; + } + + if (state->memsize) { /* tmp buffer is full */ + XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, 32 - state->memsize); + state->v1 = XXH64_round(state->v1, XXH_readLE64(state->mem64 + 0)); + state->v2 = XXH64_round(state->v2, XXH_readLE64(state->mem64 + 1)); + state->v3 = XXH64_round(state->v3, XXH_readLE64(state->mem64 + 2)); + state->v4 = XXH64_round(state->v4, XXH_readLE64(state->mem64 + 3)); + p += 32 - state->memsize; + state->memsize = 0; + } + + if (p + 32 <= bEnd) { + const xxh_u8* const limit = bEnd - 32; + xxh_u64 v1 = state->v1; + xxh_u64 v2 = state->v2; + xxh_u64 v3 = state->v3; + xxh_u64 v4 = state->v4; + + do { + v1 = XXH64_round(v1, XXH_readLE64(p)); + p += 8; + v2 = XXH64_round(v2, XXH_readLE64(p)); + p += 8; + v3 = XXH64_round(v3, XXH_readLE64(p)); + p += 8; + v4 = XXH64_round(v4, XXH_readLE64(p)); + p += 8; + } while (p <= limit); + + state->v1 = v1; + state->v2 = v2; + state->v3 = v3; + state->v4 = v4; + } + + if (p < bEnd) { + XXH_memcpy(state->mem64, p, (size_t)(bEnd - p)); + state->memsize = (unsigned)(bEnd - p); + } + } + + return XXH_OK; +} + +XXH_PUBLIC_API XXH64_hash_t XXH64_digest(const XXH64_state_t* state) { + xxh_u64 h64; + + if (state->total_len >= 32) { + xxh_u64 const v1 = state->v1; + xxh_u64 const v2 = state->v2; + xxh_u64 const v3 = state->v3; + xxh_u64 const v4 = state->v4; + + h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18); + h64 = XXH64_mergeRound(h64, v1); + h64 = XXH64_mergeRound(h64, v2); + h64 = XXH64_mergeRound(h64, v3); + h64 = XXH64_mergeRound(h64, v4); + } else { + h64 = state->v3 /*seed*/ + XXH_PRIME64_5; + } + + h64 += (xxh_u64)state->total_len; + + return XXH64_finalize(h64, (const xxh_u8*)state->mem64, (size_t)state->total_len, XXH_aligned); +} + +/******* Canonical representation *******/ + +XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash) { + XXH_STATIC_ASSERT(sizeof(XXH64_canonical_t) == sizeof(XXH64_hash_t)); + if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap64(hash); + memcpy(dst, &hash, sizeof(*dst)); +} + +XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src) { + return XXH_readBE64(src); +} + +/* ********************************************************************* + * XXH3 + * New generation hash designed for speed on small keys and vectorization + ************************************************************************ */ + +/* === Compiler specifics === */ + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* >= C99 */ +#define XXH_RESTRICT restrict +#else +/* Note: it might be useful to define __restrict or __restrict__ for some C++ compilers */ +#define XXH_RESTRICT /* disable */ +#endif + +#if (defined(__GNUC__) && (__GNUC__ >= 3)) || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) || \ + defined(__clang__) +#define XXH_likely(x) __builtin_expect(x, 1) +#define XXH_unlikely(x) __builtin_expect(x, 0) +#else +#define XXH_likely(x) (x) +#define XXH_unlikely(x) (x) +#endif + +#if defined(__GNUC__) +#if defined(__AVX2__) +#include +#elif defined(__SSE2__) +#include +#elif defined(__ARM_NEON__) || defined(__ARM_NEON) +#define inline __inline__ /* circumvent a clang bug */ +#include +#undef inline +#endif +#elif defined(_MSC_VER) +#include +#endif + +/* + * One goal of XXH3 is to make it fast on both 32-bit and 64-bit, while + * remaining a true 64-bit/128-bit hash function. + * + * This is done by prioritizing a subset of 64-bit operations that can be + * emulated without too many steps on the average 32-bit machine. + * + * For example, these two lines seem similar, and run equally fast on 64-bit: + * + * xxh_u64 x; + * x ^= (x >> 47); // good + * x ^= (x >> 13); // bad + * + * However, to a 32-bit machine, there is a major difference. + * + * x ^= (x >> 47) looks like this: + * + * x.lo ^= (x.hi >> (47 - 32)); + * + * while x ^= (x >> 13) looks like this: + * + * // note: funnel shifts are not usually cheap. + * x.lo ^= (x.lo >> 13) | (x.hi << (32 - 13)); + * x.hi ^= (x.hi >> 13); + * + * The first one is significantly faster than the second, simply because the + * shift is larger than 32. This means: + * - All the bits we need are in the upper 32 bits, so we can ignore the lower + * 32 bits in the shift. + * - The shift result will always fit in the lower 32 bits, and therefore, + * we can ignore the upper 32 bits in the xor. + * + * Thanks to this optimization, XXH3 only requires these features to be efficient: + * + * - Usable unaligned access + * - A 32-bit or 64-bit ALU + * - If 32-bit, a decent ADC instruction + * - A 32 or 64-bit multiply with a 64-bit result + * - For the 128-bit variant, a decent byteswap helps short inputs. + * + * The first two are already required by XXH32, and almost all 32-bit and 64-bit + * platforms which can run XXH32 can run XXH3 efficiently. + * + * Thumb-1, the classic 16-bit only subset of ARM's instruction set, is one + * notable exception. + * + * First of all, Thumb-1 lacks support for the UMULL instruction which + * performs the important long multiply. This means numerous __aeabi_lmul + * calls. + * + * Second of all, the 8 functional registers are just not enough. + * Setup for __aeabi_lmul, byteshift loads, pointers, and all arithmetic need + * Lo registers, and this shuffling results in thousands more MOVs than A32. + * + * A32 and T32 don't have this limitation. They can access all 14 registers, + * do a 32->64 multiply with UMULL, and the flexible operand allowing free + * shifts is helpful, too. + * + * Therefore, we do a quick sanity check. + * + * If compiling Thumb-1 for a target which supports ARM instructions, we will + * emit a warning, as it is not a "sane" platform to compile for. + * + * Usually, if this happens, it is because of an accident and you probably need + * to specify -march, as you likely meant to compile for a newer architecture. + * + * Credit: large sections of the vectorial and asm source code paths + * have been contributed by @easyaspi314 + */ +#if defined(__thumb__) && !defined(__thumb2__) && defined(__ARM_ARCH_ISA_ARM) +#warning "XXH3 is highly inefficient without ARM or Thumb-2." +#endif + +/* ========================================== + * Vectorization detection + * ========================================== */ +#define XXH_SCALAR 0 /* Portable scalar version */ +#define XXH_SSE2 1 /* SSE2 for Pentium 4 and all x86_64 */ +#define XXH_AVX2 2 /* AVX2 for Haswell and Bulldozer */ +#define XXH_AVX512 3 /* AVX512 for Skylake and Icelake */ +#define XXH_NEON 4 /* NEON for most ARMv7-A and all AArch64 */ +#define XXH_VSX 5 /* VSX and ZVector for POWER8/z13 */ + +#ifndef XXH_VECTOR /* can be defined on command line */ +#if defined(__AVX512F__) +#define XXH_VECTOR XXH_AVX512 +#elif defined(__AVX2__) +#define XXH_VECTOR XXH_AVX2 +#elif defined(__SSE2__) || defined(_M_AMD64) || defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP == 2)) +#define XXH_VECTOR XXH_SSE2 +#elif defined(__GNUC__) /* msvc support maybe later */ \ + && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \ + (defined(__LITTLE_ENDIAN__) /* We only support little endian NEON */ \ + || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) +#define XXH_VECTOR XXH_NEON +#elif (defined(__PPC64__) && defined(__POWER8_VECTOR__)) || \ + (defined(__s390x__) && defined(__VEC__)) && defined(__GNUC__) /* TODO: IBM XL */ +#define XXH_VECTOR XXH_VSX +#else +#define XXH_VECTOR XXH_SCALAR +#endif +#endif + +/* + * Controls the alignment of the accumulator, + * for compatibility with aligned vector loads, which are usually faster. + */ +#ifndef XXH_ACC_ALIGN +#if defined(XXH_X86DISPATCH) +#define XXH_ACC_ALIGN 64 /* for compatibility with avx512 */ +#elif XXH_VECTOR == XXH_SCALAR /* scalar */ +#define XXH_ACC_ALIGN 8 +#elif XXH_VECTOR == XXH_SSE2 /* sse2 */ +#define XXH_ACC_ALIGN 16 +#elif XXH_VECTOR == XXH_AVX2 /* avx2 */ +#define XXH_ACC_ALIGN 32 +#elif XXH_VECTOR == XXH_NEON /* neon */ +#define XXH_ACC_ALIGN 16 +#elif XXH_VECTOR == XXH_VSX /* vsx */ +#define XXH_ACC_ALIGN 16 +#elif XXH_VECTOR == XXH_AVX512 /* avx512 */ +#define XXH_ACC_ALIGN 64 +#endif +#endif + +#if defined(XXH_X86DISPATCH) || XXH_VECTOR == XXH_SSE2 || XXH_VECTOR == XXH_AVX2 || XXH_VECTOR == XXH_AVX512 +#define XXH_SEC_ALIGN XXH_ACC_ALIGN +#else +#define XXH_SEC_ALIGN 8 +#endif + +/* + * UGLY HACK: + * GCC usually generates the best code with -O3 for xxHash. + * + * However, when targeting AVX2, it is overzealous in its unrolling resulting + * in code roughly 3/4 the speed of Clang. + * + * There are other issues, such as GCC splitting _mm256_loadu_si256 into + * _mm_loadu_si128 + _mm256_inserti128_si256. This is an optimization which + * only applies to Sandy and Ivy Bridge... which don't even support AVX2. + * + * That is why when compiling the AVX2 version, it is recommended to use either + * -O2 -mavx2 -march=haswell + * or + * -O2 -mavx2 -mno-avx256-split-unaligned-load + * for decent performance, or to use Clang instead. + * + * Fortunately, we can control the first one with a pragma that forces GCC into + * -O2, but the other one we can't control without "failed to inline always + * inline function due to target mismatch" warnings. + */ +#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \ + && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \ + && defined(__OPTIMIZE__) && !defined(__OPTIMIZE_SIZE__) /* respect -O0 and -Os */ +#pragma GCC push_options +#pragma GCC optimize("-O2") +#endif + +#if XXH_VECTOR == XXH_NEON +/* + * NEON's setup for vmlal_u32 is a little more complicated than it is on + * SSE2, AVX2, and VSX. + * + * While PMULUDQ and VMULEUW both perform a mask, VMLAL.U32 performs an upcast. + * + * To do the same operation, the 128-bit 'Q' register needs to be split into + * two 64-bit 'D' registers, performing this operation:: + * + * [ a | b ] + * | '---------. .--------' | + * | x | + * | .---------' '--------. | + * [ a & 0xFFFFFFFF | b & 0xFFFFFFFF ],[ a >> 32 | b >> 32 ] + * + * Due to significant changes in aarch64, the fastest method for aarch64 is + * completely different than the fastest method for ARMv7-A. + * + * ARMv7-A treats D registers as unions overlaying Q registers, so modifying + * D11 will modify the high half of Q5. This is similar to how modifying AH + * will only affect bits 8-15 of AX on x86. + * + * VZIP takes two registers, and puts even lanes in one register and odd lanes + * in the other. + * + * On ARMv7-A, this strangely modifies both parameters in place instead of + * taking the usual 3-operand form. + * + * Therefore, if we want to do this, we can simply use a D-form VZIP.32 on the + * lower and upper halves of the Q register to end up with the high and low + * halves where we want - all in one instruction. + * + * vzip.32 d10, d11 @ d10 = { d10[0], d11[0] }; d11 = { d10[1], d11[1] } + * + * Unfortunately we need inline assembly for this: Instructions modifying two + * registers at once is not possible in GCC or Clang's IR, and they have to + * create a copy. + * + * aarch64 requires a different approach. + * + * In order to make it easier to write a decent compiler for aarch64, many + * quirks were removed, such as conditional execution. + * + * NEON was also affected by this. + * + * aarch64 cannot access the high bits of a Q-form register, and writes to a + * D-form register zero the high bits, similar to how writes to W-form scalar + * registers (or DWORD registers on x86_64) work. + * + * The formerly free vget_high intrinsics now require a vext (with a few + * exceptions) + * + * Additionally, VZIP was replaced by ZIP1 and ZIP2, which are the equivalent + * of PUNPCKL* and PUNPCKH* in SSE, respectively, in order to only modify one + * operand. + * + * The equivalent of the VZIP.32 on the lower and upper halves would be this + * mess: + * + * ext v2.4s, v0.4s, v0.4s, #2 // v2 = { v0[2], v0[3], v0[0], v0[1] } + * zip1 v1.2s, v0.2s, v2.2s // v1 = { v0[0], v2[0] } + * zip2 v0.2s, v0.2s, v1.2s // v0 = { v0[1], v2[1] } + * + * Instead, we use a literal downcast, vmovn_u64 (XTN), and vshrn_n_u64 (SHRN): + * + * shrn v1.2s, v0.2d, #32 // v1 = (uint32x2_t)(v0 >> 32); + * xtn v0.2s, v0.2d // v0 = (uint32x2_t)(v0 & 0xFFFFFFFF); + * + * This is available on ARMv7-A, but is less efficient than a single VZIP.32. + */ + +/* + * Function-like macro: + * void XXH_SPLIT_IN_PLACE(uint64x2_t &in, uint32x2_t &outLo, uint32x2_t &outHi) + * { + * outLo = (uint32x2_t)(in & 0xFFFFFFFF); + * outHi = (uint32x2_t)(in >> 32); + * in = UNDEFINED; + * } + */ +#if !defined(XXH_NO_VZIP_HACK) /* define to disable */ \ + && defined(__GNUC__) && !defined(__aarch64__) && !defined(__arm64__) +#define XXH_SPLIT_IN_PLACE(in, outLo, outHi) \ + do { \ + /* Undocumented GCC/Clang operand modifier: %e0 = lower D half, %f0 = upper D half */ \ + /* https://github.com/gcc-mirror/gcc/blob/38cf91e5/gcc/config/arm/arm.c#L22486 */ \ + /* https://github.com/llvm-mirror/llvm/blob/2c4ca683/lib/Target/ARM/ARMAsmPrinter.cpp#L399 */ \ + __asm__("vzip.32 %e0, %f0" : "+w"(in)); \ + (outLo) = vget_low_u32(vreinterpretq_u32_u64(in)); \ + (outHi) = vget_high_u32(vreinterpretq_u32_u64(in)); \ + } while (0) +#else +#define XXH_SPLIT_IN_PLACE(in, outLo, outHi) \ + do { \ + (outLo) = vmovn_u64(in); \ + (outHi) = vshrn_n_u64((in), 32); \ + } while (0) +#endif +#endif /* XXH_VECTOR == XXH_NEON */ + +/* + * VSX and Z Vector helpers. + * + * This is very messy, and any pull requests to clean this up are welcome. + * + * There are a lot of problems with supporting VSX and s390x, due to + * inconsistent intrinsics, spotty coverage, and multiple endiannesses. + */ +#if XXH_VECTOR == XXH_VSX +#if defined(__s390x__) +#include +#else +/* gcc's altivec.h can have the unwanted consequence to unconditionally + * #define bool, vector, and pixel keywords, + * with bad consequences for programs already using these keywords for other purposes. + * The paragraph defining these macros is skipped when __APPLE_ALTIVEC__ is defined. + * __APPLE_ALTIVEC__ is _generally_ defined automatically by the compiler, + * but it seems that, in some cases, it isn't. + * Force the build macro to be defined, so that keywords are not altered. + */ +#if defined(__GNUC__) && !defined(__APPLE_ALTIVEC__) +#define __APPLE_ALTIVEC__ +#endif +#include +#endif + +typedef __vector unsigned long long xxh_u64x2; +typedef __vector unsigned char xxh_u8x16; +typedef __vector unsigned xxh_u32x4; + +#ifndef XXH_VSX_BE +#if defined(__BIG_ENDIAN__) || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#define XXH_VSX_BE 1 +#elif defined(__VEC_ELEMENT_REG_ORDER__) && __VEC_ELEMENT_REG_ORDER__ == __ORDER_BIG_ENDIAN__ +#warning "-maltivec=be is not recommended. Please use native endianness." +#define XXH_VSX_BE 1 +#else +#define XXH_VSX_BE 0 +#endif +#endif /* !defined(XXH_VSX_BE) */ + +#if XXH_VSX_BE +/* A wrapper for POWER9's vec_revb. */ +#if defined(__POWER9_VECTOR__) || (defined(__clang__) && defined(__s390x__)) +#define XXH_vec_revb vec_revb +#else +XXH_FORCE_INLINE xxh_u64x2 XXH_vec_revb(xxh_u64x2 val) { + xxh_u8x16 const vByteSwap = { 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, + 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08 }; + return vec_perm(val, val, vByteSwap); +} +#endif +#endif /* XXH_VSX_BE */ + +/* + * Performs an unaligned load and byte swaps it on big endian. + */ +XXH_FORCE_INLINE xxh_u64x2 XXH_vec_loadu(const void* ptr) { + xxh_u64x2 ret; + memcpy(&ret, ptr, sizeof(xxh_u64x2)); +#if XXH_VSX_BE + ret = XXH_vec_revb(ret); +#endif + return ret; +} + +/* + * vec_mulo and vec_mule are very problematic intrinsics on PowerPC + * + * These intrinsics weren't added until GCC 8, despite existing for a while, + * and they are endian dependent. Also, their meaning swap depending on version. + * */ +#if defined(__s390x__) +/* s390x is always big endian, no issue on this platform */ +#define XXH_vec_mulo vec_mulo +#define XXH_vec_mule vec_mule +#elif defined(__clang__) && XXH_HAS_BUILTIN(__builtin_altivec_vmuleuw) +/* Clang has a better way to control this, we can just use the builtin which doesn't swap. */ +#define XXH_vec_mulo __builtin_altivec_vmulouw +#define XXH_vec_mule __builtin_altivec_vmuleuw +#else +/* gcc needs inline assembly */ +/* Adapted from https://github.com/google/highwayhash/blob/master/highwayhash/hh_vsx.h. */ +XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mulo(xxh_u32x4 a, xxh_u32x4 b) { + xxh_u64x2 result; + __asm__("vmulouw %0, %1, %2" : "=v"(result) : "v"(a), "v"(b)); + return result; +} +XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mule(xxh_u32x4 a, xxh_u32x4 b) { + xxh_u64x2 result; + __asm__("vmuleuw %0, %1, %2" : "=v"(result) : "v"(a), "v"(b)); + return result; +} +#endif /* XXH_vec_mulo, XXH_vec_mule */ +#endif /* XXH_VECTOR == XXH_VSX */ + +/* prefetch + * can be disabled, by declaring XXH_NO_PREFETCH build macro */ +#if defined(XXH_NO_PREFETCH) +#define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */ +#else +#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_I86)) /* _mm_prefetch() is not defined outside of x86/x64 */ +#include /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */ +#define XXH_PREFETCH(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0) +#elif defined(__GNUC__) && ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))) +#define XXH_PREFETCH(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */) +#else +#define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */ +#endif +#endif /* XXH_NO_PREFETCH */ + +/* ========================================== + * XXH3 default settings + * ========================================== */ + +#define XXH_SECRET_DEFAULT_SIZE 192 /* minimum XXH3_SECRET_SIZE_MIN */ + +#if (XXH_SECRET_DEFAULT_SIZE < XXH3_SECRET_SIZE_MIN) +#error "default keyset is not large enough" +#endif + +/* Pseudorandom secret taken directly from FARSH */ +XXH_ALIGN(64) +static const xxh_u8 XXH3_kSecret[XXH_SECRET_DEFAULT_SIZE] = { + 0xb8, 0xfe, 0x6c, 0x39, 0x23, 0xa4, 0x4b, 0xbe, 0x7c, 0x01, 0x81, 0x2c, 0xf7, 0x21, 0xad, 0x1c, 0xde, 0xd4, + 0x6d, 0xe9, 0x83, 0x90, 0x97, 0xdb, 0x72, 0x40, 0xa4, 0xa4, 0xb7, 0xb3, 0x67, 0x1f, 0xcb, 0x79, 0xe6, 0x4e, + 0xcc, 0xc0, 0xe5, 0x78, 0x82, 0x5a, 0xd0, 0x7d, 0xcc, 0xff, 0x72, 0x21, 0xb8, 0x08, 0x46, 0x74, 0xf7, 0x43, + 0x24, 0x8e, 0xe0, 0x35, 0x90, 0xe6, 0x81, 0x3a, 0x26, 0x4c, 0x3c, 0x28, 0x52, 0xbb, 0x91, 0xc3, 0x00, 0xcb, + 0x88, 0xd0, 0x65, 0x8b, 0x1b, 0x53, 0x2e, 0xa3, 0x71, 0x64, 0x48, 0x97, 0xa2, 0x0d, 0xf9, 0x4e, 0x38, 0x19, + 0xef, 0x46, 0xa9, 0xde, 0xac, 0xd8, 0xa8, 0xfa, 0x76, 0x3f, 0xe3, 0x9c, 0x34, 0x3f, 0xf9, 0xdc, 0xbb, 0xc7, + 0xc7, 0x0b, 0x4f, 0x1d, 0x8a, 0x51, 0xe0, 0x4b, 0xcd, 0xb4, 0x59, 0x31, 0xc8, 0x9f, 0x7e, 0xc9, 0xd9, 0x78, + 0x73, 0x64, 0xea, 0xc5, 0xac, 0x83, 0x34, 0xd3, 0xeb, 0xc3, 0xc5, 0x81, 0xa0, 0xff, 0xfa, 0x13, 0x63, 0xeb, + 0x17, 0x0d, 0xdd, 0x51, 0xb7, 0xf0, 0xda, 0x49, 0xd3, 0x16, 0x55, 0x26, 0x29, 0xd4, 0x68, 0x9e, 0x2b, 0x16, + 0xbe, 0x58, 0x7d, 0x47, 0xa1, 0xfc, 0x8f, 0xf8, 0xb8, 0xd1, 0x7a, 0xd0, 0x31, 0xce, 0x45, 0xcb, 0x3a, 0x8f, + 0x95, 0x16, 0x04, 0x28, 0xaf, 0xd7, 0xfb, 0xca, 0xbb, 0x4b, 0x40, 0x7e, +}; + +#ifdef XXH_OLD_NAMES +#define kSecret XXH3_kSecret +#endif + +/* + * Calculates a 32-bit to 64-bit long multiply. + * + * Wraps __emulu on MSVC x86 because it tends to call __allmul when it doesn't + * need to (but it shouldn't need to anyways, it is about 7 instructions to do + * a 64x64 multiply...). Since we know that this will _always_ emit MULL, we + * use that instead of the normal method. + * + * If you are compiling for platforms like Thumb-1 and don't have a better option, + * you may also want to write your own long multiply routine here. + * + * XXH_FORCE_INLINE xxh_u64 XXH_mult32to64(xxh_u64 x, xxh_u64 y) + * { + * return (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF); + * } + */ +#if defined(_MSC_VER) && defined(_M_IX86) +#include +#define XXH_mult32to64(x, y) __emulu((unsigned)(x), (unsigned)(y)) +#else +/* + * Downcast + upcast is usually better than masking on older compilers like + * GCC 4.2 (especially 32-bit ones), all without affecting newer compilers. + * + * The other method, (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF), will AND both operands + * and perform a full 64x64 multiply -- entirely redundant on 32-bit. + */ +#define XXH_mult32to64(x, y) ((xxh_u64)(xxh_u32)(x) * (xxh_u64)(xxh_u32)(y)) +#endif + +/* + * Calculates a 64->128-bit long multiply. + * + * Uses __uint128_t and _umul128 if available, otherwise uses a scalar version. + */ +static XXH128_hash_t XXH_mult64to128(xxh_u64 lhs, xxh_u64 rhs) { + /* + * GCC/Clang __uint128_t method. + * + * On most 64-bit targets, GCC and Clang define a __uint128_t type. + * This is usually the best way as it usually uses a native long 64-bit + * multiply, such as MULQ on x86_64 or MUL + UMULH on aarch64. + * + * Usually. + * + * Despite being a 32-bit platform, Clang (and emscripten) define this type + * despite not having the arithmetic for it. This results in a laggy + * compiler builtin call which calculates a full 128-bit multiply. + * In that case it is best to use the portable one. + * https://github.com/Cyan4973/xxHash/issues/211#issuecomment-515575677 + */ +#if defined(__GNUC__) && !defined(__wasm__) && defined(__SIZEOF_INT128__) || \ + (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 128) + + __uint128_t const product = (__uint128_t)lhs * (__uint128_t)rhs; + XXH128_hash_t r128; + r128.low64 = (xxh_u64)(product); + r128.high64 = (xxh_u64)(product >> 64); + return r128; + + /* + * MSVC for x64's _umul128 method. + * + * xxh_u64 _umul128(xxh_u64 Multiplier, xxh_u64 Multiplicand, xxh_u64 *HighProduct); + * + * This compiles to single operand MUL on x64. + */ +#elif defined(_M_X64) || defined(_M_IA64) + +#ifndef _MSC_VER +#pragma intrinsic(_umul128) +#endif + xxh_u64 product_high; + xxh_u64 const product_low = _umul128(lhs, rhs, &product_high); + XXH128_hash_t r128; + r128.low64 = product_low; + r128.high64 = product_high; + return r128; + +#else + /* + * Portable scalar method. Optimized for 32-bit and 64-bit ALUs. + * + * This is a fast and simple grade school multiply, which is shown below + * with base 10 arithmetic instead of base 0x100000000. + * + * 9 3 // D2 lhs = 93 + * x 7 5 // D2 rhs = 75 + * ---------- + * 1 5 // D2 lo_lo = (93 % 10) * (75 % 10) = 15 + * 4 5 | // D2 hi_lo = (93 / 10) * (75 % 10) = 45 + * 2 1 | // D2 lo_hi = (93 % 10) * (75 / 10) = 21 + * + 6 3 | | // D2 hi_hi = (93 / 10) * (75 / 10) = 63 + * --------- + * 2 7 | // D2 cross = (15 / 10) + (45 % 10) + 21 = 27 + * + 6 7 | | // D2 upper = (27 / 10) + (45 / 10) + 63 = 67 + * --------- + * 6 9 7 5 // D4 res = (27 * 10) + (15 % 10) + (67 * 100) = 6975 + * + * The reasons for adding the products like this are: + * 1. It avoids manual carry tracking. Just like how + * (9 * 9) + 9 + 9 = 99, the same applies with this for UINT64_MAX. + * This avoids a lot of complexity. + * + * 2. It hints for, and on Clang, compiles to, the powerful UMAAL + * instruction available in ARM's Digital Signal Processing extension + * in 32-bit ARMv6 and later, which is shown below: + * + * void UMAAL(xxh_u32 *RdLo, xxh_u32 *RdHi, xxh_u32 Rn, xxh_u32 Rm) + * { + * xxh_u64 product = (xxh_u64)*RdLo * (xxh_u64)*RdHi + Rn + Rm; + * *RdLo = (xxh_u32)(product & 0xFFFFFFFF); + * *RdHi = (xxh_u32)(product >> 32); + * } + * + * This instruction was designed for efficient long multiplication, and + * allows this to be calculated in only 4 instructions at speeds + * comparable to some 64-bit ALUs. + * + * 3. It isn't terrible on other platforms. Usually this will be a couple + * of 32-bit ADD/ADCs. + */ + + /* First calculate all of the cross products. */ + xxh_u64 const lo_lo = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs & 0xFFFFFFFF); + xxh_u64 const hi_lo = XXH_mult32to64(lhs >> 32, rhs & 0xFFFFFFFF); + xxh_u64 const lo_hi = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs >> 32); + xxh_u64 const hi_hi = XXH_mult32to64(lhs >> 32, rhs >> 32); + + /* Now add the products together. These will never overflow. */ + xxh_u64 const cross = (lo_lo >> 32) + (hi_lo & 0xFFFFFFFF) + lo_hi; + xxh_u64 const upper = (hi_lo >> 32) + (cross >> 32) + hi_hi; + xxh_u64 const lower = (cross << 32) | (lo_lo & 0xFFFFFFFF); + + XXH128_hash_t r128; + r128.low64 = lower; + r128.high64 = upper; + return r128; +#endif +} + +/* + * Does a 64-bit to 128-bit multiply, then XOR folds it. + * + * The reason for the separate function is to prevent passing too many structs + * around by value. This will hopefully inline the multiply, but we don't force it. + */ +static xxh_u64 XXH3_mul128_fold64(xxh_u64 lhs, xxh_u64 rhs) { + XXH128_hash_t product = XXH_mult64to128(lhs, rhs); + return product.low64 ^ product.high64; +} + +/* Seems to produce slightly better code on GCC for some reason. */ +XXH_FORCE_INLINE xxh_u64 XXH_xorshift64(xxh_u64 v64, int shift) { + XXH_ASSERT(0 <= shift && shift < 64); + return v64 ^ (v64 >> shift); +} + +/* + * This is a fast avalanche stage, + * suitable when input bits are already partially mixed + */ +static XXH64_hash_t XXH3_avalanche(xxh_u64 h64) { + h64 = XXH_xorshift64(h64, 37); + h64 *= 0x165667919E3779F9ULL; + h64 = XXH_xorshift64(h64, 32); + return h64; +} + +/* + * This is a stronger avalanche, + * inspired by Pelle Evensen's rrmxmx + * preferable when input has not been previously mixed + */ +static XXH64_hash_t XXH3_rrmxmx(xxh_u64 h64, xxh_u64 len) { + /* this mix is inspired by Pelle Evensen's rrmxmx */ + h64 ^= XXH_rotl64(h64, 49) ^ XXH_rotl64(h64, 24); + h64 *= 0x9FB21C651E98DF25ULL; + h64 ^= (h64 >> 35) + len; + h64 *= 0x9FB21C651E98DF25ULL; + return XXH_xorshift64(h64, 28); +} + +/* ========================================== + * Short keys + * ========================================== + * One of the shortcomings of XXH32 and XXH64 was that their performance was + * sub-optimal on short lengths. It used an iterative algorithm which strongly + * favored lengths that were a multiple of 4 or 8. + * + * Instead of iterating over individual inputs, we use a set of single shot + * functions which piece together a range of lengths and operate in constant time. + * + * Additionally, the number of multiplies has been significantly reduced. This + * reduces latency, especially when emulating 64-bit multiplies on 32-bit. + * + * Depending on the platform, this may or may not be faster than XXH32, but it + * is almost guaranteed to be faster than XXH64. + */ + +/* + * At very short lengths, there isn't enough input to fully hide secrets, or use + * the entire secret. + * + * There is also only a limited amount of mixing we can do before significantly + * impacting performance. + * + * Therefore, we use different sections of the secret and always mix two secret + * samples with an XOR. This should have no effect on performance on the + * seedless or withSeed variants because everything _should_ be constant folded + * by modern compilers. + * + * The XOR mixing hides individual parts of the secret and increases entropy. + * + * This adds an extra layer of strength for custom secrets. + */ +XXH_FORCE_INLINE XXH64_hash_t XXH3_len_1to3_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, + XXH64_hash_t seed) { + XXH_ASSERT(input != NULL); + XXH_ASSERT(1 <= len && len <= 3); + XXH_ASSERT(secret != NULL); + /* + * len = 1: combined = { input[0], 0x01, input[0], input[0] } + * len = 2: combined = { input[1], 0x02, input[0], input[1] } + * len = 3: combined = { input[2], 0x03, input[0], input[1] } + */ + { + xxh_u8 const c1 = input[0]; + xxh_u8 const c2 = input[len >> 1]; + xxh_u8 const c3 = input[len - 1]; + xxh_u32 const combined = ((xxh_u32)c1 << 16) | ((xxh_u32)c2 << 24) | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8); + xxh_u64 const bitflip = (XXH_readLE32(secret) ^ XXH_readLE32(secret + 4)) + seed; + xxh_u64 const keyed = (xxh_u64)combined ^ bitflip; + return XXH64_avalanche(keyed); + } +} + +XXH_FORCE_INLINE XXH64_hash_t XXH3_len_4to8_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, + XXH64_hash_t seed) { + XXH_ASSERT(input != NULL); + XXH_ASSERT(secret != NULL); + XXH_ASSERT(4 <= len && len < 8); + seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32; + { + xxh_u32 const input1 = XXH_readLE32(input); + xxh_u32 const input2 = XXH_readLE32(input + len - 4); + xxh_u64 const bitflip = (XXH_readLE64(secret + 8) ^ XXH_readLE64(secret + 16)) - seed; + xxh_u64 const input64 = input2 + (((xxh_u64)input1) << 32); + xxh_u64 const keyed = input64 ^ bitflip; + return XXH3_rrmxmx(keyed, len); + } +} + +XXH_FORCE_INLINE XXH64_hash_t XXH3_len_9to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, + XXH64_hash_t seed) { + XXH_ASSERT(input != NULL); + XXH_ASSERT(secret != NULL); + XXH_ASSERT(8 <= len && len <= 16); + { + xxh_u64 const bitflip1 = (XXH_readLE64(secret + 24) ^ XXH_readLE64(secret + 32)) + seed; + xxh_u64 const bitflip2 = (XXH_readLE64(secret + 40) ^ XXH_readLE64(secret + 48)) - seed; + xxh_u64 const input_lo = XXH_readLE64(input) ^ bitflip1; + xxh_u64 const input_hi = XXH_readLE64(input + len - 8) ^ bitflip2; + xxh_u64 const acc = len + XXH_swap64(input_lo) + input_hi + XXH3_mul128_fold64(input_lo, input_hi); + return XXH3_avalanche(acc); + } +} + +XXH_FORCE_INLINE XXH64_hash_t XXH3_len_0to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, + XXH64_hash_t seed) { + XXH_ASSERT(len <= 16); + { + if (XXH_likely(len > 8)) return XXH3_len_9to16_64b(input, len, secret, seed); + if (XXH_likely(len >= 4)) return XXH3_len_4to8_64b(input, len, secret, seed); + if (len) return XXH3_len_1to3_64b(input, len, secret, seed); + return XXH64_avalanche(seed ^ (XXH_readLE64(secret + 56) ^ XXH_readLE64(secret + 64))); + } +} + +/* + * DISCLAIMER: There are known *seed-dependent* multicollisions here due to + * multiplication by zero, affecting hashes of lengths 17 to 240. + * + * However, they are very unlikely. + * + * Keep this in mind when using the unseeded XXH3_64bits() variant: As with all + * unseeded non-cryptographic hashes, it does not attempt to defend itself + * against specially crafted inputs, only random inputs. + * + * Compared to classic UMAC where a 1 in 2^31 chance of 4 consecutive bytes + * cancelling out the secret is taken an arbitrary number of times (addressed + * in XXH3_accumulate_512), this collision is very unlikely with random inputs + * and/or proper seeding: + * + * This only has a 1 in 2^63 chance of 8 consecutive bytes cancelling out, in a + * function that is only called up to 16 times per hash with up to 240 bytes of + * input. + * + * This is not too bad for a non-cryptographic hash function, especially with + * only 64 bit outputs. + * + * The 128-bit variant (which trades some speed for strength) is NOT affected + * by this, although it is always a good idea to use a proper seed if you care + * about strength. + */ +XXH_FORCE_INLINE xxh_u64 XXH3_mix16B(const xxh_u8* XXH_RESTRICT input, const xxh_u8* XXH_RESTRICT secret, + xxh_u64 seed64) { +#if defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \ + && defined(__i386__) && defined(__SSE2__) /* x86 + SSE2 */ \ + && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable like XXH32 hack */ + /* + * UGLY HACK: + * GCC for x86 tends to autovectorize the 128-bit multiply, resulting in + * slower code. + * + * By forcing seed64 into a register, we disrupt the cost model and + * cause it to scalarize. See `XXH32_round()` + * + * FIXME: Clang's output is still _much_ faster -- On an AMD Ryzen 3600, + * XXH3_64bits @ len=240 runs at 4.6 GB/s with Clang 9, but 3.3 GB/s on + * GCC 9.2, despite both emitting scalar code. + * + * GCC generates much better scalar code than Clang for the rest of XXH3, + * which is why finding a more optimal codepath is an interest. + */ + __asm__("" : "+r"(seed64)); +#endif + { + xxh_u64 const input_lo = XXH_readLE64(input); + xxh_u64 const input_hi = XXH_readLE64(input + 8); + return XXH3_mul128_fold64(input_lo ^ (XXH_readLE64(secret) + seed64), + input_hi ^ (XXH_readLE64(secret + 8) - seed64)); + } +} + +/* For mid range keys, XXH3 uses a Mum-hash variant. */ +XXH_FORCE_INLINE XXH64_hash_t XXH3_len_17to128_64b(const xxh_u8* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, size_t secretSize, + XXH64_hash_t seed) { + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + (void)secretSize; + XXH_ASSERT(16 < len && len <= 128); + + { + xxh_u64 acc = len * XXH_PRIME64_1; + if (len > 32) { + if (len > 64) { + if (len > 96) { + acc += XXH3_mix16B(input + 48, secret + 96, seed); + acc += XXH3_mix16B(input + len - 64, secret + 112, seed); + } + acc += XXH3_mix16B(input + 32, secret + 64, seed); + acc += XXH3_mix16B(input + len - 48, secret + 80, seed); + } + acc += XXH3_mix16B(input + 16, secret + 32, seed); + acc += XXH3_mix16B(input + len - 32, secret + 48, seed); + } + acc += XXH3_mix16B(input + 0, secret + 0, seed); + acc += XXH3_mix16B(input + len - 16, secret + 16, seed); + + return XXH3_avalanche(acc); + } +} + +#define XXH3_MIDSIZE_MAX 240 + +XXH_NO_INLINE XXH64_hash_t XXH3_len_129to240_64b(const xxh_u8* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, size_t secretSize, + XXH64_hash_t seed) { + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + (void)secretSize; + XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX); + +#define XXH3_MIDSIZE_STARTOFFSET 3 +#define XXH3_MIDSIZE_LASTOFFSET 17 + + { + xxh_u64 acc = len * XXH_PRIME64_1; + int const nbRounds = (int)len / 16; + int i; + for (i = 0; i < 8; i++) { + acc += XXH3_mix16B(input + (16 * i), secret + (16 * i), seed); + } + acc = XXH3_avalanche(acc); + XXH_ASSERT(nbRounds >= 8); +#if defined(__clang__) /* Clang */ \ + && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \ + && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable */ +/* + * UGLY HACK: + * Clang for ARMv7-A tries to vectorize this loop, similar to GCC x86. + * In everywhere else, it uses scalar code. + * + * For 64->128-bit multiplies, even if the NEON was 100% optimal, it + * would still be slower than UMAAL (see XXH_mult64to128). + * + * Unfortunately, Clang doesn't handle the long multiplies properly and + * converts them to the nonexistent "vmulq_u64" intrinsic, which is then + * scalarized into an ugly mess of VMOV.32 instructions. + * + * This mess is difficult to avoid without turning autovectorization + * off completely, but they are usually relatively minor and/or not + * worth it to fix. + * + * This loop is the easiest to fix, as unlike XXH32, this pragma + * _actually works_ because it is a loop vectorization instead of an + * SLP vectorization. + */ +#pragma clang loop vectorize(disable) +#endif + for (i = 8; i < nbRounds; i++) { + acc += XXH3_mix16B(input + (16 * i), secret + (16 * (i - 8)) + XXH3_MIDSIZE_STARTOFFSET, seed); + } + /* last bytes */ + acc += XXH3_mix16B(input + len - 16, secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET, seed); + return XXH3_avalanche(acc); + } +} + +/* ======= Long Keys ======= */ + +#define XXH_STRIPE_LEN 64 +#define XXH_SECRET_CONSUME_RATE 8 /* nb of secret bytes consumed at each accumulation */ +#define XXH_ACC_NB (XXH_STRIPE_LEN / sizeof(xxh_u64)) + +#ifdef XXH_OLD_NAMES +#define STRIPE_LEN XXH_STRIPE_LEN +#define ACC_NB XXH_ACC_NB +#endif + +XXH_FORCE_INLINE void XXH_writeLE64(void* dst, xxh_u64 v64) { + if (!XXH_CPU_LITTLE_ENDIAN) v64 = XXH_swap64(v64); + memcpy(dst, &v64, sizeof(v64)); +} + +/* Several intrinsic functions below are supposed to accept __int64 as argument, + * as documented in https://software.intel.com/sites/landingpage/IntrinsicsGuide/ . + * However, several environments do not define __int64 type, + * requiring a workaround. + */ +#if !defined(__VMS) && (defined(__cplusplus) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 \ + */)) +typedef int64_t xxh_i64; +#else +/* the following type must have a width of 64-bit */ +typedef long long xxh_i64; +#endif + +/* + * XXH3_accumulate_512 is the tightest loop for long inputs, and it is the most optimized. + * + * It is a hardened version of UMAC, based off of FARSH's implementation. + * + * This was chosen because it adapts quite well to 32-bit, 64-bit, and SIMD + * implementations, and it is ridiculously fast. + * + * We harden it by mixing the original input to the accumulators as well as the product. + * + * This means that in the (relatively likely) case of a multiply by zero, the + * original input is preserved. + * + * On 128-bit inputs, we swap 64-bit pairs when we add the input to improve + * cross-pollination, as otherwise the upper and lower halves would be + * essentially independent. + * + * This doesn't matter on 64-bit hashes since they all get merged together in + * the end, so we skip the extra step. + * + * Both XXH3_64bits and XXH3_128bits use this subroutine. + */ + +#if (XXH_VECTOR == XXH_AVX512) || defined(XXH_X86DISPATCH) + +#ifndef XXH_TARGET_AVX512 +#define XXH_TARGET_AVX512 /* disable attribute target */ +#endif + +XXH_FORCE_INLINE XXH_TARGET_AVX512 void XXH3_accumulate_512_avx512(void* XXH_RESTRICT acc, + const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) { + XXH_ALIGN(64) __m512i* const xacc = (__m512i*)acc; + XXH_ASSERT((((size_t)acc) & 63) == 0); + XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i)); + + { + /* data_vec = input[0]; */ + __m512i const data_vec = _mm512_loadu_si512(input); + /* key_vec = secret[0]; */ + __m512i const key_vec = _mm512_loadu_si512(secret); + /* data_key = data_vec ^ key_vec; */ + __m512i const data_key = _mm512_xor_si512(data_vec, key_vec); + /* data_key_lo = data_key >> 32; */ + __m512i const data_key_lo = _mm512_shuffle_epi32(data_key, (_MM_PERM_ENUM)_MM_SHUFFLE(0, 3, 0, 1)); + /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */ + __m512i const product = _mm512_mul_epu32(data_key, data_key_lo); + /* xacc[0] += swap(data_vec); */ + __m512i const data_swap = _mm512_shuffle_epi32(data_vec, (_MM_PERM_ENUM)_MM_SHUFFLE(1, 0, 3, 2)); + __m512i const sum = _mm512_add_epi64(*xacc, data_swap); + /* xacc[0] += product; */ + *xacc = _mm512_add_epi64(product, sum); + } +} + +/* + * XXH3_scrambleAcc: Scrambles the accumulators to improve mixing. + * + * Multiplication isn't perfect, as explained by Google in HighwayHash: + * + * // Multiplication mixes/scrambles bytes 0-7 of the 64-bit result to + * // varying degrees. In descending order of goodness, bytes + * // 3 4 2 5 1 6 0 7 have quality 228 224 164 160 100 96 36 32. + * // As expected, the upper and lower bytes are much worse. + * + * Source: https://github.com/google/highwayhash/blob/0aaf66b/highwayhash/hh_avx2.h#L291 + * + * Since our algorithm uses a pseudorandom secret to add some variance into the + * mix, we don't need to (or want to) mix as often or as much as HighwayHash does. + * + * This isn't as tight as XXH3_accumulate, but still written in SIMD to avoid + * extraction. + * + * Both XXH3_64bits and XXH3_128bits use this subroutine. + */ + +XXH_FORCE_INLINE XXH_TARGET_AVX512 void XXH3_scrambleAcc_avx512(void* XXH_RESTRICT acc, + const void* XXH_RESTRICT secret) { + XXH_ASSERT((((size_t)acc) & 63) == 0); + XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i)); + { + XXH_ALIGN(64) __m512i* const xacc = (__m512i*)acc; + const __m512i prime32 = _mm512_set1_epi32((int)XXH_PRIME32_1); + + /* xacc[0] ^= (xacc[0] >> 47) */ + __m512i const acc_vec = *xacc; + __m512i const shifted = _mm512_srli_epi64(acc_vec, 47); + __m512i const data_vec = _mm512_xor_si512(acc_vec, shifted); + /* xacc[0] ^= secret; */ + __m512i const key_vec = _mm512_loadu_si512(secret); + __m512i const data_key = _mm512_xor_si512(data_vec, key_vec); + + /* xacc[0] *= XXH_PRIME32_1; */ + __m512i const data_key_hi = _mm512_shuffle_epi32(data_key, (_MM_PERM_ENUM)_MM_SHUFFLE(0, 3, 0, 1)); + __m512i const prod_lo = _mm512_mul_epu32(data_key, prime32); + __m512i const prod_hi = _mm512_mul_epu32(data_key_hi, prime32); + *xacc = _mm512_add_epi64(prod_lo, _mm512_slli_epi64(prod_hi, 32)); + } +} + +XXH_FORCE_INLINE XXH_TARGET_AVX512 void XXH3_initCustomSecret_avx512(void* XXH_RESTRICT customSecret, xxh_u64 seed64) { + XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 63) == 0); + XXH_STATIC_ASSERT(XXH_SEC_ALIGN == 64); + XXH_ASSERT(((size_t)customSecret & 63) == 0); + (void)(&XXH_writeLE64); + { + int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m512i); + __m512i const seed = _mm512_mask_set1_epi64(_mm512_set1_epi64((xxh_i64)seed64), 0xAA, -(xxh_i64)seed64); + + XXH_ALIGN(64) const __m512i* const src = (const __m512i*)XXH3_kSecret; + XXH_ALIGN(64) __m512i* const dest = (__m512i*)customSecret; + int i; + for (i = 0; i < nbRounds; ++i) { + /* GCC has a bug, _mm512_stream_load_si512 accepts 'void*', not 'void const*', + * this will warn "discards ‘const’ qualifier". */ + union { + XXH_ALIGN(64) const __m512i* cp; + XXH_ALIGN(64) void* p; + } remote_const_void; + remote_const_void.cp = src + i; + dest[i] = _mm512_add_epi64(_mm512_stream_load_si512(remote_const_void.p), seed); + } + } +} + +#endif + +#if (XXH_VECTOR == XXH_AVX2) || defined(XXH_X86DISPATCH) + +#ifndef XXH_TARGET_AVX2 +#define XXH_TARGET_AVX2 /* disable attribute target */ +#endif + +XXH_FORCE_INLINE XXH_TARGET_AVX2 void XXH3_accumulate_512_avx2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) { + XXH_ASSERT((((size_t)acc) & 31) == 0); + { + XXH_ALIGN(32) __m256i* const xacc = (__m256i*)acc; + /* Unaligned. This is mainly for pointer arithmetic, and because + * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */ + const __m256i* const xinput = (const __m256i*)input; + /* Unaligned. This is mainly for pointer arithmetic, and because + * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */ + const __m256i* const xsecret = (const __m256i*)secret; + + size_t i; + for (i = 0; i < XXH_STRIPE_LEN / sizeof(__m256i); i++) { + /* data_vec = xinput[i]; */ + __m256i const data_vec = _mm256_loadu_si256(xinput + i); + /* key_vec = xsecret[i]; */ + __m256i const key_vec = _mm256_loadu_si256(xsecret + i); + /* data_key = data_vec ^ key_vec; */ + __m256i const data_key = _mm256_xor_si256(data_vec, key_vec); + /* data_key_lo = data_key >> 32; */ + __m256i const data_key_lo = _mm256_shuffle_epi32(data_key, _MM_SHUFFLE(0, 3, 0, 1)); + /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */ + __m256i const product = _mm256_mul_epu32(data_key, data_key_lo); + /* xacc[i] += swap(data_vec); */ + __m256i const data_swap = _mm256_shuffle_epi32(data_vec, _MM_SHUFFLE(1, 0, 3, 2)); + __m256i const sum = _mm256_add_epi64(xacc[i], data_swap); + /* xacc[i] += product; */ + xacc[i] = _mm256_add_epi64(product, sum); + } + } +} + +XXH_FORCE_INLINE XXH_TARGET_AVX2 void XXH3_scrambleAcc_avx2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) { + XXH_ASSERT((((size_t)acc) & 31) == 0); + { + XXH_ALIGN(32) __m256i* const xacc = (__m256i*)acc; + /* Unaligned. This is mainly for pointer arithmetic, and because + * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */ + const __m256i* const xsecret = (const __m256i*)secret; + const __m256i prime32 = _mm256_set1_epi32((int)XXH_PRIME32_1); + + size_t i; + for (i = 0; i < XXH_STRIPE_LEN / sizeof(__m256i); i++) { + /* xacc[i] ^= (xacc[i] >> 47) */ + __m256i const acc_vec = xacc[i]; + __m256i const shifted = _mm256_srli_epi64(acc_vec, 47); + __m256i const data_vec = _mm256_xor_si256(acc_vec, shifted); + /* xacc[i] ^= xsecret; */ + __m256i const key_vec = _mm256_loadu_si256(xsecret + i); + __m256i const data_key = _mm256_xor_si256(data_vec, key_vec); + + /* xacc[i] *= XXH_PRIME32_1; */ + __m256i const data_key_hi = _mm256_shuffle_epi32(data_key, _MM_SHUFFLE(0, 3, 0, 1)); + __m256i const prod_lo = _mm256_mul_epu32(data_key, prime32); + __m256i const prod_hi = _mm256_mul_epu32(data_key_hi, prime32); + xacc[i] = _mm256_add_epi64(prod_lo, _mm256_slli_epi64(prod_hi, 32)); + } + } +} + +XXH_FORCE_INLINE XXH_TARGET_AVX2 void XXH3_initCustomSecret_avx2(void* XXH_RESTRICT customSecret, xxh_u64 seed64) { + XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 31) == 0); + XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE / sizeof(__m256i)) == 6); + XXH_STATIC_ASSERT(XXH_SEC_ALIGN <= 64); + (void)(&XXH_writeLE64); + XXH_PREFETCH(customSecret); + { + __m256i const seed = _mm256_set_epi64x(-(xxh_i64)seed64, (xxh_i64)seed64, -(xxh_i64)seed64, (xxh_i64)seed64); + + XXH_ALIGN(64) const __m256i* const src = (const __m256i*)XXH3_kSecret; + XXH_ALIGN(64) __m256i* dest = (__m256i*)customSecret; + +#if defined(__GNUC__) || defined(__clang__) + /* + * On GCC & Clang, marking 'dest' as modified will cause the compiler: + * - do not extract the secret from sse registers in the internal loop + * - use less common registers, and avoid pushing these reg into stack + * The asm hack causes Clang to assume that XXH3_kSecretPtr aliases with + * customSecret, and on aarch64, this prevented LDP from merging two + * loads together for free. Putting the loads together before the stores + * properly generates LDP. + */ + __asm__("" : "+r"(dest)); +#endif + + /* GCC -O2 need unroll loop manually */ + dest[0] = _mm256_add_epi64(_mm256_stream_load_si256(src + 0), seed); + dest[1] = _mm256_add_epi64(_mm256_stream_load_si256(src + 1), seed); + dest[2] = _mm256_add_epi64(_mm256_stream_load_si256(src + 2), seed); + dest[3] = _mm256_add_epi64(_mm256_stream_load_si256(src + 3), seed); + dest[4] = _mm256_add_epi64(_mm256_stream_load_si256(src + 4), seed); + dest[5] = _mm256_add_epi64(_mm256_stream_load_si256(src + 5), seed); + } +} + +#endif + +#if (XXH_VECTOR == XXH_SSE2) || defined(XXH_X86DISPATCH) + +#ifndef XXH_TARGET_SSE2 +#define XXH_TARGET_SSE2 /* disable attribute target */ +#endif + +XXH_FORCE_INLINE XXH_TARGET_SSE2 void XXH3_accumulate_512_sse2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) { + /* SSE2 is just a half-scale version of the AVX2 version. */ + XXH_ASSERT((((size_t)acc) & 15) == 0); + { + XXH_ALIGN(16) __m128i* const xacc = (__m128i*)acc; + /* Unaligned. This is mainly for pointer arithmetic, and because + * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */ + const __m128i* const xinput = (const __m128i*)input; + /* Unaligned. This is mainly for pointer arithmetic, and because + * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */ + const __m128i* const xsecret = (const __m128i*)secret; + + size_t i; + for (i = 0; i < XXH_STRIPE_LEN / sizeof(__m128i); i++) { + /* data_vec = xinput[i]; */ + __m128i const data_vec = _mm_loadu_si128(xinput + i); + /* key_vec = xsecret[i]; */ + __m128i const key_vec = _mm_loadu_si128(xsecret + i); + /* data_key = data_vec ^ key_vec; */ + __m128i const data_key = _mm_xor_si128(data_vec, key_vec); + /* data_key_lo = data_key >> 32; */ + __m128i const data_key_lo = _mm_shuffle_epi32(data_key, _MM_SHUFFLE(0, 3, 0, 1)); + /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */ + __m128i const product = _mm_mul_epu32(data_key, data_key_lo); + /* xacc[i] += swap(data_vec); */ + __m128i const data_swap = _mm_shuffle_epi32(data_vec, _MM_SHUFFLE(1, 0, 3, 2)); + __m128i const sum = _mm_add_epi64(xacc[i], data_swap); + /* xacc[i] += product; */ + xacc[i] = _mm_add_epi64(product, sum); + } + } +} + +XXH_FORCE_INLINE XXH_TARGET_SSE2 void XXH3_scrambleAcc_sse2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) { + XXH_ASSERT((((size_t)acc) & 15) == 0); + { + XXH_ALIGN(16) __m128i* const xacc = (__m128i*)acc; + /* Unaligned. This is mainly for pointer arithmetic, and because + * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */ + const __m128i* const xsecret = (const __m128i*)secret; + const __m128i prime32 = _mm_set1_epi32((int)XXH_PRIME32_1); + + size_t i; + for (i = 0; i < XXH_STRIPE_LEN / sizeof(__m128i); i++) { + /* xacc[i] ^= (xacc[i] >> 47) */ + __m128i const acc_vec = xacc[i]; + __m128i const shifted = _mm_srli_epi64(acc_vec, 47); + __m128i const data_vec = _mm_xor_si128(acc_vec, shifted); + /* xacc[i] ^= xsecret[i]; */ + __m128i const key_vec = _mm_loadu_si128(xsecret + i); + __m128i const data_key = _mm_xor_si128(data_vec, key_vec); + + /* xacc[i] *= XXH_PRIME32_1; */ + __m128i const data_key_hi = _mm_shuffle_epi32(data_key, _MM_SHUFFLE(0, 3, 0, 1)); + __m128i const prod_lo = _mm_mul_epu32(data_key, prime32); + __m128i const prod_hi = _mm_mul_epu32(data_key_hi, prime32); + xacc[i] = _mm_add_epi64(prod_lo, _mm_slli_epi64(prod_hi, 32)); + } + } +} + +XXH_FORCE_INLINE XXH_TARGET_SSE2 void XXH3_initCustomSecret_sse2(void* XXH_RESTRICT customSecret, xxh_u64 seed64) { + XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0); + (void)(&XXH_writeLE64); + { + int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m128i); + +#if defined(_MSC_VER) && defined(_M_IX86) && _MSC_VER < 1900 + // MSVC 32bit mode does not support _mm_set_epi64x before 2015 + XXH_ALIGN(16) const xxh_i64 seed64x2[2] = { (xxh_i64)seed64, -(xxh_i64)seed64 }; + __m128i const seed = _mm_load_si128((__m128i const*)seed64x2); +#else + __m128i const seed = _mm_set_epi64x(-(xxh_i64)seed64, (xxh_i64)seed64); +#endif + int i; + + XXH_ALIGN(64) const float* const src = (float const*)XXH3_kSecret; + XXH_ALIGN(XXH_SEC_ALIGN) __m128i* dest = (__m128i*)customSecret; +#if defined(__GNUC__) || defined(__clang__) + /* + * On GCC & Clang, marking 'dest' as modified will cause the compiler: + * - do not extract the secret from sse registers in the internal loop + * - use less common registers, and avoid pushing these reg into stack + */ + __asm__("" : "+r"(dest)); +#endif + + for (i = 0; i < nbRounds; ++i) { + dest[i] = _mm_add_epi64(_mm_castps_si128(_mm_load_ps(src + i * 4)), seed); + } + } +} + +#endif + +#if (XXH_VECTOR == XXH_NEON) + +XXH_FORCE_INLINE void XXH3_accumulate_512_neon(void* XXH_RESTRICT acc, const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) { + XXH_ASSERT((((size_t)acc) & 15) == 0); + { + XXH_ALIGN(16) uint64x2_t* const xacc = (uint64x2_t*)acc; + /* We don't use a uint32x4_t pointer because it causes bus errors on ARMv7. */ + uint8_t const* const xinput = (const uint8_t*)input; + uint8_t const* const xsecret = (const uint8_t*)secret; + + size_t i; + for (i = 0; i < XXH_STRIPE_LEN / sizeof(uint64x2_t); i++) { + /* data_vec = xinput[i]; */ + uint8x16_t data_vec = vld1q_u8(xinput + (i * 16)); + /* key_vec = xsecret[i]; */ + uint8x16_t key_vec = vld1q_u8(xsecret + (i * 16)); + uint64x2_t data_key; + uint32x2_t data_key_lo, data_key_hi; + /* xacc[i] += swap(data_vec); */ + uint64x2_t const data64 = vreinterpretq_u64_u8(data_vec); + uint64x2_t const swapped = vextq_u64(data64, data64, 1); + xacc[i] = vaddq_u64(xacc[i], swapped); + /* data_key = data_vec ^ key_vec; */ + data_key = vreinterpretq_u64_u8(veorq_u8(data_vec, key_vec)); + /* data_key_lo = (uint32x2_t) (data_key & 0xFFFFFFFF); + * data_key_hi = (uint32x2_t) (data_key >> 32); + * data_key = UNDEFINED; */ + XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi); + /* xacc[i] += (uint64x2_t) data_key_lo * (uint64x2_t) data_key_hi; */ + xacc[i] = vmlal_u32(xacc[i], data_key_lo, data_key_hi); + } + } +} + +XXH_FORCE_INLINE void XXH3_scrambleAcc_neon(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) { + XXH_ASSERT((((size_t)acc) & 15) == 0); + + { + uint64x2_t* xacc = (uint64x2_t*)acc; + uint8_t const* xsecret = (uint8_t const*)secret; + uint32x2_t prime = vdup_n_u32(XXH_PRIME32_1); + + size_t i; + for (i = 0; i < XXH_STRIPE_LEN / sizeof(uint64x2_t); i++) { + /* xacc[i] ^= (xacc[i] >> 47); */ + uint64x2_t acc_vec = xacc[i]; + uint64x2_t shifted = vshrq_n_u64(acc_vec, 47); + uint64x2_t data_vec = veorq_u64(acc_vec, shifted); + + /* xacc[i] ^= xsecret[i]; */ + uint8x16_t key_vec = vld1q_u8(xsecret + (i * 16)); + uint64x2_t data_key = veorq_u64(data_vec, vreinterpretq_u64_u8(key_vec)); + + /* xacc[i] *= XXH_PRIME32_1 */ + uint32x2_t data_key_lo, data_key_hi; + /* data_key_lo = (uint32x2_t) (xacc[i] & 0xFFFFFFFF); + * data_key_hi = (uint32x2_t) (xacc[i] >> 32); + * xacc[i] = UNDEFINED; */ + XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi); + { /* + * prod_hi = (data_key >> 32) * XXH_PRIME32_1; + * + * Avoid vmul_u32 + vshll_n_u32 since Clang 6 and 7 will + * incorrectly "optimize" this: + * tmp = vmul_u32(vmovn_u64(a), vmovn_u64(b)); + * shifted = vshll_n_u32(tmp, 32); + * to this: + * tmp = "vmulq_u64"(a, b); // no such thing! + * shifted = vshlq_n_u64(tmp, 32); + * + * However, unlike SSE, Clang lacks a 64-bit multiply routine + * for NEON, and it scalarizes two 64-bit multiplies instead. + * + * vmull_u32 has the same timing as vmul_u32, and it avoids + * this bug completely. + * See https://bugs.llvm.org/show_bug.cgi?id=39967 + */ + uint64x2_t prod_hi = vmull_u32(data_key_hi, prime); + /* xacc[i] = prod_hi << 32; */ + xacc[i] = vshlq_n_u64(prod_hi, 32); + /* xacc[i] += (prod_hi & 0xFFFFFFFF) * XXH_PRIME32_1; */ + xacc[i] = vmlal_u32(xacc[i], data_key_lo, prime); + } + } + } +} + +#endif + +#if (XXH_VECTOR == XXH_VSX) + +XXH_FORCE_INLINE void XXH3_accumulate_512_vsx(void* XXH_RESTRICT acc, const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) { + xxh_u64x2* const xacc = (xxh_u64x2*)acc; /* presumed aligned */ + xxh_u64x2 const* const xinput = (xxh_u64x2 const*)input; /* no alignment restriction */ + xxh_u64x2 const* const xsecret = (xxh_u64x2 const*)secret; /* no alignment restriction */ + xxh_u64x2 const v32 = { 32, 32 }; + size_t i; + for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) { + /* data_vec = xinput[i]; */ + xxh_u64x2 const data_vec = XXH_vec_loadu(xinput + i); + /* key_vec = xsecret[i]; */ + xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + i); + xxh_u64x2 const data_key = data_vec ^ key_vec; + /* shuffled = (data_key << 32) | (data_key >> 32); */ + xxh_u32x4 const shuffled = (xxh_u32x4)vec_rl(data_key, v32); + /* product = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)shuffled & 0xFFFFFFFF); */ + xxh_u64x2 const product = XXH_vec_mulo((xxh_u32x4)data_key, shuffled); + xacc[i] += product; + + /* swap high and low halves */ +#ifdef __s390x__ + xacc[i] += vec_permi(data_vec, data_vec, 2); +#else + xacc[i] += vec_xxpermdi(data_vec, data_vec, 2); +#endif + } +} + +XXH_FORCE_INLINE void XXH3_scrambleAcc_vsx(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) { + XXH_ASSERT((((size_t)acc) & 15) == 0); + + { + xxh_u64x2* const xacc = (xxh_u64x2*)acc; + const xxh_u64x2* const xsecret = (const xxh_u64x2*)secret; + /* constants */ + xxh_u64x2 const v32 = { 32, 32 }; + xxh_u64x2 const v47 = { 47, 47 }; + xxh_u32x4 const prime = { XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1 }; + size_t i; + for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) { + /* xacc[i] ^= (xacc[i] >> 47); */ + xxh_u64x2 const acc_vec = xacc[i]; + xxh_u64x2 const data_vec = acc_vec ^ (acc_vec >> v47); + + /* xacc[i] ^= xsecret[i]; */ + xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + i); + xxh_u64x2 const data_key = data_vec ^ key_vec; + + /* xacc[i] *= XXH_PRIME32_1 */ + /* prod_lo = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)prime & 0xFFFFFFFF); */ + xxh_u64x2 const prod_even = XXH_vec_mule((xxh_u32x4)data_key, prime); + /* prod_hi = ((xxh_u64x2)data_key >> 32) * ((xxh_u64x2)prime >> 32); */ + xxh_u64x2 const prod_odd = XXH_vec_mulo((xxh_u32x4)data_key, prime); + xacc[i] = prod_odd + (prod_even << v32); + } + } +} + +#endif + +/* scalar variants - universal */ + +XXH_FORCE_INLINE void XXH3_accumulate_512_scalar(void* XXH_RESTRICT acc, const void* XXH_RESTRICT input, + const void* XXH_RESTRICT secret) { + XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64* const xacc = (xxh_u64*)acc; /* presumed aligned */ + const xxh_u8* const xinput = (const xxh_u8*)input; /* no alignment restriction */ + const xxh_u8* const xsecret = (const xxh_u8*)secret; /* no alignment restriction */ + size_t i; + XXH_ASSERT(((size_t)acc & (XXH_ACC_ALIGN - 1)) == 0); + for (i = 0; i < XXH_ACC_NB; i++) { + xxh_u64 const data_val = XXH_readLE64(xinput + 8 * i); + xxh_u64 const data_key = data_val ^ XXH_readLE64(xsecret + i * 8); + xacc[i ^ 1] += data_val; /* swap adjacent lanes */ + xacc[i] += XXH_mult32to64(data_key & 0xFFFFFFFF, data_key >> 32); + } +} + +XXH_FORCE_INLINE void XXH3_scrambleAcc_scalar(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) { + XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64* const xacc = (xxh_u64*)acc; /* presumed aligned */ + const xxh_u8* const xsecret = (const xxh_u8*)secret; /* no alignment restriction */ + size_t i; + XXH_ASSERT((((size_t)acc) & (XXH_ACC_ALIGN - 1)) == 0); + for (i = 0; i < XXH_ACC_NB; i++) { + xxh_u64 const key64 = XXH_readLE64(xsecret + 8 * i); + xxh_u64 acc64 = xacc[i]; + acc64 = XXH_xorshift64(acc64, 47); + acc64 ^= key64; + acc64 *= XXH_PRIME32_1; + xacc[i] = acc64; + } +} + +XXH_FORCE_INLINE void XXH3_initCustomSecret_scalar(void* XXH_RESTRICT customSecret, xxh_u64 seed64) { + /* + * We need a separate pointer for the hack below, + * which requires a non-const pointer. + * Any decent compiler will optimize this out otherwise. + */ + const xxh_u8* kSecretPtr = XXH3_kSecret; + XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0); + +#if defined(__clang__) && defined(__aarch64__) + /* + * UGLY HACK: + * Clang generates a bunch of MOV/MOVK pairs for aarch64, and they are + * placed sequentially, in order, at the top of the unrolled loop. + * + * While MOVK is great for generating constants (2 cycles for a 64-bit + * constant compared to 4 cycles for LDR), long MOVK chains stall the + * integer pipelines: + * I L S + * MOVK + * MOVK + * MOVK + * MOVK + * ADD + * SUB STR + * STR + * By forcing loads from memory (as the asm line causes Clang to assume + * that XXH3_kSecretPtr has been changed), the pipelines are used more + * efficiently: + * I L S + * LDR + * ADD LDR + * SUB STR + * STR + * XXH3_64bits_withSeed, len == 256, Snapdragon 835 + * without hack: 2654.4 MB/s + * with hack: 3202.9 MB/s + */ + __asm__("" : "+r"(kSecretPtr)); +#endif + /* + * Note: in debug mode, this overrides the asm optimization + * and Clang will emit MOVK chains again. + */ + XXH_ASSERT(kSecretPtr == XXH3_kSecret); + + { + int const nbRounds = XXH_SECRET_DEFAULT_SIZE / 16; + int i; + for (i = 0; i < nbRounds; i++) { + /* + * The asm hack causes Clang to assume that kSecretPtr aliases with + * customSecret, and on aarch64, this prevented LDP from merging two + * loads together for free. Putting the loads together before the stores + * properly generates LDP. + */ + xxh_u64 lo = XXH_readLE64(kSecretPtr + 16 * i) + seed64; + xxh_u64 hi = XXH_readLE64(kSecretPtr + 16 * i + 8) - seed64; + XXH_writeLE64((xxh_u8*)customSecret + 16 * i, lo); + XXH_writeLE64((xxh_u8*)customSecret + 16 * i + 8, hi); + } + } +} + +typedef void (*XXH3_f_accumulate_512)(void* XXH_RESTRICT, const void*, const void*); +typedef void (*XXH3_f_scrambleAcc)(void* XXH_RESTRICT, const void*); +typedef void (*XXH3_f_initCustomSecret)(void* XXH_RESTRICT, xxh_u64); + +#if (XXH_VECTOR == XXH_AVX512) + +#define XXH3_accumulate_512 XXH3_accumulate_512_avx512 +#define XXH3_scrambleAcc XXH3_scrambleAcc_avx512 +#define XXH3_initCustomSecret XXH3_initCustomSecret_avx512 + +#elif (XXH_VECTOR == XXH_AVX2) + +#define XXH3_accumulate_512 XXH3_accumulate_512_avx2 +#define XXH3_scrambleAcc XXH3_scrambleAcc_avx2 +#define XXH3_initCustomSecret XXH3_initCustomSecret_avx2 + +#elif (XXH_VECTOR == XXH_SSE2) + +#define XXH3_accumulate_512 XXH3_accumulate_512_sse2 +#define XXH3_scrambleAcc XXH3_scrambleAcc_sse2 +#define XXH3_initCustomSecret XXH3_initCustomSecret_sse2 + +#elif (XXH_VECTOR == XXH_NEON) + +#define XXH3_accumulate_512 XXH3_accumulate_512_neon +#define XXH3_scrambleAcc XXH3_scrambleAcc_neon +#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar + +#elif (XXH_VECTOR == XXH_VSX) + +#define XXH3_accumulate_512 XXH3_accumulate_512_vsx +#define XXH3_scrambleAcc XXH3_scrambleAcc_vsx +#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar + +#else /* scalar */ + +#define XXH3_accumulate_512 XXH3_accumulate_512_scalar +#define XXH3_scrambleAcc XXH3_scrambleAcc_scalar +#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar + +#endif + +#ifndef XXH_PREFETCH_DIST +#ifdef __clang__ +#define XXH_PREFETCH_DIST 320 +#else +#if (XXH_VECTOR == XXH_AVX512) +#define XXH_PREFETCH_DIST 512 +#else +#define XXH_PREFETCH_DIST 384 +#endif +#endif /* __clang__ */ +#endif /* XXH_PREFETCH_DIST */ + +/* + * XXH3_accumulate() + * Loops over XXH3_accumulate_512(). + * Assumption: nbStripes will not overflow the secret size + */ +XXH_FORCE_INLINE void XXH3_accumulate(xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT input, + const xxh_u8* XXH_RESTRICT secret, size_t nbStripes, + XXH3_f_accumulate_512 f_acc512) { + size_t n; + for (n = 0; n < nbStripes; n++) { + const xxh_u8* const in = input + n * XXH_STRIPE_LEN; + XXH_PREFETCH(in + XXH_PREFETCH_DIST); + f_acc512(acc, in, secret + n * XXH_SECRET_CONSUME_RATE); + } +} + +XXH_FORCE_INLINE void XXH3_hashLong_internal_loop(xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT input, + size_t len, const xxh_u8* XXH_RESTRICT secret, size_t secretSize, + XXH3_f_accumulate_512 f_acc512, XXH3_f_scrambleAcc f_scramble) { + size_t const nbStripesPerBlock = (secretSize - XXH_STRIPE_LEN) / XXH_SECRET_CONSUME_RATE; + size_t const block_len = XXH_STRIPE_LEN * nbStripesPerBlock; + size_t const nb_blocks = (len - 1) / block_len; + + size_t n; + + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + + for (n = 0; n < nb_blocks; n++) { + XXH3_accumulate(acc, input + n * block_len, secret, nbStripesPerBlock, f_acc512); + f_scramble(acc, secret + secretSize - XXH_STRIPE_LEN); + } + + /* last partial block */ + XXH_ASSERT(len > XXH_STRIPE_LEN); + { + size_t const nbStripes = ((len - 1) - (block_len * nb_blocks)) / XXH_STRIPE_LEN; + XXH_ASSERT(nbStripes <= (secretSize / XXH_SECRET_CONSUME_RATE)); + XXH3_accumulate(acc, input + nb_blocks * block_len, secret, nbStripes, f_acc512); + + /* last stripe */ + { + const xxh_u8* const p = input + len - XXH_STRIPE_LEN; +#define XXH_SECRET_LASTACC_START 7 /* not aligned on 8, last secret is different from acc & scrambler */ + f_acc512(acc, p, secret + secretSize - XXH_STRIPE_LEN - XXH_SECRET_LASTACC_START); + } + } +} + +XXH_FORCE_INLINE xxh_u64 XXH3_mix2Accs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret) { + return XXH3_mul128_fold64(acc[0] ^ XXH_readLE64(secret), acc[1] ^ XXH_readLE64(secret + 8)); +} + +static XXH64_hash_t XXH3_mergeAccs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret, xxh_u64 start) { + xxh_u64 result64 = start; + size_t i = 0; + + for (i = 0; i < 4; i++) { + result64 += XXH3_mix2Accs(acc + 2 * i, secret + 16 * i); +#if defined(__clang__) /* Clang */ \ + && (defined(__arm__) || defined(__thumb__)) /* ARMv7 */ \ + && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \ + && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable */ + /* + * UGLY HACK: + * Prevent autovectorization on Clang ARMv7-a. Exact same problem as + * the one in XXH3_len_129to240_64b. Speeds up shorter keys > 240b. + * XXH3_64bits, len == 256, Snapdragon 835: + * without hack: 2063.7 MB/s + * with hack: 2560.7 MB/s + */ + __asm__("" : "+r"(result64)); +#endif + } + + return XXH3_avalanche(result64); +} + +#define XXH3_INIT_ACC \ + { \ + XXH_PRIME32_3, XXH_PRIME64_1, XXH_PRIME64_2, XXH_PRIME64_3, XXH_PRIME64_4, XXH_PRIME32_2, XXH_PRIME64_5, \ + XXH_PRIME32_1 \ + } + +XXH_FORCE_INLINE XXH64_hash_t XXH3_hashLong_64b_internal(const void* XXH_RESTRICT input, size_t len, + const void* XXH_RESTRICT secret, size_t secretSize, + XXH3_f_accumulate_512 f_acc512, + XXH3_f_scrambleAcc f_scramble) { + XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC; + + XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize, f_acc512, + f_scramble); + + /* converge into final hash */ + XXH_STATIC_ASSERT(sizeof(acc) == 64); + /* do not align on 8, so that the secret is different from the accumulator */ +#define XXH_SECRET_MERGEACCS_START 11 + XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); + return XXH3_mergeAccs(acc, (const xxh_u8*)secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)len * XXH_PRIME64_1); +} + +/* + * It's important for performance that XXH3_hashLong is not inlined. + */ +XXH_NO_INLINE XXH64_hash_t XXH3_hashLong_64b_withSecret(const void* XXH_RESTRICT input, size_t len, XXH64_hash_t seed64, + const xxh_u8* XXH_RESTRICT secret, size_t secretLen) { + (void)seed64; + return XXH3_hashLong_64b_internal(input, len, secret, secretLen, XXH3_accumulate_512, XXH3_scrambleAcc); +} + +/* + * It's important for performance that XXH3_hashLong is not inlined. + * Since the function is not inlined, the compiler may not be able to understand that, + * in some scenarios, its `secret` argument is actually a compile time constant. + * This variant enforces that the compiler can detect that, + * and uses this opportunity to streamline the generated code for better performance. + */ +XXH_NO_INLINE XXH64_hash_t XXH3_hashLong_64b_default(const void* XXH_RESTRICT input, size_t len, XXH64_hash_t seed64, + const xxh_u8* XXH_RESTRICT secret, size_t secretLen) { + (void)seed64; + (void)secret; + (void)secretLen; + return XXH3_hashLong_64b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_accumulate_512, + XXH3_scrambleAcc); +} + +/* + * XXH3_hashLong_64b_withSeed(): + * Generate a custom key based on alteration of default XXH3_kSecret with the seed, + * and then use this key for long mode hashing. + * + * This operation is decently fast but nonetheless costs a little bit of time. + * Try to avoid it whenever possible (typically when seed==0). + * + * It's important for performance that XXH3_hashLong is not inlined. Not sure + * why (uop cache maybe?), but the difference is large and easily measurable. + */ +XXH_FORCE_INLINE XXH64_hash_t XXH3_hashLong_64b_withSeed_internal(const void* input, size_t len, XXH64_hash_t seed, + XXH3_f_accumulate_512 f_acc512, + XXH3_f_scrambleAcc f_scramble, + XXH3_f_initCustomSecret f_initSec) { + if (seed == 0) + return XXH3_hashLong_64b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), f_acc512, f_scramble); + { + XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE]; + f_initSec(secret, seed); + return XXH3_hashLong_64b_internal(input, len, secret, sizeof(secret), f_acc512, f_scramble); + } +} + +/* + * It's important for performance that XXH3_hashLong is not inlined. + */ +XXH_NO_INLINE XXH64_hash_t XXH3_hashLong_64b_withSeed(const void* input, size_t len, XXH64_hash_t seed, + const xxh_u8* secret, size_t secretLen) { + (void)secret; + (void)secretLen; + return XXH3_hashLong_64b_withSeed_internal(input, len, seed, XXH3_accumulate_512, XXH3_scrambleAcc, + XXH3_initCustomSecret); +} + +typedef XXH64_hash_t (*XXH3_hashLong64_f)(const void* XXH_RESTRICT, size_t, XXH64_hash_t, const xxh_u8* XXH_RESTRICT, + size_t); + +XXH_FORCE_INLINE XXH64_hash_t XXH3_64bits_internal(const void* XXH_RESTRICT input, size_t len, XXH64_hash_t seed64, + const void* XXH_RESTRICT secret, size_t secretLen, + XXH3_hashLong64_f f_hashLong) { + XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN); + /* + * If an action is to be taken if `secretLen` condition is not respected, + * it should be done here. + * For now, it's a contract pre-condition. + * Adding a check and a branch here would cost performance at every hash. + * Also, note that function signature doesn't offer room to return an error. + */ + if (len <= 16) return XXH3_len_0to16_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64); + if (len <= 128) return XXH3_len_17to128_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); + if (len <= XXH3_MIDSIZE_MAX) + return XXH3_len_129to240_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); + return f_hashLong(input, len, seed64, (const xxh_u8*)secret, secretLen); +} + +/* === Public entry point === */ + +XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* input, size_t len) { + return XXH3_64bits_internal(input, len, 0, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_default); +} + +XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSecret(const void* input, size_t len, const void* secret, + size_t secretSize) { + return XXH3_64bits_internal(input, len, 0, secret, secretSize, XXH3_hashLong_64b_withSecret); +} + +XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSeed(const void* input, size_t len, XXH64_hash_t seed) { + return XXH3_64bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_withSeed); +} + +/* === XXH3 streaming === */ + +/* + * Malloc's a pointer that is always aligned to align. + * + * This must be freed with `XXH_alignedFree()`. + * + * malloc typically guarantees 16 byte alignment on 64-bit systems and 8 byte + * alignment on 32-bit. This isn't enough for the 32 byte aligned loads in AVX2 + * or on 32-bit, the 16 byte aligned loads in SSE2 and NEON. + * + * This underalignment previously caused a rather obvious crash which went + * completely unnoticed due to XXH3_createState() not actually being tested. + * Credit to RedSpah for noticing this bug. + * + * The alignment is done manually: Functions like posix_memalign or _mm_malloc + * are avoided: To maintain portability, we would have to write a fallback + * like this anyways, and besides, testing for the existence of library + * functions without relying on external build tools is impossible. + * + * The method is simple: Overallocate, manually align, and store the offset + * to the original behind the returned pointer. + * + * Align must be a power of 2 and 8 <= align <= 128. + */ +static void* XXH_alignedMalloc(size_t s, size_t align) { + XXH_ASSERT(align <= 128 && align >= 8); /* range check */ + XXH_ASSERT((align & (align - 1)) == 0); /* power of 2 */ + XXH_ASSERT(s != 0 && s < (s + align)); /* empty/overflow */ + { /* Overallocate to make room for manual realignment and an offset byte */ + xxh_u8* base = (xxh_u8*)XXH_malloc(s + align); + if (base != NULL) { + /* + * Get the offset needed to align this pointer. + * + * Even if the returned pointer is aligned, there will always be + * at least one byte to store the offset to the original pointer. + */ + size_t offset = align - ((size_t)base & (align - 1)); /* base % align */ + /* Add the offset for the now-aligned pointer */ + xxh_u8* ptr = base + offset; + + XXH_ASSERT((size_t)ptr % align == 0); + + /* Store the offset immediately before the returned pointer. */ + ptr[-1] = (xxh_u8)offset; + return ptr; + } + return NULL; + } +} +/* + * Frees an aligned pointer allocated by XXH_alignedMalloc(). Don't pass + * normal malloc'd pointers, XXH_alignedMalloc has a specific data layout. + */ +static void XXH_alignedFree(void* p) { + if (p != NULL) { + xxh_u8* ptr = (xxh_u8*)p; + /* Get the offset byte we added in XXH_malloc. */ + xxh_u8 offset = ptr[-1]; + /* Free the original malloc'd pointer */ + xxh_u8* base = ptr - offset; + XXH_free(base); + } +} +XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void) { + XXH3_state_t* const state = (XXH3_state_t*)XXH_alignedMalloc(sizeof(XXH3_state_t), 64); + if (state == NULL) return NULL; + XXH3_INITSTATE(state); + return state; +} + +XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr) { + XXH_alignedFree(statePtr); + return XXH_OK; +} + +XXH_PUBLIC_API void XXH3_copyState(XXH3_state_t* dst_state, const XXH3_state_t* src_state) { + memcpy(dst_state, src_state, sizeof(*dst_state)); +} + +static void XXH3_64bits_reset_internal(XXH3_state_t* statePtr, XXH64_hash_t seed, const void* secret, + size_t secretSize) { + size_t const initStart = offsetof(XXH3_state_t, bufferedSize); + size_t const initLength = offsetof(XXH3_state_t, nbStripesPerBlock) - initStart; + XXH_ASSERT(offsetof(XXH3_state_t, nbStripesPerBlock) > initStart); + XXH_ASSERT(statePtr != NULL); + /* set members from bufferedSize to nbStripesPerBlock (excluded) to 0 */ + memset((char*)statePtr + initStart, 0, initLength); + statePtr->acc[0] = XXH_PRIME32_3; + statePtr->acc[1] = XXH_PRIME64_1; + statePtr->acc[2] = XXH_PRIME64_2; + statePtr->acc[3] = XXH_PRIME64_3; + statePtr->acc[4] = XXH_PRIME64_4; + statePtr->acc[5] = XXH_PRIME32_2; + statePtr->acc[6] = XXH_PRIME64_5; + statePtr->acc[7] = XXH_PRIME32_1; + statePtr->seed = seed; + statePtr->extSecret = (const unsigned char*)secret; + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + statePtr->secretLimit = secretSize - XXH_STRIPE_LEN; + statePtr->nbStripesPerBlock = statePtr->secretLimit / XXH_SECRET_CONSUME_RATE; +} + +XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset(XXH3_state_t* statePtr) { + if (statePtr == NULL) return XXH_ERROR; + XXH3_64bits_reset_internal(statePtr, 0, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE); + return XXH_OK; +} + +XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, + size_t secretSize) { + if (statePtr == NULL) return XXH_ERROR; + XXH3_64bits_reset_internal(statePtr, 0, secret, secretSize); + if (secret == NULL) return XXH_ERROR; + if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR; + return XXH_OK; +} + +XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed) { + if (statePtr == NULL) return XXH_ERROR; + if (seed == 0) return XXH3_64bits_reset(statePtr); + if (seed != statePtr->seed) XXH3_initCustomSecret(statePtr->customSecret, seed); + XXH3_64bits_reset_internal(statePtr, seed, NULL, XXH_SECRET_DEFAULT_SIZE); + return XXH_OK; +} + +/* Note : when XXH3_consumeStripes() is invoked, + * there must be a guarantee that at least one more byte must be consumed from input + * so that the function can blindly consume all stripes using the "normal" secret segment */ +XXH_FORCE_INLINE void XXH3_consumeStripes(xxh_u64* XXH_RESTRICT acc, size_t* XXH_RESTRICT nbStripesSoFarPtr, + size_t nbStripesPerBlock, const xxh_u8* XXH_RESTRICT input, size_t nbStripes, + const xxh_u8* XXH_RESTRICT secret, size_t secretLimit, + XXH3_f_accumulate_512 f_acc512, XXH3_f_scrambleAcc f_scramble) { + XXH_ASSERT(nbStripes <= nbStripesPerBlock); /* can handle max 1 scramble per invocation */ + XXH_ASSERT(*nbStripesSoFarPtr < nbStripesPerBlock); + if (nbStripesPerBlock - *nbStripesSoFarPtr <= nbStripes) { + /* need a scrambling operation */ + size_t const nbStripesToEndofBlock = nbStripesPerBlock - *nbStripesSoFarPtr; + size_t const nbStripesAfterBlock = nbStripes - nbStripesToEndofBlock; + XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, nbStripesToEndofBlock, + f_acc512); + f_scramble(acc, secret + secretLimit); + XXH3_accumulate(acc, input + nbStripesToEndofBlock * XXH_STRIPE_LEN, secret, nbStripesAfterBlock, f_acc512); + *nbStripesSoFarPtr = nbStripesAfterBlock; + } else { + XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, nbStripes, f_acc512); + *nbStripesSoFarPtr += nbStripes; + } +} + +/* + * Both XXH3_64bits_update and XXH3_128bits_update use this routine. + */ +XXH_FORCE_INLINE XXH_errorcode XXH3_update(XXH3_state_t* state, const xxh_u8* input, size_t len, + XXH3_f_accumulate_512 f_acc512, XXH3_f_scrambleAcc f_scramble) { + if (input == NULL) +#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER >= 1) + return XXH_OK; +#else + return XXH_ERROR; +#endif + + { + const xxh_u8* const bEnd = input + len; + const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret; + + state->totalLen += len; + + if (state->bufferedSize + len <= XXH3_INTERNALBUFFER_SIZE) { /* fill in tmp buffer */ + XXH_memcpy(state->buffer + state->bufferedSize, input, len); + state->bufferedSize += (XXH32_hash_t)len; + return XXH_OK; + } + /* total input is now > XXH3_INTERNALBUFFER_SIZE */ + +#define XXH3_INTERNALBUFFER_STRIPES (XXH3_INTERNALBUFFER_SIZE / XXH_STRIPE_LEN) + XXH_STATIC_ASSERT(XXH3_INTERNALBUFFER_SIZE % XXH_STRIPE_LEN == 0); /* clean multiple */ + + /* + * Internal buffer is partially filled (always, except at beginning) + * Complete it, then consume it. + */ + if (state->bufferedSize) { + size_t const loadSize = XXH3_INTERNALBUFFER_SIZE - state->bufferedSize; + XXH_memcpy(state->buffer + state->bufferedSize, input, loadSize); + input += loadSize; + XXH3_consumeStripes(state->acc, &state->nbStripesSoFar, state->nbStripesPerBlock, state->buffer, + XXH3_INTERNALBUFFER_STRIPES, secret, state->secretLimit, f_acc512, f_scramble); + state->bufferedSize = 0; + } + XXH_ASSERT(input < bEnd); + + /* Consume input by a multiple of internal buffer size */ + if (input + XXH3_INTERNALBUFFER_SIZE < bEnd) { + const xxh_u8* const limit = bEnd - XXH3_INTERNALBUFFER_SIZE; + do { + XXH3_consumeStripes(state->acc, &state->nbStripesSoFar, state->nbStripesPerBlock, input, + XXH3_INTERNALBUFFER_STRIPES, secret, state->secretLimit, f_acc512, f_scramble); + input += XXH3_INTERNALBUFFER_SIZE; + } while (input < limit); + /* for last partial stripe */ + memcpy(state->buffer + sizeof(state->buffer) - XXH_STRIPE_LEN, input - XXH_STRIPE_LEN, XXH_STRIPE_LEN); + } + XXH_ASSERT(input < bEnd); + + /* Some remaining input (always) : buffer it */ + XXH_memcpy(state->buffer, input, (size_t)(bEnd - input)); + state->bufferedSize = (XXH32_hash_t)(bEnd - input); + } + + return XXH_OK; +} + +XXH_PUBLIC_API XXH_errorcode XXH3_64bits_update(XXH3_state_t* state, const void* input, size_t len) { + return XXH3_update(state, (const xxh_u8*)input, len, XXH3_accumulate_512, XXH3_scrambleAcc); +} + +XXH_FORCE_INLINE void XXH3_digest_long(XXH64_hash_t* acc, const XXH3_state_t* state, const unsigned char* secret) { + /* + * Digest on a local copy. This way, the state remains unaltered, and it can + * continue ingesting more input afterwards. + */ + memcpy(acc, state->acc, sizeof(state->acc)); + if (state->bufferedSize >= XXH_STRIPE_LEN) { + size_t const nbStripes = (state->bufferedSize - 1) / XXH_STRIPE_LEN; + size_t nbStripesSoFar = state->nbStripesSoFar; + XXH3_consumeStripes(acc, &nbStripesSoFar, state->nbStripesPerBlock, state->buffer, nbStripes, secret, + state->secretLimit, XXH3_accumulate_512, XXH3_scrambleAcc); + /* last stripe */ + XXH3_accumulate_512(acc, state->buffer + state->bufferedSize - XXH_STRIPE_LEN, + secret + state->secretLimit - XXH_SECRET_LASTACC_START); + } else { /* bufferedSize < XXH_STRIPE_LEN */ + xxh_u8 lastStripe[XXH_STRIPE_LEN]; + size_t const catchupSize = XXH_STRIPE_LEN - state->bufferedSize; + XXH_ASSERT(state->bufferedSize > 0); /* there is always some input buffered */ + memcpy(lastStripe, state->buffer + sizeof(state->buffer) - catchupSize, catchupSize); + memcpy(lastStripe + catchupSize, state->buffer, state->bufferedSize); + XXH3_accumulate_512(acc, lastStripe, secret + state->secretLimit - XXH_SECRET_LASTACC_START); + } +} + +XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest(const XXH3_state_t* state) { + const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret; + if (state->totalLen > XXH3_MIDSIZE_MAX) { + XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB]; + XXH3_digest_long(acc, state, secret); + return XXH3_mergeAccs(acc, secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)state->totalLen * XXH_PRIME64_1); + } + /* totalLen <= XXH3_MIDSIZE_MAX: digesting a short input */ + if (state->seed) return XXH3_64bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed); + return XXH3_64bits_withSecret(state->buffer, (size_t)(state->totalLen), secret, + state->secretLimit + XXH_STRIPE_LEN); +} + +#define XXH_MIN(x, y) (((x) > (y)) ? (y) : (x)) + +XXH_PUBLIC_API void XXH3_generateSecret(void* secretBuffer, const void* customSeed, size_t customSeedSize) { + XXH_ASSERT(secretBuffer != NULL); + if (customSeedSize == 0) { + memcpy(secretBuffer, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE); + return; + } + XXH_ASSERT(customSeed != NULL); + + { + size_t const segmentSize = sizeof(XXH128_hash_t); + size_t const nbSegments = XXH_SECRET_DEFAULT_SIZE / segmentSize; + XXH128_canonical_t scrambler; + XXH64_hash_t seeds[12]; + size_t segnb; + XXH_ASSERT(nbSegments == 12); + XXH_ASSERT(segmentSize * nbSegments == XXH_SECRET_DEFAULT_SIZE); /* exact multiple */ + XXH128_canonicalFromHash(&scrambler, XXH128(customSeed, customSeedSize, 0)); + + /* + * Copy customSeed to seeds[], truncating or repeating as necessary. + */ + { + size_t toFill = XXH_MIN(customSeedSize, sizeof(seeds)); + size_t filled = toFill; + memcpy(seeds, customSeed, toFill); + while (filled < sizeof(seeds)) { + toFill = XXH_MIN(filled, sizeof(seeds) - filled); + memcpy((char*)seeds + filled, seeds, toFill); + filled += toFill; + } + } + + /* generate secret */ + memcpy(secretBuffer, &scrambler, sizeof(scrambler)); + for (segnb = 1; segnb < nbSegments; segnb++) { + size_t const segmentStart = segnb * segmentSize; + XXH128_canonical_t segment; + XXH128_canonicalFromHash(&segment, + XXH128(&scrambler, sizeof(scrambler), XXH_readLE64(seeds + segnb) + segnb)); + memcpy((char*)secretBuffer + segmentStart, &segment, sizeof(segment)); + } + } +} + +/* ========================================== + * XXH3 128 bits (a.k.a XXH128) + * ========================================== + * XXH3's 128-bit variant has better mixing and strength than the 64-bit variant, + * even without counting the significantly larger output size. + * + * For example, extra steps are taken to avoid the seed-dependent collisions + * in 17-240 byte inputs (See XXH3_mix16B and XXH128_mix32B). + * + * This strength naturally comes at the cost of some speed, especially on short + * lengths. Note that longer hashes are about as fast as the 64-bit version + * due to it using only a slight modification of the 64-bit loop. + * + * XXH128 is also more oriented towards 64-bit machines. It is still extremely + * fast for a _128-bit_ hash on 32-bit (it usually clears XXH64). + */ + +XXH_FORCE_INLINE XXH128_hash_t XXH3_len_1to3_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, + XXH64_hash_t seed) { + /* A doubled version of 1to3_64b with different constants. */ + XXH_ASSERT(input != NULL); + XXH_ASSERT(1 <= len && len <= 3); + XXH_ASSERT(secret != NULL); + /* + * len = 1: combinedl = { input[0], 0x01, input[0], input[0] } + * len = 2: combinedl = { input[1], 0x02, input[0], input[1] } + * len = 3: combinedl = { input[2], 0x03, input[0], input[1] } + */ + { + xxh_u8 const c1 = input[0]; + xxh_u8 const c2 = input[len >> 1]; + xxh_u8 const c3 = input[len - 1]; + xxh_u32 const combinedl = ((xxh_u32)c1 << 16) | ((xxh_u32)c2 << 24) | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8); + xxh_u32 const combinedh = XXH_rotl32(XXH_swap32(combinedl), 13); + xxh_u64 const bitflipl = (XXH_readLE32(secret) ^ XXH_readLE32(secret + 4)) + seed; + xxh_u64 const bitfliph = (XXH_readLE32(secret + 8) ^ XXH_readLE32(secret + 12)) - seed; + xxh_u64 const keyed_lo = (xxh_u64)combinedl ^ bitflipl; + xxh_u64 const keyed_hi = (xxh_u64)combinedh ^ bitfliph; + XXH128_hash_t h128; + h128.low64 = XXH64_avalanche(keyed_lo); + h128.high64 = XXH64_avalanche(keyed_hi); + return h128; + } +} + +XXH_FORCE_INLINE XXH128_hash_t XXH3_len_4to8_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, + XXH64_hash_t seed) { + XXH_ASSERT(input != NULL); + XXH_ASSERT(secret != NULL); + XXH_ASSERT(4 <= len && len <= 8); + seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32; + { + xxh_u32 const input_lo = XXH_readLE32(input); + xxh_u32 const input_hi = XXH_readLE32(input + len - 4); + xxh_u64 const input_64 = input_lo + ((xxh_u64)input_hi << 32); + xxh_u64 const bitflip = (XXH_readLE64(secret + 16) ^ XXH_readLE64(secret + 24)) + seed; + xxh_u64 const keyed = input_64 ^ bitflip; + + /* Shift len to the left to ensure it is even, this avoids even multiplies. */ + XXH128_hash_t m128 = XXH_mult64to128(keyed, XXH_PRIME64_1 + (len << 2)); + + m128.high64 += (m128.low64 << 1); + m128.low64 ^= (m128.high64 >> 3); + + m128.low64 = XXH_xorshift64(m128.low64, 35); + m128.low64 *= 0x9FB21C651E98DF25ULL; + m128.low64 = XXH_xorshift64(m128.low64, 28); + m128.high64 = XXH3_avalanche(m128.high64); + return m128; + } +} + +XXH_FORCE_INLINE XXH128_hash_t XXH3_len_9to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, + XXH64_hash_t seed) { + XXH_ASSERT(input != NULL); + XXH_ASSERT(secret != NULL); + XXH_ASSERT(9 <= len && len <= 16); + { + xxh_u64 const bitflipl = (XXH_readLE64(secret + 32) ^ XXH_readLE64(secret + 40)) - seed; + xxh_u64 const bitfliph = (XXH_readLE64(secret + 48) ^ XXH_readLE64(secret + 56)) + seed; + xxh_u64 const input_lo = XXH_readLE64(input); + xxh_u64 input_hi = XXH_readLE64(input + len - 8); + XXH128_hash_t m128 = XXH_mult64to128(input_lo ^ input_hi ^ bitflipl, XXH_PRIME64_1); + /* + * Put len in the middle of m128 to ensure that the length gets mixed to + * both the low and high bits in the 128x64 multiply below. + */ + m128.low64 += (xxh_u64)(len - 1) << 54; + input_hi ^= bitfliph; + /* + * Add the high 32 bits of input_hi to the high 32 bits of m128, then + * add the long product of the low 32 bits of input_hi and XXH_PRIME32_2 to + * the high 64 bits of m128. + * + * The best approach to this operation is different on 32-bit and 64-bit. + */ + if (sizeof(void*) < sizeof(xxh_u64)) { /* 32-bit */ + /* + * 32-bit optimized version, which is more readable. + * + * On 32-bit, it removes an ADC and delays a dependency between the two + * halves of m128.high64, but it generates an extra mask on 64-bit. + */ + m128.high64 += (input_hi & 0xFFFFFFFF00000000ULL) + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2); + } else { + /* + * 64-bit optimized (albeit more confusing) version. + * + * Uses some properties of addition and multiplication to remove the mask: + * + * Let: + * a = input_hi.lo = (input_hi & 0x00000000FFFFFFFF) + * b = input_hi.hi = (input_hi & 0xFFFFFFFF00000000) + * c = XXH_PRIME32_2 + * + * a + (b * c) + * Inverse Property: x + y - x == y + * a + (b * (1 + c - 1)) + * Distributive Property: x * (y + z) == (x * y) + (x * z) + * a + (b * 1) + (b * (c - 1)) + * Identity Property: x * 1 == x + * a + b + (b * (c - 1)) + * + * Substitute a, b, and c: + * input_hi.hi + input_hi.lo + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1)) + * + * Since input_hi.hi + input_hi.lo == input_hi, we get this: + * input_hi + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1)) + */ + m128.high64 += input_hi + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2 - 1); + } + /* m128 ^= XXH_swap64(m128 >> 64); */ + m128.low64 ^= XXH_swap64(m128.high64); + + { /* 128x64 multiply: h128 = m128 * XXH_PRIME64_2; */ + XXH128_hash_t h128 = XXH_mult64to128(m128.low64, XXH_PRIME64_2); + h128.high64 += m128.high64 * XXH_PRIME64_2; + + h128.low64 = XXH3_avalanche(h128.low64); + h128.high64 = XXH3_avalanche(h128.high64); + return h128; + } + } +} + +/* + * Assumption: `secret` size is >= XXH3_SECRET_SIZE_MIN + */ +XXH_FORCE_INLINE XXH128_hash_t XXH3_len_0to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, + XXH64_hash_t seed) { + XXH_ASSERT(len <= 16); + { + if (len > 8) return XXH3_len_9to16_128b(input, len, secret, seed); + if (len >= 4) return XXH3_len_4to8_128b(input, len, secret, seed); + if (len) return XXH3_len_1to3_128b(input, len, secret, seed); + { + XXH128_hash_t h128; + xxh_u64 const bitflipl = XXH_readLE64(secret + 64) ^ XXH_readLE64(secret + 72); + xxh_u64 const bitfliph = XXH_readLE64(secret + 80) ^ XXH_readLE64(secret + 88); + h128.low64 = XXH64_avalanche(seed ^ bitflipl); + h128.high64 = XXH64_avalanche(seed ^ bitfliph); + return h128; + } + } +} + +/* + * A bit slower than XXH3_mix16B, but handles multiply by zero better. + */ +XXH_FORCE_INLINE XXH128_hash_t XXH128_mix32B(XXH128_hash_t acc, const xxh_u8* input_1, const xxh_u8* input_2, + const xxh_u8* secret, XXH64_hash_t seed) { + acc.low64 += XXH3_mix16B(input_1, secret + 0, seed); + acc.low64 ^= XXH_readLE64(input_2) + XXH_readLE64(input_2 + 8); + acc.high64 += XXH3_mix16B(input_2, secret + 16, seed); + acc.high64 ^= XXH_readLE64(input_1) + XXH_readLE64(input_1 + 8); + return acc; +} + +XXH_FORCE_INLINE XXH128_hash_t XXH3_len_17to128_128b(const xxh_u8* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, size_t secretSize, + XXH64_hash_t seed) { + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + (void)secretSize; + XXH_ASSERT(16 < len && len <= 128); + + { + XXH128_hash_t acc; + acc.low64 = len * XXH_PRIME64_1; + acc.high64 = 0; + if (len > 32) { + if (len > 64) { + if (len > 96) { + acc = XXH128_mix32B(acc, input + 48, input + len - 64, secret + 96, seed); + } + acc = XXH128_mix32B(acc, input + 32, input + len - 48, secret + 64, seed); + } + acc = XXH128_mix32B(acc, input + 16, input + len - 32, secret + 32, seed); + } + acc = XXH128_mix32B(acc, input, input + len - 16, secret, seed); + { + XXH128_hash_t h128; + h128.low64 = acc.low64 + acc.high64; + h128.high64 = (acc.low64 * XXH_PRIME64_1) + (acc.high64 * XXH_PRIME64_4) + ((len - seed) * XXH_PRIME64_2); + h128.low64 = XXH3_avalanche(h128.low64); + h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64); + return h128; + } + } +} + +XXH_NO_INLINE XXH128_hash_t XXH3_len_129to240_128b(const xxh_u8* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, size_t secretSize, + XXH64_hash_t seed) { + XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); + (void)secretSize; + XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX); + + { + XXH128_hash_t acc; + int const nbRounds = (int)len / 32; + int i; + acc.low64 = len * XXH_PRIME64_1; + acc.high64 = 0; + for (i = 0; i < 4; i++) { + acc = XXH128_mix32B(acc, input + (32 * i), input + (32 * i) + 16, secret + (32 * i), seed); + } + acc.low64 = XXH3_avalanche(acc.low64); + acc.high64 = XXH3_avalanche(acc.high64); + XXH_ASSERT(nbRounds >= 4); + for (i = 4; i < nbRounds; i++) { + acc = XXH128_mix32B(acc, input + (32 * i), input + (32 * i) + 16, + secret + XXH3_MIDSIZE_STARTOFFSET + (32 * (i - 4)), seed); + } + /* last bytes */ + acc = XXH128_mix32B(acc, input + len - 16, input + len - 32, + secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET - 16, 0ULL - seed); + + { + XXH128_hash_t h128; + h128.low64 = acc.low64 + acc.high64; + h128.high64 = (acc.low64 * XXH_PRIME64_1) + (acc.high64 * XXH_PRIME64_4) + ((len - seed) * XXH_PRIME64_2); + h128.low64 = XXH3_avalanche(h128.low64); + h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64); + return h128; + } + } +} + +XXH_FORCE_INLINE XXH128_hash_t XXH3_hashLong_128b_internal(const void* XXH_RESTRICT input, size_t len, + const xxh_u8* XXH_RESTRICT secret, size_t secretSize, + XXH3_f_accumulate_512 f_acc512, + XXH3_f_scrambleAcc f_scramble) { + XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC; + + XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, secret, secretSize, f_acc512, f_scramble); + + /* converge into final hash */ + XXH_STATIC_ASSERT(sizeof(acc) == 64); + XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); + { + XXH128_hash_t h128; + h128.low64 = XXH3_mergeAccs(acc, secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)len * XXH_PRIME64_1); + h128.high64 = XXH3_mergeAccs(acc, secret + secretSize - sizeof(acc) - XXH_SECRET_MERGEACCS_START, + ~((xxh_u64)len * XXH_PRIME64_2)); + return h128; + } +} + +/* + * It's important for performance that XXH3_hashLong is not inlined. + */ +XXH_NO_INLINE XXH128_hash_t XXH3_hashLong_128b_default(const void* XXH_RESTRICT input, size_t len, XXH64_hash_t seed64, + const void* XXH_RESTRICT secret, size_t secretLen) { + (void)seed64; + (void)secret; + (void)secretLen; + return XXH3_hashLong_128b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_accumulate_512, + XXH3_scrambleAcc); +} + +/* + * It's important for performance that XXH3_hashLong is not inlined. + */ +XXH_NO_INLINE XXH128_hash_t XXH3_hashLong_128b_withSecret(const void* XXH_RESTRICT input, size_t len, + XXH64_hash_t seed64, const void* XXH_RESTRICT secret, + size_t secretLen) { + (void)seed64; + return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, secretLen, XXH3_accumulate_512, + XXH3_scrambleAcc); +} + +XXH_FORCE_INLINE XXH128_hash_t XXH3_hashLong_128b_withSeed_internal(const void* XXH_RESTRICT input, size_t len, + XXH64_hash_t seed64, XXH3_f_accumulate_512 f_acc512, + XXH3_f_scrambleAcc f_scramble, + XXH3_f_initCustomSecret f_initSec) { + if (seed64 == 0) + return XXH3_hashLong_128b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), f_acc512, f_scramble); + { + XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE]; + f_initSec(secret, seed64); + return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, sizeof(secret), f_acc512, f_scramble); + } +} + +/* + * It's important for performance that XXH3_hashLong is not inlined. + */ +XXH_NO_INLINE XXH128_hash_t XXH3_hashLong_128b_withSeed(const void* input, size_t len, XXH64_hash_t seed64, + const void* XXH_RESTRICT secret, size_t secretLen) { + (void)secret; + (void)secretLen; + return XXH3_hashLong_128b_withSeed_internal(input, len, seed64, XXH3_accumulate_512, XXH3_scrambleAcc, + XXH3_initCustomSecret); +} + +typedef XXH128_hash_t (*XXH3_hashLong128_f)(const void* XXH_RESTRICT, size_t, XXH64_hash_t, const void* XXH_RESTRICT, + size_t); + +XXH_FORCE_INLINE XXH128_hash_t XXH3_128bits_internal(const void* input, size_t len, XXH64_hash_t seed64, + const void* XXH_RESTRICT secret, size_t secretLen, + XXH3_hashLong128_f f_hl128) { + XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN); + /* + * If an action is to be taken if `secret` conditions are not respected, + * it should be done here. + * For now, it's a contract pre-condition. + * Adding a check and a branch here would cost performance at every hash. + */ + if (len <= 16) return XXH3_len_0to16_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64); + if (len <= 128) return XXH3_len_17to128_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); + if (len <= XXH3_MIDSIZE_MAX) + return XXH3_len_129to240_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); + return f_hl128(input, len, seed64, secret, secretLen); +} + +/* === Public XXH128 API === */ + +XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* input, size_t len) { + return XXH3_128bits_internal(input, len, 0, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_128b_default); +} + +XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSecret(const void* input, size_t len, const void* secret, + size_t secretSize) { + return XXH3_128bits_internal(input, len, 0, (const xxh_u8*)secret, secretSize, XXH3_hashLong_128b_withSecret); +} + +XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSeed(const void* input, size_t len, XXH64_hash_t seed) { + return XXH3_128bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_128b_withSeed); +} + +XXH_PUBLIC_API XXH128_hash_t XXH128(const void* input, size_t len, XXH64_hash_t seed) { + return XXH3_128bits_withSeed(input, len, seed); +} + +/* === XXH3 128-bit streaming === */ + +/* + * All the functions are actually the same as for 64-bit streaming variant. + * The only difference is the finalizatiom routine. + */ + +static void XXH3_128bits_reset_internal(XXH3_state_t* statePtr, XXH64_hash_t seed, const void* secret, + size_t secretSize) { + XXH3_64bits_reset_internal(statePtr, seed, secret, secretSize); +} + +XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset(XXH3_state_t* statePtr) { + if (statePtr == NULL) return XXH_ERROR; + XXH3_128bits_reset_internal(statePtr, 0, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE); + return XXH_OK; +} + +XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, + size_t secretSize) { + if (statePtr == NULL) return XXH_ERROR; + XXH3_128bits_reset_internal(statePtr, 0, secret, secretSize); + if (secret == NULL) return XXH_ERROR; + if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR; + return XXH_OK; +} + +XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed) { + if (statePtr == NULL) return XXH_ERROR; + if (seed == 0) return XXH3_128bits_reset(statePtr); + if (seed != statePtr->seed) XXH3_initCustomSecret(statePtr->customSecret, seed); + XXH3_128bits_reset_internal(statePtr, seed, NULL, XXH_SECRET_DEFAULT_SIZE); + return XXH_OK; +} + +XXH_PUBLIC_API XXH_errorcode XXH3_128bits_update(XXH3_state_t* state, const void* input, size_t len) { + return XXH3_update(state, (const xxh_u8*)input, len, XXH3_accumulate_512, XXH3_scrambleAcc); +} + +XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest(const XXH3_state_t* state) { + const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret; + if (state->totalLen > XXH3_MIDSIZE_MAX) { + XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB]; + XXH3_digest_long(acc, state, secret); + XXH_ASSERT(state->secretLimit + XXH_STRIPE_LEN >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); + { + XXH128_hash_t h128; + h128.low64 = + XXH3_mergeAccs(acc, secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)state->totalLen * XXH_PRIME64_1); + h128.high64 = XXH3_mergeAccs( + acc, secret + state->secretLimit + XXH_STRIPE_LEN - sizeof(acc) - XXH_SECRET_MERGEACCS_START, + ~((xxh_u64)state->totalLen * XXH_PRIME64_2)); + return h128; + } + } + /* len <= XXH3_MIDSIZE_MAX : short code */ + if (state->seed) return XXH3_128bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed); + return XXH3_128bits_withSecret(state->buffer, (size_t)(state->totalLen), secret, + state->secretLimit + XXH_STRIPE_LEN); +} + +/* 128-bit utility functions */ + +#include /* memcmp, memcpy */ + +/* return : 1 is equal, 0 if different */ +XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2) { + /* note : XXH128_hash_t is compact, it has no padding byte */ + return !(memcmp(&h1, &h2, sizeof(h1))); +} + +/* This prototype is compatible with stdlib's qsort(). + * return : >0 if *h128_1 > *h128_2 + * <0 if *h128_1 < *h128_2 + * =0 if *h128_1 == *h128_2 */ +XXH_PUBLIC_API int XXH128_cmp(const void* h128_1, const void* h128_2) { + XXH128_hash_t const h1 = *(const XXH128_hash_t*)h128_1; + XXH128_hash_t const h2 = *(const XXH128_hash_t*)h128_2; + int const hcmp = (h1.high64 > h2.high64) - (h2.high64 > h1.high64); + /* note : bets that, in most cases, hash values are different */ + if (hcmp) return hcmp; + return (h1.low64 > h2.low64) - (h2.low64 > h1.low64); +} + +/*====== Canonical representation ======*/ +XXH_PUBLIC_API void XXH128_canonicalFromHash(XXH128_canonical_t* dst, XXH128_hash_t hash) { + XXH_STATIC_ASSERT(sizeof(XXH128_canonical_t) == sizeof(XXH128_hash_t)); + if (XXH_CPU_LITTLE_ENDIAN) { + hash.high64 = XXH_swap64(hash.high64); + hash.low64 = XXH_swap64(hash.low64); + } + memcpy(dst, &hash.high64, sizeof(hash.high64)); + memcpy((char*)dst + sizeof(hash.high64), &hash.low64, sizeof(hash.low64)); +} + +XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t* src) { + XXH128_hash_t h; + h.high64 = XXH_readBE64(src); + h.low64 = XXH_readBE64(src->digest + 8); + return h; +} + +/* Pop our optimization override from above */ +#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \ + && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \ + && defined(__OPTIMIZE__) && !defined(__OPTIMIZE_SIZE__) /* respect -O0 and -Os */ +#pragma GCC pop_options +#endif + +#endif /* XXH_NO_LONG_LONG */ + +#endif /* XXH_IMPLEMENTATION */ + +#if defined(__cplusplus) +} +#endif From 882b77eae07c8fed03b68aabb5281989d9d75be2 Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Tue, 24 Nov 2020 00:08:35 -0800 Subject: [PATCH 104/317] Change earliest downgrade version to 6.3.10 Because FDB7 will write xxhash3 checksums for sqlite pages, and these are not read by 6.3 until patch 6.3.10, the downgrade tests should only attempt to versions >=6.3.10 --- tests/CMakeLists.txt | 4 ++-- .../restarting/{to_6.3.5 => to_6.3.10}/CycleTestRestart-1.txt | 0 .../restarting/{to_6.3.5 => to_6.3.10}/CycleTestRestart-2.txt | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename tests/restarting/{to_6.3.5 => to_6.3.10}/CycleTestRestart-1.txt (100%) rename tests/restarting/{to_6.3.5 => to_6.3.10}/CycleTestRestart-2.txt (100%) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b9ee4db772..def5d7de0d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -191,8 +191,8 @@ if(WITH_PYTHON) TEST_FILES restarting/from_5.2.0/ClientTransactionProfilingCorrectness-1.txt restarting/from_5.2.0/ClientTransactionProfilingCorrectness-2.txt) add_fdb_test( - TEST_FILES restarting/to_6.3.5/CycleTestRestart-1.txt - restarting/to_6.3.5/CycleTestRestart-2.txt) + TEST_FILES restarting/to_6.3.10/CycleTestRestart-1.txt + restarting/to_6.3.10/CycleTestRestart-2.txt) add_fdb_test(TEST_FILES slow/ApiCorrectness.txt) add_fdb_test(TEST_FILES slow/ApiCorrectnessAtomicRestore.txt) add_fdb_test(TEST_FILES slow/ApiCorrectnessSwitchover.txt) diff --git a/tests/restarting/to_6.3.5/CycleTestRestart-1.txt b/tests/restarting/to_6.3.10/CycleTestRestart-1.txt similarity index 100% rename from tests/restarting/to_6.3.5/CycleTestRestart-1.txt rename to tests/restarting/to_6.3.10/CycleTestRestart-1.txt diff --git a/tests/restarting/to_6.3.5/CycleTestRestart-2.txt b/tests/restarting/to_6.3.10/CycleTestRestart-2.txt similarity index 100% rename from tests/restarting/to_6.3.5/CycleTestRestart-2.txt rename to tests/restarting/to_6.3.10/CycleTestRestart-2.txt From dc2bac567044f7053c5319e1f3e6425382593687 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Tue, 24 Nov 2020 17:41:36 +0000 Subject: [PATCH 105/317] Resolve conflicts --- CMakeLists.txt | 4 - documentation/sphinx/source/downloads.rst | 36 --------- fdbclient/FDBTypes.h | 4 - fdbserver/DataDistribution.actor.cpp | 15 +--- fdbserver/DataDistribution.actor.h | 33 +------- fdbserver/DataDistributionQueue.actor.cpp | 48 ++--------- fdbserver/DataDistributionTracker.actor.cpp | 37 ++------- fdbserver/Knobs.cpp | 3 - fdbserver/Knobs.h | 3 - fdbserver/LogRouter.actor.cpp | 9 +-- fdbserver/MasterProxyServer.actor.cpp | 89 +++++---------------- fdbserver/TLogServer.actor.cpp | 6 -- fdbserver/TagPartitionedLogSystem.actor.cpp | 42 +--------- fdbserver/fdbserver.actor.cpp | 15 +--- fdbserver/storageserver.actor.cpp | 41 ++-------- flow/Trace.cpp | 4 - flow/error_definitions.h | 5 +- packaging/msi/FDBInstaller.wxs | 4 - versions.target | 4 +- 19 files changed, 52 insertions(+), 350 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 365478ed10..844d302637 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,11 +18,7 @@ # limitations under the License. cmake_minimum_required(VERSION 3.13) project(foundationdb -<<<<<<< HEAD VERSION 6.3.10 -======= - VERSION 6.2.29 ->>>>>>> anoyes/merge-6.2-to-6.3 DESCRIPTION "FoundationDB is a scalable, fault-tolerant, ordered key-value store with full ACID transactions." HOMEPAGE_URL "http://www.foundationdb.org/" LANGUAGES C CXX ASM) diff --git a/documentation/sphinx/source/downloads.rst b/documentation/sphinx/source/downloads.rst index 8847baca44..825eefab40 100644 --- a/documentation/sphinx/source/downloads.rst +++ b/documentation/sphinx/source/downloads.rst @@ -10,61 +10,38 @@ macOS The macOS installation package is supported on macOS 10.7+. It includes the client and (optionally) the server. -<<<<<<< HEAD * `FoundationDB-6.3.9.pkg `_ -======= -* `FoundationDB-6.2.28.pkg `_ ->>>>>>> anoyes/merge-6.2-to-6.3 Ubuntu ------ The Ubuntu packages are supported on 64-bit Ubuntu 12.04+, but beware of the Linux kernel bug in Ubuntu 12.x. -<<<<<<< HEAD * `foundationdb-clients-6.3.9-1_amd64.deb `_ * `foundationdb-server-6.3.9-1_amd64.deb `_ (depends on the clients package) -======= -* `foundationdb-clients-6.2.28-1_amd64.deb `_ -* `foundationdb-server-6.2.28-1_amd64.deb `_ (depends on the clients package) ->>>>>>> anoyes/merge-6.2-to-6.3 RHEL/CentOS EL6 --------------- The RHEL/CentOS EL6 packages are supported on 64-bit RHEL/CentOS 6.x. -<<<<<<< HEAD * `foundationdb-clients-6.3.9-1.el6.x86_64.rpm `_ * `foundationdb-server-6.3.9-1.el6.x86_64.rpm `_ (depends on the clients package) -======= -* `foundationdb-clients-6.2.28-1.el6.x86_64.rpm `_ -* `foundationdb-server-6.2.28-1.el6.x86_64.rpm `_ (depends on the clients package) ->>>>>>> anoyes/merge-6.2-to-6.3 RHEL/CentOS EL7 --------------- The RHEL/CentOS EL7 packages are supported on 64-bit RHEL/CentOS 7.x. -<<<<<<< HEAD * `foundationdb-clients-6.3.9-1.el7.x86_64.rpm `_ * `foundationdb-server-6.3.9-1.el7.x86_64.rpm `_ (depends on the clients package) -======= -* `foundationdb-clients-6.2.28-1.el7.x86_64.rpm `_ -* `foundationdb-server-6.2.28-1.el7.x86_64.rpm `_ (depends on the clients package) ->>>>>>> anoyes/merge-6.2-to-6.3 Windows ------- The Windows installer is supported on 64-bit Windows XP and later. It includes the client and (optionally) the server. -<<<<<<< HEAD * `foundationdb-6.3.9-x64.msi `_ -======= -* `foundationdb-6.2.28-x64.msi `_ ->>>>>>> anoyes/merge-6.2-to-6.3 API Language Bindings ===================== @@ -81,31 +58,18 @@ On macOS and Windows, the FoundationDB Python API bindings are installed as part If you need to use the FoundationDB Python API from other Python installations or paths, use the Python package manager ``pip`` (``pip install foundationdb``) or download the Python package: -<<<<<<< HEAD * `foundationdb-6.3.9.tar.gz `_ -======= -* `foundationdb-6.2.28.tar.gz `_ ->>>>>>> anoyes/merge-6.2-to-6.3 Ruby 1.9.3/2.0.0+ ----------------- -<<<<<<< HEAD * `fdb-6.3.9.gem `_ -======= -* `fdb-6.2.28.gem `_ ->>>>>>> anoyes/merge-6.2-to-6.3 Java 8+ ------- -<<<<<<< HEAD * `fdb-java-6.3.9.jar `_ * `fdb-java-6.3.9-javadoc.jar `_ -======= -* `fdb-java-6.2.28.jar `_ -* `fdb-java-6.2.28-javadoc.jar `_ ->>>>>>> anoyes/merge-6.2-to-6.3 Go 1.11+ -------- diff --git a/fdbclient/FDBTypes.h b/fdbclient/FDBTypes.h index 2c9ad4e791..6ae199f8be 100644 --- a/fdbclient/FDBTypes.h +++ b/fdbclient/FDBTypes.h @@ -42,11 +42,7 @@ enum { tagLocalityRemoteLog = -3, // tag created by log router for remote tLogs tagLocalityUpgraded = -4, tagLocalitySatellite = -5, -<<<<<<< HEAD - tagLocalityLogRouterMapped = -6, // used by log router to pop from TLogs -======= tagLocalityLogRouterMapped = -6, // The pseudo tag used by log routers to pop the real LogRouter tag (i.e., -2) ->>>>>>> anoyes/merge-6.2-to-6.3 tagLocalityTxs = -7, tagLocalityBackup = -8, // used by backup role to pop from TLogs tagLocalityInvalid = -99 diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index 956c0afa32..8f65d6dc78 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -4777,12 +4777,9 @@ ACTOR Future dataDistribution(Reference self, Promise state DatabaseConfiguration configuration; state Reference initData; state MoveKeysLock lock; -<<<<<<< HEAD state Reference primaryTeamCollection; state Reference remoteTeamCollection; -======= state bool trackerCancelled; ->>>>>>> anoyes/merge-6.2-to-6.3 loop { trackerCancelled = false; try { @@ -4947,21 +4944,14 @@ ACTOR Future dataDistribution(Reference self, Promise actors.push_back( pollMoveKeysLock(cx, lock) ); actors.push_back(reportErrorsExcept( dataDistributionTracker(initData, cx, output, shardsAffectedByTeamFailure, getShardMetrics, -<<<<<<< HEAD getShardMetricsList, getAverageShardBytes.getFuture(), readyToStart, - anyZeroHealthyTeams, self->ddId, &shards), + anyZeroHealthyTeams, self->ddId, &shards, &trackerCancelled), "DDTracker", self->ddId, &normalDDQueueErrors())); actors.push_back(reportErrorsExcept( dataDistributionQueue(cx, output, input.getFuture(), getShardMetrics, processingUnhealthy, tcis, shardsAffectedByTeamFailure, lock, getAverageShardBytes, self->ddId, storageTeamSize, configuration.storageTeamSize, &lastLimited), "DDQueue", self->ddId, &normalDDQueueErrors())); -======= - getAverageShardBytes.getFuture(), readyToStart, anyZeroHealthyTeams, self->ddId, - &shards, &trackerCancelled), - "DDTracker", self->ddId, &normalDDQueueErrors())); - actors.push_back( reportErrorsExcept( dataDistributionQueue( cx, output, input.getFuture(), getShardMetrics, processingUnhealthy, tcis, shardsAffectedByTeamFailure, lock, getAverageShardBytes, self->ddId, storageTeamSize, configuration.storageTeamSize, &lastLimited ), "DDQueue", self->ddId, &normalDDQueueErrors() ) ); ->>>>>>> anoyes/merge-6.2-to-6.3 vector teamCollectionsPtrs; primaryTeamCollection = Reference(new DDTeamCollection( @@ -4990,14 +4980,11 @@ ACTOR Future dataDistribution(Reference self, Promise } catch( Error &e ) { state Error err = e; -<<<<<<< HEAD TraceEvent("DataDistributorDestroyTeamCollections").error(e); self->teamCollection = nullptr; primaryTeamCollection = Reference(); remoteTeamCollection = Reference(); -======= trackerCancelled = true; ->>>>>>> anoyes/merge-6.2-to-6.3 wait(shards.clearAsync()); if (err.code() != error_code_movekeys_conflict) throw err; bool ddEnabled = wait( isDataDistributionEnabled(cx) ); diff --git a/fdbserver/DataDistribution.actor.h b/fdbserver/DataDistribution.actor.h index 6df672e966..22d95bcd9a 100644 --- a/fdbserver/DataDistribution.actor.h +++ b/fdbserver/DataDistribution.actor.h @@ -229,41 +229,13 @@ struct ShardTrackedData { Reference>> stats; }; -<<<<<<< HEAD -Future dataDistributionTracker( - Reference const& initData, - Database const& cx, - PromiseStream const& output, - Reference const& shardsAffectedByTeamFailure, - PromiseStream const& getShardMetrics, - PromiseStream const& getShardMetricsList, - FutureStream> const& getAverageShardBytes, - Promise const& readyToStart, - Reference> const& zeroHealthyTeams, - UID const& distributorId, - KeyRangeMap* const& shards); - -Future dataDistributionQueue( - Database const& cx, - PromiseStream const& output, - FutureStream const& input, - PromiseStream const& getShardMetrics, - Reference> const& processingUnhealthy, - vector const& teamCollection, - Reference const& shardsAffectedByTeamFailure, - MoveKeysLock const& lock, - PromiseStream> const& getAverageShardBytes, - UID const& distributorId, - int const& teamSize, - int const& singleRegionTeamSize, - double* const& lastLimited); -======= ACTOR Future dataDistributionTracker(Reference initData, Database cx, PromiseStream output, Reference shardsAffectedByTeamFailure, PromiseStream getShardMetrics, + PromiseStream getShardMetricsList, FutureStream> getAverageShardBytes, - Promise readyToStart, Reference> zeroHealthyTeams, + Promise readyToStart, Reference> anyZeroHealthyTeams, UID distributorId, KeyRangeMap* shards, bool const* trackerCancelled); @@ -273,7 +245,6 @@ ACTOR Future dataDistributionQueue( vector teamCollection, Reference shardsAffectedByTeamFailure, MoveKeysLock lock, PromiseStream> getAverageShardBytes, UID distributorId, int teamSize, int singleRegionTeamSize, double* lastLimited); ->>>>>>> anoyes/merge-6.2-to-6.3 //Holds the permitted size and IO Bounds for a shard struct ShardSizeBounds { diff --git a/fdbserver/DataDistributionQueue.actor.cpp b/fdbserver/DataDistributionQueue.actor.cpp index 5e39892731..eb45756e02 100644 --- a/fdbserver/DataDistributionQueue.actor.cpp +++ b/fdbserver/DataDistributionQueue.actor.cpp @@ -83,14 +83,8 @@ struct RelocateData { }; class ParallelTCInfo : public ReferenceCounted, public IDataDistributionTeam { -<<<<<<< HEAD - vector> teams; - vector tempServerIDs; -======= -public: std::vector> teams; std::vector tempServerIDs; ->>>>>>> anoyes/merge-6.2-to-6.3 int64_t sum(std::function func) const { int64_t result = 0; @@ -100,21 +94,12 @@ public: return result; } -<<<<<<< HEAD template - vector collect(std::function(IDataDistributionTeam const&)> func) const { - vector result; - - for (const auto& team : teams) { - vector newItems = func(*team); -======= - template - std::vector collect(std::function(Reference)> func) { + std::vector collect(std::function(IDataDistributionTeam const&)> func) const { std::vector result; - for (auto it = teams.begin(); it != teams.end(); it++) { - std::vector newItems = func(*it); ->>>>>>> anoyes/merge-6.2-to-6.3 + for (const auto& team : teams) { + std::vector newItems = func(*team); result.insert(result.end(), newItems.begin(), newItems.end()); } return result; @@ -140,16 +125,9 @@ public: return !any([func](IDataDistributionTeam const& team) { return !func(team); }); } -<<<<<<< HEAD - vector getLastKnownServerInterfaces() const override { + std::vector getLastKnownServerInterfaces() const override { return collect( [](IDataDistributionTeam const& team) { return team.getLastKnownServerInterfaces(); }); -======= - virtual std::vector getLastKnownServerInterfaces() { - return collect([](Reference team) { - return team->getLastKnownServerInterfaces(); - }); ->>>>>>> anoyes/merge-6.2-to-6.3 } int size() const override { @@ -160,18 +138,11 @@ public: return totalSize; } -<<<<<<< HEAD - vector const& getServerIDs() const override { + std::vector const& getServerIDs() const override { static vector tempServerIDs; tempServerIDs.clear(); for (const auto& team : teams) { - vector const &childIDs = team->getServerIDs(); -======= - virtual std::vector const& getServerIDs() { - tempServerIDs.clear(); - for (auto it = teams.begin(); it != teams.end(); it++) { - std::vector const& childIDs = (*it)->getServerIDs(); ->>>>>>> anoyes/merge-6.2-to-6.3 + std::vector const& childIDs = team->getServerIDs(); tempServerIDs.insert(tempServerIDs.end(), childIDs.begin(), childIDs.end()); } return tempServerIDs; @@ -581,13 +552,8 @@ struct DDQueueData { if(keyServersEntries.size() < SERVER_KNOBS->DD_QUEUE_MAX_KEY_SERVERS) { for( int shard = 0; shard < keyServersEntries.size(); shard++ ) { -<<<<<<< HEAD - vector src, dest; - decodeKeyServersValue( UIDtoTagMap, keyServersEntries[shard].value, src, dest ); -======= std::vector src, dest; - decodeKeyServersValue( keyServersEntries[shard].value, src, dest ); ->>>>>>> anoyes/merge-6.2-to-6.3 + decodeKeyServersValue(UIDtoTagMap, keyServersEntries[shard].value, src, dest); ASSERT( src.size() ); for( int i = 0; i < src.size(); i++ ) { servers.insert( src[i] ); diff --git a/fdbserver/DataDistributionTracker.actor.cpp b/fdbserver/DataDistributionTracker.actor.cpp index f8c14b39f0..03fa937b64 100644 --- a/fdbserver/DataDistributionTracker.actor.cpp +++ b/fdbserver/DataDistributionTracker.actor.cpp @@ -88,10 +88,9 @@ struct DataDistributionTracker { Promise readyToStart; Reference> anyZeroHealthyTeams; -<<<<<<< HEAD // Read hot detection PromiseStream readHotShard; -======= + // The reference to trackerCancelled must be extracted by actors, // because by the time (trackerCancelled == true) this memory cannot // be accessed @@ -119,7 +118,6 @@ struct DataDistributionTracker { return &tracker; } }; ->>>>>>> anoyes/merge-6.2-to-6.3 DataDistributionTracker(Database cx, UID distributorId, Promise const& readyToStart, PromiseStream const& output, @@ -181,21 +179,13 @@ int64_t getMaxShardSize( double dbSizeEstimate ) { (int64_t)SERVER_KNOBS->MAX_SHARD_BYTES); } -<<<<<<< HEAD -ACTOR Future trackShardMetrics(DataDistributionTracker* self, KeyRange keys, +ACTOR Future trackShardMetrics(DataDistributionTracker::SafeAccessor self, KeyRange keys, Reference>> shardMetrics) { state BandwidthStatus bandwidthStatus = shardMetrics->get().present() ? getBandwidthStatus( shardMetrics->get().get().metrics ) : BandwidthStatusNormal; state double lastLowBandwidthStartTime = shardMetrics->get().present() ? shardMetrics->get().get().lastLowBandwidthStartTime : now(); state int shardCount = shardMetrics->get().present() ? shardMetrics->get().get().shardCount : 1; state ReadBandwidthStatus readBandwidthStatus = shardMetrics->get().present() ? getReadBandwidthStatus(shardMetrics->get().get().metrics) : ReadBandwidthStatusNormal; -======= -ACTOR Future trackShardBytes(DataDistributionTracker::SafeAccessor self, KeyRange keys, - Reference>> shardSize) { - state BandwidthStatus bandwidthStatus = shardSize->get().present() ? getBandwidthStatus( shardSize->get().get().metrics ) : BandwidthStatusNormal; - state double lastLowBandwidthStartTime = shardSize->get().present() ? shardSize->get().get().lastLowBandwidthStartTime : now(); - state int shardCount = shardSize->get().present() ? shardSize->get().get().shardCount : 1; ->>>>>>> anoyes/merge-6.2-to-6.3 wait( delay( 0, TaskPriority::DataDistribution ) ); /*TraceEvent("TrackShardMetricsStarting") @@ -248,7 +238,7 @@ ACTOR Future trackShardBytes(DataDistributionTracker::SafeAccessor self, K // TraceEvent("RHDTriggerReadHotLoggingForShard") // .detail("ShardBegin", keys.begin.printable().c_str()) // .detail("ShardEnd", keys.end.printable().c_str()); - self->readHotShard.send(keys); + self()->readHotShard.send(keys); } else { ASSERT(false); } @@ -292,19 +282,12 @@ ACTOR Future trackShardBytes(DataDistributionTracker::SafeAccessor self, K .detail("OldShardSize", shardSize->get().present() ? shardSize->get().get().metrics.bytes : 0) .detail("TrackerID", trackerID);*/ -<<<<<<< HEAD if( shardMetrics->get().present() ) { - self->dbSizeEstimate->set( self->dbSizeEstimate->get() + metrics.first.get().bytes - shardMetrics->get().get().metrics.bytes ); - if(keys.begin >= systemKeys.begin) { - self->systemSizeEstimate += metrics.first.get().bytes - shardMetrics->get().get().metrics.bytes; -======= - if( shardSize->get().present() ) { self()->dbSizeEstimate->set(self()->dbSizeEstimate->get() + metrics.first.get().bytes - - shardSize->get().get().metrics.bytes); + shardMetrics->get().get().metrics.bytes); if(keys.begin >= systemKeys.begin) { self()->systemSizeEstimate += - metrics.first.get().bytes - shardSize->get().get().metrics.bytes; ->>>>>>> anoyes/merge-6.2-to-6.3 + metrics.first.get().bytes - shardMetrics->get().get().metrics.bytes; } } @@ -792,15 +775,9 @@ void restartShardTrackers(DataDistributionTracker* self, KeyRangeRef keys, Optio } ShardTrackedData data; -<<<<<<< HEAD data.stats = shardMetrics; - data.trackShard = shardTracker(self, ranges[i], shardMetrics); - data.trackBytes = trackShardMetrics(self, ranges[i], shardMetrics); -======= - data.stats = shardSize; - data.trackShard = shardTracker(DataDistributionTracker::SafeAccessor(self), ranges[i], shardSize); - data.trackBytes = trackShardBytes(DataDistributionTracker::SafeAccessor(self), ranges[i], shardSize); ->>>>>>> anoyes/merge-6.2-to-6.3 + data.trackShard = shardTracker(DataDistributionTracker::SafeAccessor(self), ranges[i], shardMetrics); + data.trackBytes = trackShardMetrics(DataDistributionTracker::SafeAccessor(self), ranges[i], shardMetrics); self->shards.insert( ranges[i], data ); } } diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index a7ea9b18c9..92adeb7387 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -575,16 +575,13 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi init( BEHIND_CHECK_COUNT, 2 ); init( BEHIND_CHECK_VERSIONS, 5 * VERSIONS_PER_SECOND ); init( WAIT_METRICS_WRONG_SHARD_CHANCE, isSimulated ? 1.0 : 0.1 ); -<<<<<<< HEAD init( MIN_TAG_PAGES_READ_RATE, 1.0e4 ); if( randomize && BUGGIFY ) MIN_TAG_PAGES_READ_RATE = 0; init( READ_TAG_MEASUREMENT_INTERVAL, 30.0 ); if( randomize && BUGGIFY ) READ_TAG_MEASUREMENT_INTERVAL = 1.0; init( OPERATION_COST_BYTE_FACTOR, 16384 ); if( randomize && BUGGIFY ) OPERATION_COST_BYTE_FACTOR = 4096; init( PREFIX_COMPRESS_KVS_MEM_SNAPSHOTS, true ); if( randomize && BUGGIFY ) PREFIX_COMPRESS_KVS_MEM_SNAPSHOTS = false; -======= init( REPORT_DD_METRICS, true ); init( DD_METRICS_REPORT_INTERVAL, 30.0 ); init( FETCH_KEYS_TOO_LONG_TIME_CRITERIA, 300.0 ); ->>>>>>> anoyes/merge-6.2-to-6.3 //Wait Failure init( MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS, 250 ); if( randomize && BUGGIFY ) MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS = 2; diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 396c9a7ba5..6c10e5a268 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -504,16 +504,13 @@ public: int BEHIND_CHECK_COUNT; int64_t BEHIND_CHECK_VERSIONS; double WAIT_METRICS_WRONG_SHARD_CHANCE; -<<<<<<< HEAD int64_t MIN_TAG_PAGES_READ_RATE; double READ_TAG_MEASUREMENT_INTERVAL; int64_t OPERATION_COST_BYTE_FACTOR; bool PREFIX_COMPRESS_KVS_MEM_SNAPSHOTS; -======= bool REPORT_DD_METRICS; double DD_METRICS_REPORT_INTERVAL; double FETCH_KEYS_TOO_LONG_TIME_CRITERIA; ->>>>>>> anoyes/merge-6.2-to-6.3 //Wait Failure int MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS; diff --git a/fdbserver/LogRouter.actor.cpp b/fdbserver/LogRouter.actor.cpp index 5537e4eede..ce50cd65a0 100644 --- a/fdbserver/LogRouter.actor.cpp +++ b/fdbserver/LogRouter.actor.cpp @@ -78,20 +78,13 @@ struct LogRouterData { const UID dbgid; Reference>> logSystem; Optional primaryPeekLocation; -<<<<<<< HEAD - NotifiedVersion version; - NotifiedVersion minPopped; - const Version startVersion; - Version minKnownCommittedVersion; -======= NotifiedVersion version; // The largest version at which the log router has peeked mutations // from satellite tLog or primary tLogs. NotifiedVersion minPopped; // The minimum version among all tags that has been popped by remote tLogs. - Version startVersion; + const Version startVersion; Version minKnownCommittedVersion; // The minimum durable version among all LRs. // A LR's durable version is the maximum version of mutations that have been // popped by remote tLog. ->>>>>>> anoyes/merge-6.2-to-6.3 Version poppedVersion; Deque>>> messageBlocks; Tag routerTag; diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 9aa55a1592..e8e81c1a4b 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -104,7 +104,6 @@ struct ProxyStats { Future logger; -<<<<<<< HEAD int recentRequests; Deque requestBuckets; double lastBucketBegin; @@ -145,36 +144,13 @@ struct ProxyStats { return r; } - explicit ProxyStats(UID id, Version* pVersion, NotifiedVersion* pCommittedVersion, int64_t *commitBatchesMemBytesCountPtr) - : cc("ProxyStats", id.toString()), recentRequests(0), lastBucketBegin(now()), - maxComputeNS(0), minComputeNS(1e12), - bucketInterval(FLOW_KNOBS->BASIC_LOAD_BALANCE_UPDATE_RATE/FLOW_KNOBS->BASIC_LOAD_BALANCE_BUCKETS), - txnRequestIn("TxnRequestIn", cc), txnRequestOut("TxnRequestOut", cc), - txnRequestErrors("TxnRequestErrors", cc), txnStartIn("TxnStartIn", cc), txnStartOut("TxnStartOut", cc), - txnStartBatch("TxnStartBatch", cc), txnSystemPriorityStartIn("TxnSystemPriorityStartIn", cc), - txnSystemPriorityStartOut("TxnSystemPriorityStartOut", cc), - txnBatchPriorityStartIn("TxnBatchPriorityStartIn", cc), - txnBatchPriorityStartOut("TxnBatchPriorityStartOut", cc), - txnDefaultPriorityStartIn("TxnDefaultPriorityStartIn", cc), - txnDefaultPriorityStartOut("TxnDefaultPriorityStartOut", cc), txnCommitIn("TxnCommitIn", cc), - txnCommitVersionAssigned("TxnCommitVersionAssigned", cc), txnCommitResolving("TxnCommitResolving", cc), - txnCommitResolved("TxnCommitResolved", cc), txnCommitOut("TxnCommitOut", cc), - txnCommitOutSuccess("TxnCommitOutSuccess", cc), txnCommitErrors("TxnCommitErrors", cc), - txnConflicts("TxnConflicts", cc), txnThrottled("TxnThrottled", cc), commitBatchIn("CommitBatchIn", cc), - commitBatchOut("CommitBatchOut", cc), mutationBytes("MutationBytes", cc), mutations("Mutations", cc), - conflictRanges("ConflictRanges", cc), keyServerLocationIn("KeyServerLocationIn", cc), - keyServerLocationOut("KeyServerLocationOut", cc), keyServerLocationErrors("KeyServerLocationErrors", cc), - lastCommitVersionAssigned(0), - commitLatencySample("CommitLatencyMetrics", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, SERVER_KNOBS->LATENCY_SAMPLE_SIZE), - grvLatencySample("GRVLatencyMetrics", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, SERVER_KNOBS->LATENCY_SAMPLE_SIZE), - commitLatencyBands("CommitLatencyBands", id, SERVER_KNOBS->STORAGE_LOGGING_DELAY), - grvLatencyBands("GRVLatencyBands", id, SERVER_KNOBS->STORAGE_LOGGING_DELAY) { -======= explicit ProxyStats(UID id, Version* pVersion, NotifiedVersion* pCommittedVersion, int64_t* commitBatchesMemBytesCountPtr) - : cc("ProxyStats", id.toString()), txnRequestIn("TxnRequestIn", cc), txnRequestOut("TxnRequestOut", cc), - txnRequestErrors("TxnRequestErrors", cc), txnStartIn("TxnStartIn", cc), txnStartOut("TxnStartOut", cc), - txnStartBatch("TxnStartBatch", cc), txnSystemPriorityStartIn("TxnSystemPriorityStartIn", cc), + : cc("ProxyStats", id.toString()), recentRequests(0), lastBucketBegin(now()), maxComputeNS(0), minComputeNS(1e12), + bucketInterval(FLOW_KNOBS->BASIC_LOAD_BALANCE_UPDATE_RATE / FLOW_KNOBS->BASIC_LOAD_BALANCE_BUCKETS), + txnRequestIn("TxnRequestIn", cc), txnRequestOut("TxnRequestOut", cc), txnRequestErrors("TxnRequestErrors", cc), + txnStartIn("TxnStartIn", cc), txnStartOut("TxnStartOut", cc), txnStartBatch("TxnStartBatch", cc), + txnSystemPriorityStartIn("TxnSystemPriorityStartIn", cc), txnSystemPriorityStartOut("TxnSystemPriorityStartOut", cc), txnBatchPriorityStartIn("TxnBatchPriorityStartIn", cc), txnBatchPriorityStartOut("TxnBatchPriorityStartOut", cc), @@ -183,10 +159,11 @@ struct ProxyStats { txnCommitVersionAssigned("TxnCommitVersionAssigned", cc), txnCommitResolving("TxnCommitResolving", cc), txnCommitResolved("TxnCommitResolved", cc), txnCommitOut("TxnCommitOut", cc), txnCommitOutSuccess("TxnCommitOutSuccess", cc), txnCommitErrors("TxnCommitErrors", cc), - txnConflicts("TxnConflicts", cc), commitBatchIn("CommitBatchIn", cc), commitBatchOut("CommitBatchOut", cc), - mutationBytes("MutationBytes", cc), mutations("Mutations", cc), conflictRanges("ConflictRanges", cc), - keyServerLocationIn("KeyServerLocationIn", cc), keyServerLocationOut("KeyServerLocationOut", cc), - keyServerLocationErrors("KeyServerLocationErrors", cc), lastCommitVersionAssigned(0), + txnConflicts("TxnConflicts", cc), txnThrottled("TxnThrottled", cc), commitBatchIn("CommitBatchIn", cc), + commitBatchOut("CommitBatchOut", cc), mutationBytes("MutationBytes", cc), mutations("Mutations", cc), + conflictRanges("ConflictRanges", cc), keyServerLocationIn("KeyServerLocationIn", cc), + keyServerLocationOut("KeyServerLocationOut", cc), keyServerLocationErrors("KeyServerLocationErrors", cc), + lastCommitVersionAssigned(0), commitLatencySample("CommitLatencyMetrics", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, SERVER_KNOBS->LATENCY_SAMPLE_SIZE), grvLatencySample("GRVLatencyMetrics", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, @@ -199,15 +176,12 @@ struct ProxyStats { SERVER_KNOBS->LATENCY_SAMPLE_SIZE), transactionRateAllowed(0), batchTransactionRateAllowed(0), transactionLimit(0), batchTransactionLimit(0), percentageOfDefaultGRVQueueProcessed(0), percentageOfBatchGRVQueueProcessed(0) { ->>>>>>> anoyes/merge-6.2-to-6.3 specialCounter(cc, "LastAssignedCommitVersion", [this](){return this->lastCommitVersionAssigned;}); specialCounter(cc, "Version", [pVersion](){return *pVersion; }); specialCounter(cc, "CommittedVersion", [pCommittedVersion](){ return pCommittedVersion->get(); }); specialCounter(cc, "CommitBatchesMemBytesCount", [commitBatchesMemBytesCountPtr]() { return *commitBatchesMemBytesCountPtr; }); -<<<<<<< HEAD specialCounter(cc, "MaxCompute", [this](){ return this->getAndResetMaxCompute(); }); specialCounter(cc, "MinCompute", [this](){ return this->getAndResetMinCompute(); }); -======= // The rate at which the limit(budget) is allowed to grow. specialCounter(cc, "SystemAndDefaultTxnRateAllowed", [this]() { return this->transactionRateAllowed; }); specialCounter(cc, "BatchTransactionRateAllowed", [this]() { return this->batchTransactionRateAllowed; }); @@ -217,7 +191,6 @@ struct ProxyStats { [this]() { return this->percentageOfDefaultGRVQueueProcessed; }); specialCounter(cc, "PercentageOfBatchGRVQueueProcessed", [this]() { return this->percentageOfBatchGRVQueueProcessed; }); ->>>>>>> anoyes/merge-6.2-to-6.3 logger = traceCounters("ProxyMetrics", id, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "ProxyMetrics"); for(int i = 0; i < FLOW_KNOBS->BASIC_LOAD_BALANCE_BUCKETS; i++) { requestBuckets.push_back(0); @@ -298,17 +271,12 @@ struct TransactionRateInfo { } }; -<<<<<<< HEAD - -ACTOR Future getRate(UID myID, Reference> db, int64_t* inTransactionCount, int64_t* inBatchTransactionCount, TransactionRateInfo *transactionRateInfo, - TransactionRateInfo *batchTransactionRateInfo, GetHealthMetricsReply* healthMetricsReply, GetHealthMetricsReply* detailedHealthMetricsReply, - TransactionTagMap* transactionTagCounter, PrioritizedTransactionTagMap* throttledTags) { -======= ACTOR Future getRate(UID myID, Reference> db, int64_t* inTransactionCount, - int64_t* inBatchTransactionCount, double* outTransactionRate, - double* outBatchTransactionRate, GetHealthMetricsReply* healthMetricsReply, - GetHealthMetricsReply* detailedHealthMetricsReply, ProxyStats* stats) { ->>>>>>> anoyes/merge-6.2-to-6.3 + int64_t* inBatchTransactionCount, TransactionRateInfo* transactionRateInfo, + TransactionRateInfo* batchTransactionRateInfo, GetHealthMetricsReply* healthMetricsReply, + GetHealthMetricsReply* detailedHealthMetricsReply, + TransactionTagMap* transactionTagCounter, + PrioritizedTransactionTagMap* throttledTags, ProxyStats* stats) { state Future nextRequestTimer = Never(); state Future leaseTimeout = Never(); state Future reply = Never(); @@ -345,14 +313,11 @@ ACTOR Future getRate(UID myID, Reference> db, int64 } when ( GetRateInfoReply rep = wait(reply) ) { reply = Never(); -<<<<<<< HEAD transactionRateInfo->setRate(rep.transactionRate); batchTransactionRateInfo->setRate(rep.batchTransactionRate); //TraceEvent("MasterProxyRate", myID).detail("Rate", rep.transactionRate).detail("BatchRate", rep.batchTransactionRate).detail("Lease", rep.leaseDuration).detail("ReleasedTransactions", *inTransactionCount - lastTC); -======= - *outTransactionRate = rep.transactionRate; - *outBatchTransactionRate = rep.batchTransactionRate; + stats->transactionRateAllowed = rep.transactionRate; stats->batchTransactionRateAllowed = rep.batchTransactionRate; // TraceEvent("MasterProxyTxRate", myID) @@ -361,7 +326,6 @@ ACTOR Future getRate(UID myID, Reference> db, int64 // .detail("BatchRateAllowed", rep.batchTransactionRate) // .detail("Lease", rep.leaseDuration) // .detail("ReleasedTransactions", *inTransactionCount - lastTC); ->>>>>>> anoyes/merge-6.2-to-6.3 lastTC = *inTransactionCount; leaseTimeout = delay(rep.leaseDuration); nextRequestTimer = delayJittered(rep.leaseDuration / 2); @@ -1650,17 +1614,12 @@ ACTOR static Future transactionStarter(MasterProxyInterface proxy, Referen state PrioritizedTransactionTagMap throttledTags; state PromiseStream replyTimes; -<<<<<<< HEAD - - addActor.send(getRate(proxy.id(), db, &transactionCount, &batchTransactionCount, &normalRateInfo, &batchRateInfo, healthMetricsReply, detailedHealthMetricsReply, &transactionTagCounter, &throttledTags)); + addActor.send(getRate(proxy.id(), db, &transactionCount, &batchTransactionCount, &normalRateInfo, &batchRateInfo, + healthMetricsReply, detailedHealthMetricsReply, &transactionTagCounter, &throttledTags, + stats)); addActor.send(queueTransactionStartRequests(db, &systemQueue, &defaultQueue, &batchQueue, proxy.getConsistentReadVersion.getFuture(), GRVTimer, &lastGRVTime, &GRVBatchTime, replyTimes.getFuture(), &commitData->stats, &batchRateInfo, &transactionTagCounter)); -======= - addActor.send(getRate(proxy.id(), db, &transactionCount, &batchTransactionCount, &normalRateInfo.rate, - &batchRateInfo.rate, healthMetricsReply, detailedHealthMetricsReply, stats)); - addActor.send(queueTransactionStartRequests(&systemQueue, &defaultQueue, &batchQueue, proxy.getConsistentReadVersion.getFuture(), GRVTimer, &lastGRVTime, &GRVBatchTime, replyTimes.getFuture(), &commitData->stats)); ->>>>>>> anoyes/merge-6.2-to-6.3 // Get a list of the other proxies that go together with us while (std::find(db->get().client.proxies.begin(), db->get().client.proxies.end(), proxy) == db->get().client.proxies.end()) @@ -1729,16 +1688,10 @@ ACTOR static Future transactionStarter(MasterProxyInterface proxy, Referen } transactionsStarted[req.flags&1] += tc; -<<<<<<< HEAD - if (req.priority >= TransactionPriority::IMMEDIATE) - systemTransactionsStarted[req.flags & 1] += tc; - else if (req.priority >= TransactionPriority::DEFAULT) -======= double currentTime = g_network->timer(); - if (req.priority() >= GetReadVersionRequest::PRIORITY_SYSTEM_IMMEDIATE) { + if (req.priority >= TransactionPriority::IMMEDIATE) { systemTransactionsStarted[req.flags & 1] += tc; - } else if (req.priority() >= GetReadVersionRequest::PRIORITY_DEFAULT) { ->>>>>>> anoyes/merge-6.2-to-6.3 + } else if (req.priority >= TransactionPriority::DEFAULT) { defaultPriTransactionsStarted[req.flags & 1] += tc; stats->defaultTxnGRVTimeInQueue.addMeasurement(currentTime - req.requestTime()); } else { diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index a8bb073026..1c4c88e873 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -1027,7 +1027,6 @@ ACTOR Future updatePersistentData( TLogData* self, Reference logD return Void(); } -<<<<<<< HEAD ACTOR Future tLogPopCore( TLogData* self, Tag inputTag, Version to, Reference logData ) { if (self->ignorePopRequest) { TraceEvent(SevDebug, "IgnoringPopRequest").detail("IgnorePopDeadline", self->ignorePopDeadline); @@ -1107,16 +1106,11 @@ ACTOR Future tLogPop( TLogData* self, TLogPopRequest req, Reference>>>>>> anoyes/merge-6.2-to-6.3 ACTOR Future updateStorage( TLogData* self ) { while(self->spillOrder.size() && !self->id_data.count(self->spillOrder.front())) { self->spillOrder.pop_front(); diff --git a/fdbserver/TagPartitionedLogSystem.actor.cpp b/fdbserver/TagPartitionedLogSystem.actor.cpp index 7f77e2f909..0725d36965 100644 --- a/fdbserver/TagPartitionedLogSystem.actor.cpp +++ b/fdbserver/TagPartitionedLogSystem.actor.cpp @@ -166,25 +166,16 @@ OldTLogCoreData::OldTLogCoreData(const OldLogData& oldData) struct TagPartitionedLogSystem : ILogSystem, ReferenceCounted { const UID dbgid; LogSystemType logSystemType; -<<<<<<< HEAD - std::vector> tLogs; // LogSets in different locations: primary, remote or satellite -======= std::vector> tLogs; // LogSets in different locations: primary, satellite, or remote ->>>>>>> anoyes/merge-6.2-to-6.3 int expectedLogSets; int logRouterTags; int txsTags; UID recruitmentID; int repopulateRegionAntiQuorum; bool stopped; -<<<<<<< HEAD std::set pseudoLocalities; // Represent special localities that will be mapped to tagLocalityLogRouter const LogEpoch epoch; LogEpoch oldestBackupEpoch; -======= - std::set pseudoLocalities; - std::map pseudoLocalityPopVersion; // first:locality, second:popped version at the locality ->>>>>>> anoyes/merge-6.2-to-6.3 // new members std::map pseudoLocalityPopVersion; @@ -279,7 +270,6 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCounted 0; } -<<<<<<< HEAD // Return the min version of all pseudoLocalities, i.e., logRouter and backupTag Version popPseudoLocalityTag(Tag tag, Version upTo) final { ASSERT(isPseudoLocality(tag.locality) && hasPseudoLocality(tag.locality)); @@ -287,21 +277,11 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCounted>>>>>> anoyes/merge-6.2-to-6.3 + for (const int8_t locality : pseudoLocalities) { + minVersion = std::min(minVersion, pseudoLocalityPopVersion[Tag(locality, tag.id)]); } // TraceEvent("TLogPopPseudoTag", dbgid).detail("Tag", tag.toString()).detail("Version", upTo).detail("PopVersion", minVersion); return minVersion; @@ -1139,12 +1119,8 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCounted>>>>>> anoyes/merge-6.2-to-6.3 + void pop(Version upTo, Tag tag, Version durableKnownCommittedVersion, int8_t popLocality) final { if (upTo <= 0) return; if (tag.locality == tagLocalityRemoteLog) { popLogRouter(upTo, tag, durableKnownCommittedVersion, popLocality); @@ -1159,30 +1135,20 @@ struct TagPartitionedLogSystem : ILogSystem, ReferenceCountedget().id(),tag)] = std::make_pair(upTo, durableKnownCommittedVersion); -<<<<<<< HEAD } if (prev == 0) { // pop tag from log upto version defined in outstandingPops[].first popActors.add( popFromLog( this, log, tag, 1.0 ) ); //< FIXME: knob -======= - - if (prev == 0) { - popActors.add(popFromLog(this, log, tag, 1.0)); //< FIXME: knob // TODO: Knobify it ->>>>>>> anoyes/merge-6.2-to-6.3 } } } } } -<<<<<<< HEAD + // pop tag from log up to the version defined in self->outstandingPops[].first ACTOR static Future popFromLog(TagPartitionedLogSystem* self, Reference>> log, Tag tag, double time) { -======= - // pop tag from log up to the version defined in self->outstandingPops[].first - ACTOR static Future popFromLog( TagPartitionedLogSystem* self, Reference>> log, Tag tag, double time ) { ->>>>>>> anoyes/merge-6.2-to-6.3 state Version last = 0; loop { wait( delay(time, TaskPriority::TLogPop) ); diff --git a/fdbserver/fdbserver.actor.cpp b/fdbserver/fdbserver.actor.cpp index cd2b30217c..f7b1157af7 100644 --- a/fdbserver/fdbserver.actor.cpp +++ b/fdbserver/fdbserver.actor.cpp @@ -1858,7 +1858,6 @@ int main(int argc, char* argv[]) { setupAndRun(dataFolder, opts.testFile, opts.restarting, (isRestoring >= 1), opts.whitelistBinPaths); g_simulator.run(); } else if (role == FDBD) { -<<<<<<< HEAD // Update the global blob credential files list so that both fast // restore workers and backup workers can access blob storage. std::vector* pFiles = @@ -1868,19 +1867,6 @@ int main(int argc, char* argv[]) { pFiles->push_back(f); } } -======= - ASSERT( connectionFile ); - - setupSlowTaskProfiler(); - - if (!dataFolder.size()) - dataFolder = format("fdb/%d/", publicAddresses.address.port); // SOMEDAY: Better default - - vector> actors(listenErrors.begin(), listenErrors.end()); - actors.push_back( fdbd(connectionFile, localities, processClass, dataFolder, dataFolder, storageMemLimit, metricsConnFile, metricsPrefix, rsssize, whitelistBinPaths) ); - actors.push_back(histogramReport()); - //actors.push_back( recurring( []{}, .001 ) ); // for ASIO latency measurement ->>>>>>> anoyes/merge-6.2-to-6.3 // Call fast restore for the class FastRestoreClass. This is a short-cut to run fast restore in circus if (opts.processClass == ProcessClass::FastRestoreClass) { @@ -1909,6 +1895,7 @@ int main(int argc, char* argv[]) { actors.push_back(fdbd(opts.connectionFile, opts.localities, opts.processClass, dataFolder, dataFolder, opts.storageMemLimit, opts.metricsConnFile, opts.metricsPrefix, opts.rsssize, opts.whitelistBinPaths)); + actors.push_back(histogramReport()); // actors.push_back( recurring( []{}, .001 ) ); // for ASIO latency measurement f = stopAfter(waitForAll(actors)); diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 9f5cfeeb31..0f1fb7b6bc 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -657,28 +657,10 @@ public: } } counters; -<<<<<<< HEAD - StorageServer(IKeyValueStore* storage, Reference> const& db, StorageServerInterface const& ssi) - : instanceID(deterministicRandom()->randomUniqueID().first()), - storage(this, storage), db(db), actors(false), - lastTLogVersion(0), lastVersionWithData(0), restoredVersion(0), - rebootAfterDurableVersion(std::numeric_limits::max()), - durableInProgress(Void()), - versionLag(0), primaryLocality(tagLocalityInvalid), - updateEagerReads(0), - shardChangeCounter(0), - fetchKeysParallelismLock(SERVER_KNOBS->FETCH_KEYS_PARALLELISM_BYTES), - shuttingDown(false), debug_inApplyUpdate(false), debug_lastValidateTime(0), watchBytes(0), numWatches(0), - logProtocol(0), counters(this), tag(invalidTag), maxQueryQueue(0), thisServerID(ssi.id()), - readQueueSizeMetric(LiteralStringRef("StorageServer.ReadQueueSize")), - behind(false), versionBehind(false), byteSampleClears(false, LiteralStringRef("\xff\xff\xff")), noRecentUpdates(false), - lastUpdate(now()), poppedAllAfter(std::numeric_limits::max()), cpuUsage(0.0), diskUsage(0.0) - { -======= StorageServer(IKeyValueStore* storage, Reference> const& db, StorageServerInterface const& ssi) : fetchKeysHistograms(), instanceID(deterministicRandom()->randomUniqueID().first()), storage(this, storage), - db(db), lastTLogVersion(0), lastVersionWithData(0), restoredVersion(0), + db(db), actors(false), lastTLogVersion(0), lastVersionWithData(0), restoredVersion(0), rebootAfterDurableVersion(std::numeric_limits::max()), durableInProgress(Void()), versionLag(0), primaryLocality(tagLocalityInvalid), updateEagerReads(0), shardChangeCounter(0), fetchKeysParallelismLock(SERVER_KNOBS->FETCH_KEYS_PARALLELISM_BYTES), shuttingDown(false), @@ -687,7 +669,6 @@ public: readQueueSizeMetric(LiteralStringRef("StorageServer.ReadQueueSize")), behind(false), versionBehind(false), byteSampleClears(false, LiteralStringRef("\xff\xff\xff")), noRecentUpdates(false), lastUpdate(now()), poppedAllAfter(std::numeric_limits::max()), cpuUsage(0.0), diskUsage(0.0) { ->>>>>>> anoyes/merge-6.2-to-6.3 version.initMetric(LiteralStringRef("StorageServer.Version"), counters.cc.id); oldestVersion.initMetric(LiteralStringRef("StorageServer.OldestVersion"), counters.cc.id); durableVersion.initMetric(LiteralStringRef("StorageServer.DurableVersion"), counters.cc.id); @@ -3815,7 +3796,6 @@ ACTOR Future checkBehind( StorageServer* self ) { } } -<<<<<<< HEAD ACTOR Future serveGetValueRequests( StorageServer* self, FutureStream getValue ) { loop { GetValueRequest req = waitNext(getValue); @@ -3852,7 +3832,9 @@ ACTOR Future serveWatchValueRequests( StorageServer* self, FutureStreamactors.add(self->readGuard(req, watchValueQ)); -======= + } +} + ACTOR Future reportStorageServerState(StorageServer* self) { if (!SERVER_KNOBS->REPORT_DD_METRICS) { return Void(); @@ -3879,7 +3861,6 @@ ACTOR Future reportStorageServerState(StorageServer* self) { .detail("StartKey", longestRunningFetchKeys.second.begin.printable()) .detail("EndKey", longestRunningFetchKeys.second.end.printable()) .detail("NumRunning", numRunningFetchKeys); ->>>>>>> anoyes/merge-6.2-to-6.3 } } @@ -3890,7 +3871,6 @@ ACTOR Future storageServerCore( StorageServer* self, StorageServerInterfac state double lastLoopTopTime = now(); state Future dbInfoChange = Void(); state Future checkLastUpdate = Void(); -<<<<<<< HEAD state Future updateProcessStatsTimer = delay(SERVER_KNOBS->FASTRESTORE_UPDATE_PROCESS_STATS_INTERVAL); self->actors.add(updateStorage(self)); @@ -3904,21 +3884,10 @@ ACTOR Future storageServerCore( StorageServer* self, StorageServerInterfac self->actors.add(serveGetKeyRequests(self, ssi.getKey.getFuture())); self->actors.add(serveWatchValueRequests(self, ssi.watchValue.getFuture())); self->actors.add(traceRole(Role::STORAGE_SERVER, ssi.id())); + self->actors.add(reportStorageServerState(self)); self->transactionTagCounter.startNewInterval(self->thisServerID); self->actors.add(recurring([&](){ self->transactionTagCounter.startNewInterval(self->thisServerID); }, SERVER_KNOBS->READ_TAG_MEASUREMENT_INTERVAL)); -======= - state double updateProcessStatsDelay = SERVER_KNOBS->UPDATE_STORAGE_PROCESS_STATS_INTERVAL; - state Future updateProcessStatsTimer = delay(updateProcessStatsDelay); - - actors.add(updateStorage(self)); - actors.add(waitFailureServer(ssi.waitFailure.getFuture())); - actors.add(self->otherError.getFuture()); - actors.add(metricsCore(self, ssi)); - actors.add(logLongByteSampleRecovery(self->byteSampleRecovery)); - actors.add(checkBehind(self)); - actors.add(reportStorageServerState(self)); ->>>>>>> anoyes/merge-6.2-to-6.3 self->coreStarted.send( Void() ); diff --git a/flow/Trace.cpp b/flow/Trace.cpp index 466d453f76..f2542196c4 100644 --- a/flow/Trace.cpp +++ b/flow/Trace.cpp @@ -30,11 +30,7 @@ #include #include #include -<<<<<<< HEAD - -======= #include ->>>>>>> anoyes/merge-6.2-to-6.3 #include "flow/IThreadPool.h" #include "flow/ThreadHelper.actor.h" #include "flow/FastRef.h" diff --git a/flow/error_definitions.h b/flow/error_definitions.h index f16e0ca8be..2041ce9578 100755 --- a/flow/error_definitions.h +++ b/flow/error_definitions.h @@ -90,12 +90,9 @@ ERROR( please_reboot_delete, 1208, "Reboot of server process requested, with del ERROR( master_proxy_failed, 1209, "Master terminating because a Proxy failed" ) ERROR( master_resolver_failed, 1210, "Master terminating because a Resolver failed" ) ERROR( server_overloaded, 1211, "Server is under too much load and cannot respond" ) -<<<<<<< HEAD ERROR( master_backup_worker_failed, 1212, "Master terminating because a backup worker failed") ERROR( tag_throttled, 1213, "Transaction tag is being throttled" ) -======= -ERROR(dd_tracker_cancelled, 1212, "The data distribution tracker has been cancelled") ->>>>>>> anoyes/merge-6.2-to-6.3 +ERROR( dd_tracker_cancelled, 1215, "The data distribution tracker has been cancelled" ) // 15xx Platform errors ERROR( platform_error, 1500, "Platform error" ) diff --git a/packaging/msi/FDBInstaller.wxs b/packaging/msi/FDBInstaller.wxs index c665523f2f..63a724ab46 100644 --- a/packaging/msi/FDBInstaller.wxs +++ b/packaging/msi/FDBInstaller.wxs @@ -32,11 +32,7 @@ >>>>>> anoyes/merge-6.2-to-6.3 UpgradeCode='{A95EA002-686E-4164-8356-C715B7F8B1C8}' Version='$(var.Version)' Manufacturer='$(var.Manufacturer)' diff --git a/versions.target b/versions.target index 0347371b31..8b1467c77e 100644 --- a/versions.target +++ b/versions.target @@ -1,7 +1,7 @@ - 6.2.29 - 6.2 + 6.3.10 + 6.3 From b8a98073361270cb602ae6f20cd1fe6b84ca49ca Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Tue, 24 Nov 2020 20:34:06 +0000 Subject: [PATCH 106/317] Move trackerCancelled higher in catch block --- fdbserver/DataDistribution.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index 8f65d6dc78..7d9d87c46b 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -4979,12 +4979,12 @@ ACTOR Future dataDistribution(Reference self, Promise return Void(); } catch( Error &e ) { + trackerCancelled = true; state Error err = e; TraceEvent("DataDistributorDestroyTeamCollections").error(e); self->teamCollection = nullptr; primaryTeamCollection = Reference(); remoteTeamCollection = Reference(); - trackerCancelled = true; wait(shards.clearAsync()); if (err.code() != error_code_movekeys_conflict) throw err; bool ddEnabled = wait( isDataDistributionEnabled(cx) ); From 5a717b3ba96859a41a809cb56c6de85a93ce17fb Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Tue, 24 Nov 2020 16:27:21 -0800 Subject: [PATCH 107/317] Change dd_tracker_cancelled to 1215 to avoid conflict This is safe because it's not been in a release, and it doesn't get serialized. --- flow/error_definitions.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flow/error_definitions.h b/flow/error_definitions.h index 6caa76050f..17abec2a8e 100755 --- a/flow/error_definitions.h +++ b/flow/error_definitions.h @@ -86,7 +86,7 @@ ERROR( please_reboot_delete, 1208, "Reboot of server process requested, with del ERROR( master_proxy_failed, 1209, "Master terminating because a Proxy failed" ) ERROR( master_resolver_failed, 1210, "Master terminating because a Resolver failed" ) ERROR( server_overloaded, 1211, "Server is under too much load and cannot respond" ) -ERROR(dd_tracker_cancelled, 1212, "The data distribution tracker has been cancelled") +ERROR( dd_tracker_cancelled, 1215, "The data distribution tracker has been cancelled" ) // 15xx Platform errors ERROR( platform_error, 1500, "Platform error" ) From 78c82dc891c2eb68b5147b7c01de3db4f93a1c37 Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Wed, 25 Nov 2020 23:05:26 -0800 Subject: [PATCH 108/317] Skip transactions that queued for a long time --- fdbserver/MasterProxyServer.actor.cpp | 35 +++++++++++++++++++++------ 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 0387a27582..b14fe4abc9 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -612,6 +612,7 @@ ACTOR Future commitBatch( if (debugID.present()) g_traceBatch.addEvent("CommitDebug", debugID.get().first(), "MasterProxyServer.commitBatch.Before"); + state double timeStart = g_network->timer(); if(localBatchNumber-self->latestLocalCommitBatchResolving.get()>SERVER_KNOBS->RESET_MASTER_BATCHES && now()-self->lastMasterReset>SERVER_KNOBS->RESET_MASTER_DELAY) { TraceEvent(SevWarnAlways, "ConnectionResetMaster", self->dbgid) @@ -625,6 +626,23 @@ ACTOR Future commitBatch( /////// Phase 1: Pre-resolution processing (CPU bound except waiting for a version # which is separately pipelined and *should* be available by now (unless empty commit); ordered; currently atomic but could yield) TEST(self->latestLocalCommitBatchResolving.get() < localBatchNumber-1); // Queuing pre-resolution commit processing wait(self->latestLocalCommitBatchResolving.whenAtLeast(localBatchNumber-1)); + double queuingDelay = g_network->timer() - timeStart; + state bool rejectBatch = false; + if (queuingDelay > SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS / SERVER_KNOBS->VERSIONS_PER_SECOND || + (BUGGIFY && g_network->isSimulated() && deterministicRandom()->random01() < 0.01)) { + TEST(true); // Reject transactions in the batch + rejectBatch = true; + + for (const auto& tr : trs) { + tr.reply.sendError(not_committed()); + } + self->latestLocalCommitBatchResolving.set(localBatchNumber); + self->latestLocalCommitBatchLogging.set(localBatchNumber); + ++self->stats.commitBatchOut; + self->stats.txnCommitOut += trs.size(); + return Void(); + } + state Future releaseDelay = delay(std::min(SERVER_KNOBS->MAX_PROXY_COMPUTE, batchOperations*self->commitComputePerOperation[latencyBucket]), TaskPriority::ProxyMasterVersionReply); if (debugID.present()) @@ -654,7 +672,7 @@ ACTOR Future commitBatch( ResolutionRequestBuilder requests( self, commitVersion, prevVersion, self->version ); int conflictRangeCount = 0; state int64_t maxTransactionBytes = 0; - for (int t = 0; tdbgid).detail("Snapshot", trs[t].transaction.read_snapshot); @@ -767,9 +785,9 @@ ACTOR Future commitBatch( // Determine which transactions actually committed (conservatively) by combining results from the resolvers state vector committed(trs.size()); - ASSERT(transactionResolverMap.size() == committed.size()); + ASSERT(rejectBatch || transactionResolverMap.size() == committed.size()); vector nextTr(resolution.size()); - for (int t = 0; t commitBatch( state bool locked = lockedKey.present() && lockedKey.get().size(); state Optional mustContainSystemKey = self->txnStateStore->readValue(mustContainSystemMutationsKey).get(); - if(mustContainSystemKey.present() && mustContainSystemKey.get().size()) { + if(mustContainSystemKey.present() && mustContainSystemKey.get().size() && !rejectBatch) { for (int t = 0; t commitBatch( // This first pass through committed transactions deals with "metadata" effects (modifications of txnStateStore, changes to storage servers' responsibilities) int t; state int commitCount = 0; - for (t = 0; t < trs.size() && !forceRecovery; t++) + for (t = 0; t < trs.size() && !forceRecovery && !rejectBatch; t++) { if (committed[t] == ConflictBatch::TransactionCommitted && (!locked || trs[t].isLockAware())) { commitCount++; @@ -819,13 +837,14 @@ ACTOR Future commitBatch( if(firstStateMutations) { ASSERT(committed[t] == ConflictBatch::TransactionCommitted); firstStateMutations = false; - forceRecovery = false; + // forceRecovery = false; } } - if (forceRecovery) { + if (forceRecovery || rejectBatch) { for (; tdbgid).detail("Stage", "AwaitCommit"); + if (forceRecovery) + TraceEvent(SevWarn, "RestartingTxnSubsystem", self->dbgid).detail("Stage", "AwaitCommit"); } lockedKey = self->txnStateStore->readValue(databaseLockedKey).get(); From 5237549c194464631516ff0113a7aeed8af6d6ea Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Thu, 26 Nov 2020 20:36:02 -0800 Subject: [PATCH 109/317] Yield while processing ignored pop requests on tlog --- fdbserver/TLogServer.actor.cpp | 94 ++++++++++++++++------------------ 1 file changed, 45 insertions(+), 49 deletions(-) diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index 6ea751eef5..ea935a88ad 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -340,6 +340,7 @@ struct TLogData : NonCopyable { // the set and for callers that unset will // be able to match it up std::string dataFolder; // folder where data is stored + FlowLock toBePoppedMutex; std::map toBePopped; // map of Tag->Version for all the pops // that came when ignorePopRequest was set Reference> degraded; @@ -1005,15 +1006,20 @@ ACTOR Future updatePersistentData( TLogData* self, Reference logD return Void(); } +ACTOR Future queuePopRequest(TLogData* self, Tag tag, Version version) { + wait(self->toBePoppedMutex.take()); + FlowLock::Releaser releaser(self->toBePoppedMutex); + auto& v = self->toBePopped[tag]; + v = std::max(v, version); + return Void(); +} + ACTOR Future tLogPopCore( TLogData* self, Tag inputTag, Version to, Reference logData ) { if (self->ignorePopRequest) { TraceEvent(SevDebug, "IgnoringPopRequest").detail("IgnorePopDeadline", self->ignorePopDeadline); - if (self->toBePopped.find(inputTag) == self->toBePopped.end() - || to > self->toBePopped[inputTag]) { - self->toBePopped[inputTag] = to; - } - // add the pop to the toBePopped map + wait(queuePopRequest(self, tag, to)); + TraceEvent(SevDebug, "IgnoringPopRequest") .detail("IgnorePopDeadline", self->ignorePopDeadline) .detail("Tag", inputTag.toString()) @@ -1055,29 +1061,34 @@ ACTOR Future tLogPopCore( TLogData* self, Tag inputTag, Version to, Refere return Void(); } +ACTOR Future processPopRequests(TLogData* self, Reference logData) { + state const size_t batchSize = 1000; + wait(self->toBePoppedMutex.take()); + FlowLock::Releaser releaser(self->toBePoppedMutex); + state std::vector> ignoredPops; + state std::map::const_iterator it; + state int ignoredPopsPlayed = 0; + self->ignorePopRequest = false; + self->ignorePopDeadline = 0.0; + self->ignorePopUid = ""; + for (it = self->toBePopped.cbegin(); it != self->toBePopped.cend(); ++it) { + const auto& [tag, version] = *it; + TraceEvent("PlayIgnoredPop").detail("Tag", tag.toString()).detail("Version", version); + ignoredPops.push_back(tLogPopCore(self, tag, version, logData)); + if (++ignoredPopsPlayed % batchSize == 0) { + wait(yield()); + } + } + self->toBePopped.clear(); + wait(waitForAll(ignoredPops)); + return Void(); +} + ACTOR Future tLogPop( TLogData* self, TLogPopRequest req, Reference logData ) { // timeout check for ignorePopRequest if (self->ignorePopRequest && (g_network->now() > self->ignorePopDeadline)) { - - TraceEvent("EnableTLogPlayAllIgnoredPops"); - // use toBePopped and issue all the pops - std::map::iterator it; - vector> ignoredPops; - self->ignorePopRequest = false; - self->ignorePopUid = ""; - self->ignorePopDeadline = 0.0; - for (it = self->toBePopped.begin(); it != self->toBePopped.end(); it++) { - TraceEvent("PlayIgnoredPop") - .detail("Tag", it->first.toString()) - .detail("Version", it->second); - ignoredPops.push_back(tLogPopCore(self, it->first, it->second, logData)); - } - self->toBePopped.clear(); - wait(waitForAll(ignoredPops)); - TraceEvent("ResetIgnorePopRequest") - .detail("Now", g_network->now()) - .detail("IgnorePopRequest", self->ignorePopRequest) - .detail("IgnorePopDeadline", self->ignorePopDeadline); + TraceEvent("EnableTLogPlayAllIgnoredPops").detail("IgnoredPopDeadline", self->ignorePopDeadline); + wait(processPopRequests(self, logData)); } wait(tLogPopCore(self, req.tag, req.to, logData)); req.reply.send(Void()); @@ -2131,30 +2142,15 @@ tLogEnablePopReq(TLogEnablePopRequest enablePopReq, TLogData* self, Reference::iterator it; - state vector> ignoredPops; - self->ignorePopRequest = false; - self->ignorePopDeadline = 0.0; - self->ignorePopUid = ""; - for (it = self->toBePopped.begin(); it != self->toBePopped.end(); it++) { - TraceEvent("PlayIgnoredPop") - .detail("Tag", it->first.toString()) - .detail("Version", it->second); - ignoredPops.push_back(tLogPopCore(self, it->first, it->second, logData)); - } - TraceEvent("TLogExecCmdPopEnable") - .detail("UidStr", enablePopReq.snapUID.toString()) - .detail("IgnorePopUid", self->ignorePopUid) - .detail("IgnporePopRequest", self->ignorePopRequest) - .detail("IgnporePopDeadline", self->ignorePopDeadline) - .detail("PersistentDataVersion", logData->persistentDataVersion) - .detail("PersistentDatadurableVersion", logData->persistentDataDurableVersion) - .detail("QueueCommittedVersion", logData->queueCommittedVersion.get()) - .detail("Version", logData->version.get()); - wait(waitForAll(ignoredPops)); - self->toBePopped.clear(); + TraceEvent("EnableTLogPlayAllIgnoredPops2") + .detail("UidStr", enablePopReq.snapUID.toString()) + .detail("IgnorePopUid", self->ignorePopUid) + .detail("IgnorePopDeadline", self->ignorePopDeadline) + .detail("PersistentDataVersion", logData->persistentDataVersion) + .detail("PersistentDataDurableVersion", logData->persistentDataDurableVersion) + .detail("QueueCommittedVersion", logData->queueCommittedVersion.get()) + .detail("Version", logData->version.get()); + wait(processPopRequests(self, logData)); enablePopReq.reply.send(Void()); return Void(); } From 5cb0b138beb1b1539f225ad20db4afb15b4421f1 Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Fri, 27 Nov 2020 09:45:52 -0800 Subject: [PATCH 110/317] Don't reject transactions for the recovery transaction Otherwise, the recovery just keeps repeating. --- fdbserver/MasterProxyServer.actor.cpp | 34 +++++++++++++++------------ 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index b14fe4abc9..5f3e75504f 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -627,19 +627,24 @@ ACTOR Future commitBatch( TEST(self->latestLocalCommitBatchResolving.get() < localBatchNumber-1); // Queuing pre-resolution commit processing wait(self->latestLocalCommitBatchResolving.whenAtLeast(localBatchNumber-1)); double queuingDelay = g_network->timer() - timeStart; - state bool rejectBatch = false; - if (queuingDelay > SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS / SERVER_KNOBS->VERSIONS_PER_SECOND || - (BUGGIFY && g_network->isSimulated() && deterministicRandom()->random01() < 0.01)) { + if (queuingDelay > (double)SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS / SERVER_KNOBS->VERSIONS_PER_SECOND || + (BUGGIFY && g_network->isSimulated() && deterministicRandom()->random01() < 0.01 && trs.size() > 0 && + !trs[0].transaction.mutations[0].param1.startsWith(LiteralStringRef("\xff")))) { + // Disabled for the recovery transaction. otherwise, recovery can't finish and keeps doing more recoveries. TEST(true); // Reject transactions in the batch - rejectBatch = true; + TraceEvent("ProxyReject", self->dbgid).detail("Delay", queuingDelay).detail("N", trs.size()); + for (const auto m : trs[0].transaction.mutations) { + TraceEvent("ProxyReject", self->dbgid).detail("Mutation", m.toString()); + } + ASSERT(self->latestLocalCommitBatchResolving.get() == localBatchNumber - 1); + self->latestLocalCommitBatchResolving.set(localBatchNumber); + wait(self->latestLocalCommitBatchLogging.whenAtLeast(localBatchNumber-1)); + self->latestLocalCommitBatchLogging.set(localBatchNumber); for (const auto& tr : trs) { tr.reply.sendError(not_committed()); } - self->latestLocalCommitBatchResolving.set(localBatchNumber); - self->latestLocalCommitBatchLogging.set(localBatchNumber); ++self->stats.commitBatchOut; - self->stats.txnCommitOut += trs.size(); return Void(); } @@ -672,7 +677,7 @@ ACTOR Future commitBatch( ResolutionRequestBuilder requests( self, commitVersion, prevVersion, self->version ); int conflictRangeCount = 0; state int64_t maxTransactionBytes = 0; - for (int t = 0; tdbgid).detail("Snapshot", trs[t].transaction.read_snapshot); @@ -785,9 +790,9 @@ ACTOR Future commitBatch( // Determine which transactions actually committed (conservatively) by combining results from the resolvers state vector committed(trs.size()); - ASSERT(rejectBatch || transactionResolverMap.size() == committed.size()); + ASSERT(transactionResolverMap.size() == committed.size()); vector nextTr(resolution.size()); - for (int t = 0; t commitBatch( state bool locked = lockedKey.present() && lockedKey.get().size(); state Optional mustContainSystemKey = self->txnStateStore->readValue(mustContainSystemMutationsKey).get(); - if(mustContainSystemKey.present() && mustContainSystemKey.get().size() && !rejectBatch) { + if(mustContainSystemKey.present() && mustContainSystemKey.get().size()) { for (int t = 0; t commitBatch( // This first pass through committed transactions deals with "metadata" effects (modifications of txnStateStore, changes to storage servers' responsibilities) int t; state int commitCount = 0; - for (t = 0; t < trs.size() && !forceRecovery && !rejectBatch; t++) + for (t = 0; t < trs.size() && !forceRecovery; t++) { if (committed[t] == ConflictBatch::TransactionCommitted && (!locked || trs[t].isLockAware())) { commitCount++; @@ -840,11 +845,10 @@ ACTOR Future commitBatch( // forceRecovery = false; } } - if (forceRecovery || rejectBatch) { + if (forceRecovery) { for (; tdbgid).detail("Stage", "AwaitCommit"); + TraceEvent(SevWarn, "RestartingTxnSubsystem", self->dbgid).detail("Stage", "AwaitCommit"); } lockedKey = self->txnStateStore->readValue(databaseLockedKey).get(); From 7d7fdc296b3e4a681efe7e7597f74c8a16c90a92 Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Fri, 27 Nov 2020 12:19:56 -0800 Subject: [PATCH 111/317] Add read-write-path to doctree --- documentation/sphinx/source/technical-overview.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/sphinx/source/technical-overview.rst b/documentation/sphinx/source/technical-overview.rst index d25991478f..f66dfb3311 100644 --- a/documentation/sphinx/source/technical-overview.rst +++ b/documentation/sphinx/source/technical-overview.rst @@ -47,3 +47,4 @@ These documents explain the engineering design of FoundationDB, with detailed in flow testing kv-architecture + read-write-path From df5293e2bebb60e8bdcfb3e5f35cf5d430acd333 Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Sat, 28 Nov 2020 19:58:39 -0800 Subject: [PATCH 112/317] Add a knob PROXY_REJECT_BATCH_QUEUED_TOO_LONG Disable the proxy rejection feature for backup workload, because of the ApplyMutationsError. --- fdbserver/Knobs.cpp | 1 + fdbserver/Knobs.h | 1 + fdbserver/MasterProxyServer.actor.cpp | 20 +++++++++++++------ fdbserver/workloads/AtomicRestore.actor.cpp | 4 ++++ .../workloads/AtomicSwitchover.actor.cpp | 5 +++++ fdbserver/workloads/BackupToDBAbort.actor.cpp | 5 +++++ .../workloads/BackupToDBCorrectness.actor.cpp | 5 +++++ .../workloads/BackupToDBUpgrade.actor.cpp | 5 +++++ 8 files changed, 40 insertions(+), 6 deletions(-) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 8431be5149..79b4986dce 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -344,6 +344,7 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( MAX_PROXY_COMPUTE, 2.0 ); init( PROXY_COMPUTE_BUCKETS, 20000 ); init( PROXY_COMPUTE_GROWTH_RATE, 0.01 ); + init( PROXY_REJECT_BATCH_QUEUED_TOO_LONG, true ); init( RESET_MASTER_BATCHES, 200 ); init( RESET_RESOLVER_BATCHES, 200 ); diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 0a5168397d..2047a0439d 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -289,6 +289,7 @@ public: double MAX_PROXY_COMPUTE; int PROXY_COMPUTE_BUCKETS; double PROXY_COMPUTE_GROWTH_RATE; + bool PROXY_REJECT_BATCH_QUEUED_TOO_LONG; int RESET_MASTER_BATCHES; int RESET_RESOLVER_BATCHES; diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 5f3e75504f..63df826cbb 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -627,19 +627,27 @@ ACTOR Future commitBatch( TEST(self->latestLocalCommitBatchResolving.get() < localBatchNumber-1); // Queuing pre-resolution commit processing wait(self->latestLocalCommitBatchResolving.whenAtLeast(localBatchNumber-1)); double queuingDelay = g_network->timer() - timeStart; - if (queuingDelay > (double)SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS / SERVER_KNOBS->VERSIONS_PER_SECOND || - (BUGGIFY && g_network->isSimulated() && deterministicRandom()->random01() < 0.01 && trs.size() > 0 && - !trs[0].transaction.mutations[0].param1.startsWith(LiteralStringRef("\xff")))) { + if ((queuingDelay > (double)SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS / SERVER_KNOBS->VERSIONS_PER_SECOND || + (BUGGIFY && g_network->isSimulated() && deterministicRandom()->random01() < 0.01)) && + SERVER_KNOBS->PROXY_REJECT_BATCH_QUEUED_TOO_LONG && + trs.size() > 0 && !trs[0].transaction.mutations.empty() && !trs[0].transaction.mutations[0].param1.startsWith(LiteralStringRef("\xff"))) { // Disabled for the recovery transaction. otherwise, recovery can't finish and keeps doing more recoveries. TEST(true); // Reject transactions in the batch - TraceEvent("ProxyReject", self->dbgid).detail("Delay", queuingDelay).detail("N", trs.size()); - for (const auto m : trs[0].transaction.mutations) { - TraceEvent("ProxyReject", self->dbgid).detail("Mutation", m.toString()); + TraceEvent("ProxyReject", self->dbgid).detail("Delay", queuingDelay).detail("N", trs.size()).detail("BatchNumber", localBatchNumber); + int i = 0; + for (const auto tr : trs) { + int j = 0; + for (const auto& m : tr.transaction.mutations) { + TraceEvent("ProxyReject", self->dbgid).detail("T", i).detail("M", j).detail("Mutation", m.toString()); + j++; + } + i++; } ASSERT(self->latestLocalCommitBatchResolving.get() == localBatchNumber - 1); self->latestLocalCommitBatchResolving.set(localBatchNumber); wait(self->latestLocalCommitBatchLogging.whenAtLeast(localBatchNumber-1)); + ASSERT(self->latestLocalCommitBatchLogging.get() == localBatchNumber - 1); self->latestLocalCommitBatchLogging.set(localBatchNumber); for (const auto& tr : trs) { tr.reply.sendError(not_committed()); diff --git a/fdbserver/workloads/AtomicRestore.actor.cpp b/fdbserver/workloads/AtomicRestore.actor.cpp index 4537970f7a..bcd1e78d25 100644 --- a/fdbserver/workloads/AtomicRestore.actor.cpp +++ b/fdbserver/workloads/AtomicRestore.actor.cpp @@ -61,6 +61,9 @@ struct AtomicRestoreWorkload : TestWorkload { ACTOR static Future _start(Database cx, AtomicRestoreWorkload* self) { state FileBackupAgent backupAgent; + // Disable proxy rejection + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; + wait( delay(self->startAfter * deterministicRandom()->random01()) ); TraceEvent("AtomicRestore_Start"); @@ -105,6 +108,7 @@ struct AtomicRestoreWorkload : TestWorkload { } TraceEvent("AtomicRestore_Done"); + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; return Void(); } }; diff --git a/fdbserver/workloads/AtomicSwitchover.actor.cpp b/fdbserver/workloads/AtomicSwitchover.actor.cpp index 02fcb77866..dc36a82a86 100644 --- a/fdbserver/workloads/AtomicSwitchover.actor.cpp +++ b/fdbserver/workloads/AtomicSwitchover.actor.cpp @@ -152,6 +152,9 @@ struct AtomicSwitchoverWorkload : TestWorkload { state DatabaseBackupAgent backupAgent(cx); state DatabaseBackupAgent restoreAgent(self->extraDB); + // Disable proxy rejection to avoid ApplyMutationsError + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; + TraceEvent("AS_Wait1"); wait(success( backupAgent.waitBackup(self->extraDB, BackupAgentBase::getDefaultTag(), false) )); TraceEvent("AS_Ready1"); @@ -177,6 +180,8 @@ struct AtomicSwitchoverWorkload : TestWorkload { g_simulator.drAgents = ISimulator::NoBackupAgents; } + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; + return Void(); } }; diff --git a/fdbserver/workloads/BackupToDBAbort.actor.cpp b/fdbserver/workloads/BackupToDBAbort.actor.cpp index 7d242360ec..20cfb7ae1e 100644 --- a/fdbserver/workloads/BackupToDBAbort.actor.cpp +++ b/fdbserver/workloads/BackupToDBAbort.actor.cpp @@ -22,6 +22,8 @@ #include "fdbclient/ManagementAPI.actor.h" #include "fdbclient/NativeAPI.actor.h" #include "fdbserver/workloads/workloads.actor.h" +#include "fdbserver/Knobs.h" + #include "flow/actorcompiler.h" // This must be the last #include. struct BackupToDBAbort : TestWorkload { @@ -54,6 +56,8 @@ struct BackupToDBAbort : TestWorkload { ACTOR static Future _setup(BackupToDBAbort* self, Database cx) { state DatabaseBackupAgent backupAgent(cx); try { + // Disable proxy rejection to avoid ApplyMutationsError + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; TraceEvent("BDBA_Submit1"); wait( backupAgent.submitBackup(self->extraDB, BackupAgentBase::getDefaultTag(), self->backupRanges, false, StringRef(), StringRef(), true) ); TraceEvent("BDBA_Submit2"); @@ -61,6 +65,7 @@ struct BackupToDBAbort : TestWorkload { if( e.code() != error_code_backup_duplicate ) throw; } + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; return Void(); } diff --git a/fdbserver/workloads/BackupToDBCorrectness.actor.cpp b/fdbserver/workloads/BackupToDBCorrectness.actor.cpp index bb1ced25eb..11fd9642d9 100644 --- a/fdbserver/workloads/BackupToDBCorrectness.actor.cpp +++ b/fdbserver/workloads/BackupToDBCorrectness.actor.cpp @@ -442,6 +442,9 @@ struct BackupToDBCorrectnessWorkload : TestWorkload { TraceEvent("BARW_Arguments").detail("BackupTag", printable(self->backupTag)).detail("BackupAfter", self->backupAfter) .detail("AbortAndRestartAfter", self->abortAndRestartAfter).detail("DifferentialAfter", self->stopDifferentialAfter); + // Disable proxy rejection to avoid ApplyMutationsError + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; + state UID randomID = nondeterministicRandom()->randomUniqueID(); // Increment the backup agent requets @@ -575,6 +578,8 @@ struct BackupToDBCorrectnessWorkload : TestWorkload { throw; } + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; + return Void(); } }; diff --git a/fdbserver/workloads/BackupToDBUpgrade.actor.cpp b/fdbserver/workloads/BackupToDBUpgrade.actor.cpp index 3f2afcc717..3a324e6b1f 100644 --- a/fdbserver/workloads/BackupToDBUpgrade.actor.cpp +++ b/fdbserver/workloads/BackupToDBUpgrade.actor.cpp @@ -346,6 +346,9 @@ struct BackupToDBUpgradeWorkload : TestWorkload { state UID logUid; state Version commitVersion; + // Disable proxy rejection to avoid ApplyMutationsError + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; + state Future stopDifferential = delay(self->stopDifferentialAfter); state Future waitUpgrade = backupAgent.waitUpgradeToLatestDrVersion(self->extraDB, self->backupTag); wait(success(stopDifferential) && success(waitUpgrade)); @@ -462,6 +465,8 @@ struct BackupToDBUpgradeWorkload : TestWorkload { throw; } + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; + return Void(); } }; From 589ee0197930061b91ffe8aaaf3d975390f28d28 Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Sun, 29 Nov 2020 09:45:55 -0800 Subject: [PATCH 113/317] Fix backup workload w.r.t. proxy rejection --- fdbserver/MasterProxyServer.actor.cpp | 10 ---------- fdbserver/workloads/BackupCorrectness.actor.cpp | 2 ++ 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 63df826cbb..2ff54a6249 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -634,15 +634,6 @@ ACTOR Future commitBatch( // Disabled for the recovery transaction. otherwise, recovery can't finish and keeps doing more recoveries. TEST(true); // Reject transactions in the batch TraceEvent("ProxyReject", self->dbgid).detail("Delay", queuingDelay).detail("N", trs.size()).detail("BatchNumber", localBatchNumber); - int i = 0; - for (const auto tr : trs) { - int j = 0; - for (const auto& m : tr.transaction.mutations) { - TraceEvent("ProxyReject", self->dbgid).detail("T", i).detail("M", j).detail("Mutation", m.toString()); - j++; - } - i++; - } ASSERT(self->latestLocalCommitBatchResolving.get() == localBatchNumber - 1); self->latestLocalCommitBatchResolving.set(localBatchNumber); @@ -850,7 +841,6 @@ ACTOR Future commitBatch( if(firstStateMutations) { ASSERT(committed[t] == ConflictBatch::TransactionCommitted); firstStateMutations = false; - // forceRecovery = false; } } if (forceRecovery) { diff --git a/fdbserver/workloads/BackupCorrectness.actor.cpp b/fdbserver/workloads/BackupCorrectness.actor.cpp index ddf7e879f3..bf318055c0 100644 --- a/fdbserver/workloads/BackupCorrectness.actor.cpp +++ b/fdbserver/workloads/BackupCorrectness.actor.cpp @@ -364,6 +364,7 @@ struct BackupAndRestoreCorrectnessWorkload : TestWorkload { state FileBackupAgent backupAgent; state Future extraBackup; state bool extraTasks = false; + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; TraceEvent("BARW_Arguments").detail("BackupTag", printable(self->backupTag)).detail("PerformRestore", self->performRestore) .detail("BackupAfter", self->backupAfter).detail("RestoreAfter", self->restoreAfter) .detail("AbortAndRestartAfter", self->abortAndRestartAfter).detail("DifferentialAfter", self->stopDifferentialAfter); @@ -661,6 +662,7 @@ struct BackupAndRestoreCorrectnessWorkload : TestWorkload { TraceEvent(SevError, "BackupAndRestoreCorrectness").error(e).GetLastError(); throw; } + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; return Void(); } }; From da55d7388558105d907c863b7034113a230c39d2 Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Sun, 29 Nov 2020 14:07:01 -0800 Subject: [PATCH 114/317] Fix BackupToDBAbort workload w.r.t. proxy rejection --- fdbserver/workloads/BackupToDBAbort.actor.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fdbserver/workloads/BackupToDBAbort.actor.cpp b/fdbserver/workloads/BackupToDBAbort.actor.cpp index 20cfb7ae1e..60c73620b7 100644 --- a/fdbserver/workloads/BackupToDBAbort.actor.cpp +++ b/fdbserver/workloads/BackupToDBAbort.actor.cpp @@ -56,8 +56,6 @@ struct BackupToDBAbort : TestWorkload { ACTOR static Future _setup(BackupToDBAbort* self, Database cx) { state DatabaseBackupAgent backupAgent(cx); try { - // Disable proxy rejection to avoid ApplyMutationsError - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; TraceEvent("BDBA_Submit1"); wait( backupAgent.submitBackup(self->extraDB, BackupAgentBase::getDefaultTag(), self->backupRanges, false, StringRef(), StringRef(), true) ); TraceEvent("BDBA_Submit2"); @@ -65,7 +63,6 @@ struct BackupToDBAbort : TestWorkload { if( e.code() != error_code_backup_duplicate ) throw; } - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; return Void(); } @@ -77,6 +74,9 @@ struct BackupToDBAbort : TestWorkload { ACTOR static Future _start(BackupToDBAbort* self, Database cx) { state DatabaseBackupAgent backupAgent(cx); + // Disable proxy rejection to avoid ApplyMutationsError + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; + TraceEvent("BDBA_Start").detail("Delay", self->abortDelay); wait(delay(self->abortDelay)); TraceEvent("BDBA_Wait"); @@ -94,6 +94,7 @@ struct BackupToDBAbort : TestWorkload { g_simulator.drAgents = ISimulator::NoBackupAgents; } + const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; return Void(); } From 6bf1e5f3f918f35f0c891b23b485a6c2e6a7fffe Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Sun, 29 Nov 2020 14:16:10 -0800 Subject: [PATCH 115/317] Update release notes --- .../sphinx/source/release-notes/release-notes-620.rst | 1 + fdbserver/MasterProxyServer.actor.cpp | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/documentation/sphinx/source/release-notes/release-notes-620.rst b/documentation/sphinx/source/release-notes/release-notes-620.rst index 1d74690caf..82f417717e 100644 --- a/documentation/sphinx/source/release-notes/release-notes-620.rst +++ b/documentation/sphinx/source/release-notes/release-notes-620.rst @@ -8,6 +8,7 @@ Release Notes ====== * Fix invalid memory access on data distributor when snapshotting large clusters. `(PR #4076) `_ * Add human-readable DateTime to trace events `(PR #4087) `_ +* Proxy rejects transaction batch that exceeds MVCC window `(PR #4113) `_ 6.2.28 ====== diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 2ff54a6249..fcb8561510 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -633,7 +633,10 @@ ACTOR Future commitBatch( trs.size() > 0 && !trs[0].transaction.mutations.empty() && !trs[0].transaction.mutations[0].param1.startsWith(LiteralStringRef("\xff"))) { // Disabled for the recovery transaction. otherwise, recovery can't finish and keeps doing more recoveries. TEST(true); // Reject transactions in the batch - TraceEvent("ProxyReject", self->dbgid).detail("Delay", queuingDelay).detail("N", trs.size()).detail("BatchNumber", localBatchNumber); + TraceEvent(SevWarnAlways, "ProxyReject", self->dbgid) + .detail("QDelay", queuingDelay) + .detail("Transactions", trs.size()) + .detail("BatchNumber", localBatchNumber); ASSERT(self->latestLocalCommitBatchResolving.get() == localBatchNumber - 1); self->latestLocalCommitBatchResolving.set(localBatchNumber); @@ -644,6 +647,7 @@ ACTOR Future commitBatch( tr.reply.sendError(not_committed()); } ++self->stats.commitBatchOut; + self->stats.txnConflicts += trs.size(); return Void(); } From 3d9ac0b050f92af0e9e203ce06d6761a0842eb39 Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Mon, 30 Nov 2020 09:29:18 -0800 Subject: [PATCH 116/317] Address review comments --- fdbserver/MasterProxyServer.actor.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index fcb8561510..7b40ec7a51 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -612,7 +612,7 @@ ACTOR Future commitBatch( if (debugID.present()) g_traceBatch.addEvent("CommitDebug", debugID.get().first(), "MasterProxyServer.commitBatch.Before"); - state double timeStart = g_network->timer(); + state double timeStart = now(); if(localBatchNumber-self->latestLocalCommitBatchResolving.get()>SERVER_KNOBS->RESET_MASTER_BATCHES && now()-self->lastMasterReset>SERVER_KNOBS->RESET_MASTER_DELAY) { TraceEvent(SevWarnAlways, "ConnectionResetMaster", self->dbgid) @@ -628,12 +628,13 @@ ACTOR Future commitBatch( wait(self->latestLocalCommitBatchResolving.whenAtLeast(localBatchNumber-1)); double queuingDelay = g_network->timer() - timeStart; if ((queuingDelay > (double)SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS / SERVER_KNOBS->VERSIONS_PER_SECOND || - (BUGGIFY && g_network->isSimulated() && deterministicRandom()->random01() < 0.01)) && - SERVER_KNOBS->PROXY_REJECT_BATCH_QUEUED_TOO_LONG && - trs.size() > 0 && !trs[0].transaction.mutations.empty() && !trs[0].transaction.mutations[0].param1.startsWith(LiteralStringRef("\xff"))) { + (g_network->isSimulated() && BUGGIFY_WITH_PROB(0.01))) && + SERVER_KNOBS->PROXY_REJECT_BATCH_QUEUED_TOO_LONG && trs.size() > 0 && !trs[0].transaction.mutations.empty() && + !trs[0].transaction.mutations[0].param1.startsWith(LiteralStringRef("\xff"))) { // Disabled for the recovery transaction. otherwise, recovery can't finish and keeps doing more recoveries. TEST(true); // Reject transactions in the batch TraceEvent(SevWarnAlways, "ProxyReject", self->dbgid) + .suppressFor(0.1) .detail("QDelay", queuingDelay) .detail("Transactions", trs.size()) .detail("BatchNumber", localBatchNumber); @@ -644,7 +645,7 @@ ACTOR Future commitBatch( ASSERT(self->latestLocalCommitBatchLogging.get() == localBatchNumber - 1); self->latestLocalCommitBatchLogging.set(localBatchNumber); for (const auto& tr : trs) { - tr.reply.sendError(not_committed()); + tr.reply.sendError(transaction_too_old()); } ++self->stats.commitBatchOut; self->stats.txnConflicts += trs.size(); From 52d238967f5ffb29e72c631fd74f1c590b3eaf5d Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Mon, 30 Nov 2020 21:06:56 -0800 Subject: [PATCH 117/317] Allow backup's "ApplyMutations" to bypass rejection These mutations should always commit. --- fdbserver/MasterProxyServer.actor.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 7b40ec7a51..fcf9393ab2 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -567,6 +567,19 @@ ACTOR Future releaseResolvingAfter(ProxyCommitData* self, Future rel return Void(); } +// Try to identify recovery transaction and backup's apply mutations. +// Both cannot be rejected and are approximated by looking at first mutation +// starting with 0xff. +bool canReject(const std::vector& trs) { + for (const auto& tr : trs) { + if (tr.transaction.mutations.empty()) continue; + if (tr.transaction.mutations[0].param1.startsWith(LiteralStringRef("\xff"))) { + return false; + } + } + return true; +} + ACTOR Future commitBatch( ProxyCommitData* self, vector trs, @@ -629,8 +642,7 @@ ACTOR Future commitBatch( double queuingDelay = g_network->timer() - timeStart; if ((queuingDelay > (double)SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS / SERVER_KNOBS->VERSIONS_PER_SECOND || (g_network->isSimulated() && BUGGIFY_WITH_PROB(0.01))) && - SERVER_KNOBS->PROXY_REJECT_BATCH_QUEUED_TOO_LONG && trs.size() > 0 && !trs[0].transaction.mutations.empty() && - !trs[0].transaction.mutations[0].param1.startsWith(LiteralStringRef("\xff"))) { + SERVER_KNOBS->PROXY_REJECT_BATCH_QUEUED_TOO_LONG && canReject(trs)) { // Disabled for the recovery transaction. otherwise, recovery can't finish and keeps doing more recoveries. TEST(true); // Reject transactions in the batch TraceEvent(SevWarnAlways, "ProxyReject", self->dbgid) From 9d702099cfabdaf0cd20388c2fd3d55455f4f059 Mon Sep 17 00:00:00 2001 From: Trevor Clinkenbeard <65554662+sfc-gh-tclinkenbeard@users.noreply.github.com> Date: Wed, 2 Dec 2020 16:11:23 -0800 Subject: [PATCH 118/317] Update fdbserver/TLogServer.actor.cpp Co-authored-by: A.J. Beamon --- fdbserver/TLogServer.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index ea935a88ad..54008cc1de 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -1018,7 +1018,7 @@ ACTOR Future tLogPopCore( TLogData* self, Tag inputTag, Version to, Refere if (self->ignorePopRequest) { TraceEvent(SevDebug, "IgnoringPopRequest").detail("IgnorePopDeadline", self->ignorePopDeadline); - wait(queuePopRequest(self, tag, to)); + wait(queuePopRequest(self, inputTag, to)); TraceEvent(SevDebug, "IgnoringPopRequest") .detail("IgnorePopDeadline", self->ignorePopDeadline) From a8af598307b0555607bda82b75e4eb500c27e758 Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Wed, 2 Dec 2020 16:23:13 -0800 Subject: [PATCH 119/317] Addressed review comments --- fdbserver/TLogServer.actor.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index 54008cc1de..485942cf49 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -1089,6 +1089,9 @@ ACTOR Future tLogPop( TLogData* self, TLogPopRequest req, ReferenceignorePopRequest && (g_network->now() > self->ignorePopDeadline)) { TraceEvent("EnableTLogPlayAllIgnoredPops").detail("IgnoredPopDeadline", self->ignorePopDeadline); wait(processPopRequests(self, logData)); + TraceEvent("ResetIgnorePopRequest") + .detail("IgnorePopRequest", self->ignorePopRequest) + .detail("IgnorePopDeadline", self->ignorePopDeadline); } wait(tLogPopCore(self, req.tag, req.to, logData)); req.reply.send(Void()); @@ -2145,6 +2148,7 @@ tLogEnablePopReq(TLogEnablePopRequest enablePopReq, TLogData* self, ReferenceignorePopUid) + .detail("IgnorePopRequest", self->ignorePopRequest) .detail("IgnorePopDeadline", self->ignorePopDeadline) .detail("PersistentDataVersion", logData->persistentDataVersion) .detail("PersistentDataDurableVersion", logData->persistentDataDurableVersion) From 245cf28ace876a76f02f7bc20910e9e9bb97594e Mon Sep 17 00:00:00 2001 From: Alvin Moore Date: Thu, 3 Dec 2020 02:12:55 -0500 Subject: [PATCH 120/317] Updated docker repositories to Vault repos --- build/Dockerfile | 34 ++++++++++++++++++++++------------ build/Dockerfile.devel | 6 +++--- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/build/Dockerfile b/build/Dockerfile index b4cf28ebc0..b230eb4de4 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -1,17 +1,27 @@ FROM centos:6 +# Clean yum cache, disable default Base repo and enable Vault +RUN yum clean all &&\ + sed -i -e 's/gpgcheck=1/enabled=0/g' /etc/yum.repos.d/CentOS-Base.repo &&\ + sed -i -e 's/enabled=0/enabled=1/g' /etc/yum.repos.d/CentOS-Vault.repo &&\ + sed -i -n '/6.1/q;p' /etc/yum.repos.d/CentOS-Vault.repo &&\ + sed -i -e "s/6\.0/$(cut -d\ -f3 /etc/redhat-release)/g" /etc/yum.repos.d/CentOS-Vault.repo &&\ + yum install -y yum-utils &&\ + yum-config-manager --enable rhel-server-rhscl-7-rpms &&\ + yum -y install centos-release-scl-rh epel-release \ + http://opensource.wandisco.com/centos/6/git/x86_64/wandisco-git-release-6-1.noarch.rpm &&\ + sed -i -e 's/#baseurl=/baseurl=/g' -e 's/mirror.centos.org/vault.centos.org/g' \ + -e 's/mirrorlist=/#mirrorlist=/g' /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo &&\ + yum clean all + # Install dependencies for developer tools, bindings,\ # documentation, actorcompiler, and packaging tools\ -RUN yum install -y yum-utils &&\ - yum-config-manager --enable rhel-server-rhscl-7-rpms &&\ - yum -y install centos-release-scl epel-release \ - http://opensource.wandisco.com/centos/6/git/x86_64/wandisco-git-release-6-1.noarch.rpm &&\ - yum -y install devtoolset-8-8.1-1.el6 java-1.8.0-openjdk-devel \ - devtoolset-8-gcc-8.3.1 devtoolset-8-gcc-c++-8.3.1 \ - devtoolset-8-libubsan-devel devtoolset-8-libasan-devel devtoolset-8-valgrind-devel \ - rh-python36-python-devel rh-ruby24 golang python27 rpm-build \ - mono-core debbuild python-pip dos2unix valgrind-devel ccache \ - distcc wget git lz4 lz4-devel lz4-static &&\ +RUN yum -y install devtoolset-8-8.1-1.el6 java-1.8.0-openjdk-devel \ + devtoolset-8-gcc-8.3.1 devtoolset-8-gcc-c++-8.3.1 \ + devtoolset-8-libubsan-devel devtoolset-8-libasan-devel devtoolset-8-valgrind-devel \ + rh-python36-python-devel rh-ruby24 golang python27 rpm-build \ + mono-core debbuild python-pip dos2unix valgrind-devel ccache \ + distcc wget git lz4 lz4-devel lz4-static &&\ pip install boto3==1.1.1 USER root @@ -61,8 +71,8 @@ RUN cd /opt/ && curl -L https://github.com/facebook/rocksdb/archive/v6.10.1.tar. ARG TIMEZONEINFO=America/Los_Angeles RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/${TIMEZONEINFO} /etc/localtime -LABEL version=0.1.19 -ENV DOCKER_IMAGEVER=0.1.19 +LABEL version=0.1.20 +ENV DOCKER_IMAGEVER=0.1.20 ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0 ENV CC=/opt/rh/devtoolset-8/root/usr/bin/gcc ENV CXX=/opt/rh/devtoolset-8/root/usr/bin/g++ diff --git a/build/Dockerfile.devel b/build/Dockerfile.devel index 33c6d03e36..9de4c1245d 100644 --- a/build/Dockerfile.devel +++ b/build/Dockerfile.devel @@ -1,4 +1,4 @@ -FROM foundationdb/foundationdb-build:0.1.19 +FROM foundationdb/foundationdb-build:0.1.20 USER root @@ -50,8 +50,8 @@ RUN cp -iv /usr/local/bin/clang++ /usr/local/bin/clang++.deref &&\ ldconfig &&\ rm -rf /mnt/artifacts -LABEL version=0.11.10 -ENV DOCKER_IMAGEVER=0.11.10 +LABEL version=0.11.11 +ENV DOCKER_IMAGEVER=0.11.11 ENV CLANGCC=/usr/local/bin/clang.de8a65ef ENV CLANGCXX=/usr/local/bin/clang++.de8a65ef From ae50dc9dae7a55723b225c8b3aa24b13c461145c Mon Sep 17 00:00:00 2001 From: Alvin Moore Date: Thu, 3 Dec 2020 02:16:24 -0500 Subject: [PATCH 121/317] Updated docker compose version --- build/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/docker-compose.yaml b/build/docker-compose.yaml index 98f0ac691e..048d468dab 100644 --- a/build/docker-compose.yaml +++ b/build/docker-compose.yaml @@ -2,7 +2,7 @@ version: "3" services: common: &common - image: foundationdb/foundationdb-build:0.1.19 + image: foundationdb/foundationdb-build:0.1.20 build-setup: &build-setup <<: *common From beccd6e3c2595cf5790ea24513cb28bddb3a32e5 Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Thu, 3 Dec 2020 11:02:41 -0800 Subject: [PATCH 122/317] Do not reject blind writes, i.e., empty read conflict range --- fdbserver/MasterProxyServer.actor.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index fcf9393ab2..0615ca26c4 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -567,13 +567,14 @@ ACTOR Future releaseResolvingAfter(ProxyCommitData* self, Future rel return Void(); } -// Try to identify recovery transaction and backup's apply mutations. +// Try to identify recovery transaction and backup's apply mutations (blind writes). // Both cannot be rejected and are approximated by looking at first mutation // starting with 0xff. bool canReject(const std::vector& trs) { for (const auto& tr : trs) { if (tr.transaction.mutations.empty()) continue; - if (tr.transaction.mutations[0].param1.startsWith(LiteralStringRef("\xff"))) { + if (tr.transaction.mutations[0].param1.startsWith(LiteralStringRef("\xff")) || + tr.transaction.read_conflict_ranges.empty()) { return false; } } From 1003057a7e5f3181b43adc1c81e05f6ec905fa9c Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Thu, 3 Dec 2020 09:36:44 -0800 Subject: [PATCH 123/317] Removed TLogData::toBePoppedMutex --- fdbserver/TLogServer.actor.cpp | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index 485942cf49..fadfe14867 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -340,7 +340,6 @@ struct TLogData : NonCopyable { // the set and for callers that unset will // be able to match it up std::string dataFolder; // folder where data is stored - FlowLock toBePoppedMutex; std::map toBePopped; // map of Tag->Version for all the pops // that came when ignorePopRequest was set Reference> degraded; @@ -1006,19 +1005,12 @@ ACTOR Future updatePersistentData( TLogData* self, Reference logD return Void(); } -ACTOR Future queuePopRequest(TLogData* self, Tag tag, Version version) { - wait(self->toBePoppedMutex.take()); - FlowLock::Releaser releaser(self->toBePoppedMutex); - auto& v = self->toBePopped[tag]; - v = std::max(v, version); - return Void(); -} - ACTOR Future tLogPopCore( TLogData* self, Tag inputTag, Version to, Reference logData ) { if (self->ignorePopRequest) { TraceEvent(SevDebug, "IgnoringPopRequest").detail("IgnorePopDeadline", self->ignorePopDeadline); - wait(queuePopRequest(self, inputTag, to)); + auto& v = self->toBePopped[inputTag]; + v = std::max(v, to); TraceEvent(SevDebug, "IgnoringPopRequest") .detail("IgnorePopDeadline", self->ignorePopDeadline) @@ -1063,15 +1055,16 @@ ACTOR Future tLogPopCore( TLogData* self, Tag inputTag, Version to, Refere ACTOR Future processPopRequests(TLogData* self, Reference logData) { state const size_t batchSize = 1000; - wait(self->toBePoppedMutex.take()); - FlowLock::Releaser releaser(self->toBePoppedMutex); state std::vector> ignoredPops; state std::map::const_iterator it; state int ignoredPopsPlayed = 0; + state std::map toBePopped; + toBePopped = std::move(self->toBePopped); + self->toBePopped.clear(); self->ignorePopRequest = false; self->ignorePopDeadline = 0.0; self->ignorePopUid = ""; - for (it = self->toBePopped.cbegin(); it != self->toBePopped.cend(); ++it) { + for (it = toBePopped.cbegin(); it != toBePopped.cend(); ++it) { const auto& [tag, version] = *it; TraceEvent("PlayIgnoredPop").detail("Tag", tag.toString()).detail("Version", version); ignoredPops.push_back(tLogPopCore(self, tag, version, logData)); @@ -1079,7 +1072,6 @@ ACTOR Future processPopRequests(TLogData* self, Reference logData wait(yield()); } } - self->toBePopped.clear(); wait(waitForAll(ignoredPops)); return Void(); } From 7e815ebb68f5c3405c1170af4d2ddc9442a56fb4 Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Thu, 3 Dec 2020 09:40:41 -0800 Subject: [PATCH 124/317] Added TLOG_POP_BATCH_SIZE knob --- fdbserver/Knobs.cpp | 1 + fdbserver/Knobs.h | 1 + fdbserver/TLogServer.actor.cpp | 3 +-- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index c44b708c3f..baf71de714 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -101,6 +101,7 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi init( PUSH_STATS_INTERVAL, 10.0 ); init( PUSH_STATS_SLOW_AMOUNT, 2 ); init( PUSH_STATS_SLOW_RATIO, 0.5 ); + init( TLOG_POP_BATCH_SIZE, 1000 ); if ( randomize && BUGGIFY ) TLOG_POP_BATCH_SIZE = 10; // disk snapshot max timeout, to be put in TLog, storage and coordinator nodes init( SNAP_CREATE_MAX_TIMEOUT, 300.0 ); diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 3e2e7d7166..c12c5d769b 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -99,6 +99,7 @@ public: double PUSH_STATS_INTERVAL; double PUSH_STATS_SLOW_AMOUNT; double PUSH_STATS_SLOW_RATIO; + int TLOG_POP_BATCH_SIZE; // Data distribution queue double HEALTH_POLL_TIME; diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index fadfe14867..7686c89eef 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -1054,7 +1054,6 @@ ACTOR Future tLogPopCore( TLogData* self, Tag inputTag, Version to, Refere } ACTOR Future processPopRequests(TLogData* self, Reference logData) { - state const size_t batchSize = 1000; state std::vector> ignoredPops; state std::map::const_iterator it; state int ignoredPopsPlayed = 0; @@ -1068,7 +1067,7 @@ ACTOR Future processPopRequests(TLogData* self, Reference logData const auto& [tag, version] = *it; TraceEvent("PlayIgnoredPop").detail("Tag", tag.toString()).detail("Version", version); ignoredPops.push_back(tLogPopCore(self, tag, version, logData)); - if (++ignoredPopsPlayed % batchSize == 0) { + if (++ignoredPopsPlayed % SERVER_KNOBS->TLOG_POP_BATCH_SIZE == 0) { wait(yield()); } } From 6184236c879705903e038bb34a942f1cbe5064bd Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Thu, 3 Dec 2020 09:51:32 -0800 Subject: [PATCH 125/317] Add code coverage macro to processPopRequests --- fdbserver/TLogServer.actor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index 7686c89eef..2b8eed2f53 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -1068,6 +1068,7 @@ ACTOR Future processPopRequests(TLogData* self, Reference logData TraceEvent("PlayIgnoredPop").detail("Tag", tag.toString()).detail("Version", version); ignoredPops.push_back(tLogPopCore(self, tag, version, logData)); if (++ignoredPopsPlayed % SERVER_KNOBS->TLOG_POP_BATCH_SIZE == 0) { + TEST(true); // Yielding while processing pop requests wait(yield()); } } From e9c31b4200cf0e23252a7a3d5b3dc72cec6e686f Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Thu, 3 Dec 2020 14:23:49 -0800 Subject: [PATCH 126/317] Move ignore pop logic from tLogPopCore to tLogPop --- fdbserver/TLogServer.actor.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index 2b8eed2f53..f8e9886427 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -1006,18 +1006,6 @@ ACTOR Future updatePersistentData( TLogData* self, Reference logD } ACTOR Future tLogPopCore( TLogData* self, Tag inputTag, Version to, Reference logData ) { - if (self->ignorePopRequest) { - TraceEvent(SevDebug, "IgnoringPopRequest").detail("IgnorePopDeadline", self->ignorePopDeadline); - - auto& v = self->toBePopped[inputTag]; - v = std::max(v, to); - - TraceEvent(SevDebug, "IgnoringPopRequest") - .detail("IgnorePopDeadline", self->ignorePopDeadline) - .detail("Tag", inputTag.toString()) - .detail("Version", to); - return Void(); - } state Version upTo = to; int8_t tagLocality = inputTag.locality; if (isPseudoLocality(tagLocality)) { @@ -1085,7 +1073,19 @@ ACTOR Future tLogPop( TLogData* self, TLogPopRequest req, ReferenceignorePopRequest) .detail("IgnorePopDeadline", self->ignorePopDeadline); } - wait(tLogPopCore(self, req.tag, req.to, logData)); + if (self->ignorePopRequest) { + TraceEvent(SevDebug, "IgnoringPopRequest").detail("IgnorePopDeadline", self->ignorePopDeadline); + + auto& v = self->toBePopped[req.tag]; + v = std::max(v, req.to); + + TraceEvent(SevDebug, "IgnoringPopRequest") + .detail("IgnorePopDeadline", self->ignorePopDeadline) + .detail("Tag", req.tag.toString()) + .detail("Version", req.to); + } else { + wait(tLogPopCore(self, req.tag, req.to, logData)); + } req.reply.send(Void()); return Void(); } From ac02329d7d181d4f3b2ef438a8d2900a1731bba4 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Thu, 12 Nov 2020 16:27:55 -0800 Subject: [PATCH 127/317] Added a command in fdbcli to allow user to manually trigger the detailed teams info loggings in data distributor --- fdbcli/fdbcli.actor.cpp | 25 +++++++++++++++++++++++++ fdbclient/SystemData.cpp | 2 ++ fdbclient/SystemData.h | 3 +++ fdbserver/DataDistribution.actor.cpp | 6 +++++- 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/fdbcli/fdbcli.actor.cpp b/fdbcli/fdbcli.actor.cpp index 9ff7efe7ef..2ce357920c 100644 --- a/fdbcli/fdbcli.actor.cpp +++ b/fdbcli/fdbcli.actor.cpp @@ -581,6 +581,9 @@ void initHelp() { CommandHelp("unlock ", "unlock the database with the provided lockUID", "Unlocks the database with the provided lockUID. This is a potentially dangerous operation, so the " "user will be asked to enter a passphrase to confirm their intent."); + helpMap["triggerDDTeamInfoLog"] = + CommandHelp("triggerDDTeamInfoLog", "trigger the data distributor teams logging", + "Trigger the data distributor to log detailed information about its teams."); hiddenCommands.insert("expensive_data_check"); hiddenCommands.insert("datadistribution"); @@ -1692,6 +1695,23 @@ int printStatusFromJSON( std::string const& jsonFileName ) { } } +ACTOR Future triggerDDTeamInfoLog(Database db) { + state ReadYourWritesTransaction tr(db); + loop { + try { + tr.setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); + tr.setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); + std::string v = deterministicRandom()->randomUniqueID().toString(); + tr.set(triggerDDTeamInfoPrintKey, v); + wait(tr.commit()); + printf("Triggered team info logging in data distribution.\n"); + return Void(); + } catch (Error& e) { + tr.onError(e); + } + } +} + ACTOR Future timeWarning( double when, const char* msg ) { wait( delay(when) ); fputs( msg, stderr ); @@ -2968,6 +2988,11 @@ ACTOR Future cli(CLIOptions opt, LineNoise* plinenoise) { continue; } + if (tokencmp(tokens[0], "triggerDDTeamInfoLog")) { + wait(triggerDDTeamInfoLog(db)); + continue; + } + if (tokencmp(tokens[0], "configure")) { bool err = wait(configure(db, tokens, db->getConnectionFile(), &linenoise, warn)); if (err) is_error = true; diff --git a/fdbclient/SystemData.cpp b/fdbclient/SystemData.cpp index e9f2e50ff6..b43396dc08 100644 --- a/fdbclient/SystemData.cpp +++ b/fdbclient/SystemData.cpp @@ -360,6 +360,8 @@ ProcessClass decodeProcessClassValue( ValueRef const& value ) { const KeyRangeRef configKeys( LiteralStringRef("\xff/conf/"), LiteralStringRef("\xff/conf0") ); const KeyRef configKeysPrefix = configKeys.begin; +const KeyRef triggerDDTeamInfoPrintKey(LiteralStringRef("\xff/triggerDDTeamInfoPrint")); + const KeyRangeRef excludedServersKeys( LiteralStringRef("\xff/conf/excluded/"), LiteralStringRef("\xff/conf/excluded0") ); const KeyRef excludedServersPrefix = excludedServersKeys.begin; const KeyRef excludedServersVersionKey = LiteralStringRef("\xff/conf/excluded"); diff --git a/fdbclient/SystemData.h b/fdbclient/SystemData.h index 139082e02a..7b90cdd7c2 100644 --- a/fdbclient/SystemData.h +++ b/fdbclient/SystemData.h @@ -122,6 +122,9 @@ UID decodeProcessClassKeyOld( KeyRef const& key ); extern const KeyRangeRef configKeys; extern const KeyRef configKeysPrefix; +// Change the value of this key to anything and that will trigger detailed data distribution team info log. +extern const KeyRef triggerDDTeamInfoPrintKey; + // "\xff/conf/excluded/1.2.3.4" := "" // "\xff/conf/excluded/1.2.3.4:4000" := "" // These are inside configKeysPrefix since they represent a form of configuration and they are convenient diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index 4efc299519..03f7a745b2 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -2604,8 +2604,12 @@ ACTOR Future printSnapshotTeamsInfo(Reference self) { state int traceEventsPrinted = 0; state std::vector serverIDs; state double lastPrintTime = 0; + state ReadYourWritesTransaction tr(self->cx); loop { - wait(self->printDetailedTeamsInfo.onTrigger()); + tr.setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); + state Future watchFuture = tr.watch(triggerDDTeamInfoPrintKey); + wait(tr.commit()); + wait(self->printDetailedTeamsInfo.onTrigger() || watchFuture); if (now() - lastPrintTime < SERVER_KNOBS->DD_TEAMS_INFO_PRINT_INTERVAL) { continue; } From 9505d77ddd37c1d3a9835cdafca56d6766819a75 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Fri, 13 Nov 2020 10:21:31 -0800 Subject: [PATCH 128/317] Update fdbcli/fdbcli.actor.cpp Co-authored-by: Andrew Noyes <63815641+sfc-gh-anoyes@users.noreply.github.com> --- fdbcli/fdbcli.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbcli/fdbcli.actor.cpp b/fdbcli/fdbcli.actor.cpp index 2ce357920c..2b635e6f4e 100644 --- a/fdbcli/fdbcli.actor.cpp +++ b/fdbcli/fdbcli.actor.cpp @@ -1707,7 +1707,7 @@ ACTOR Future triggerDDTeamInfoLog(Database db) { printf("Triggered team info logging in data distribution.\n"); return Void(); } catch (Error& e) { - tr.onError(e); + wait(tr.onError(e)); } } } From 78503db523750625abbcab2066d62c48a285cf35 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Tue, 17 Nov 2020 10:46:03 -0800 Subject: [PATCH 129/317] Reset and retry transaction errors --- fdbserver/DataDistribution.actor.cpp | 317 ++++++++++++++------------- 1 file changed, 162 insertions(+), 155 deletions(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index 03f7a745b2..531801c06a 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -2606,180 +2606,187 @@ ACTOR Future printSnapshotTeamsInfo(Reference self) { state double lastPrintTime = 0; state ReadYourWritesTransaction tr(self->cx); loop { - tr.setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); - state Future watchFuture = tr.watch(triggerDDTeamInfoPrintKey); - wait(tr.commit()); - wait(self->printDetailedTeamsInfo.onTrigger() || watchFuture); - if (now() - lastPrintTime < SERVER_KNOBS->DD_TEAMS_INFO_PRINT_INTERVAL) { - continue; - } - lastPrintTime = now(); + try { + tr.setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); + state Future watchFuture = tr.watch(triggerDDTeamInfoPrintKey); + wait(tr.commit()); + wait(self->printDetailedTeamsInfo.onTrigger() || watchFuture); + tr.reset(); + if (now() - lastPrintTime < SERVER_KNOBS->DD_TEAMS_INFO_PRINT_INTERVAL) { + continue; + } + lastPrintTime = now(); - traceEventsPrinted = 0; + traceEventsPrinted = 0; - double snapshotStart = now(); + double snapshotStart = now(); - configuration = self->configuration; - server_info = self->server_info; - teams = self->teams; - machine_info = self->machine_info; - machineTeams = self->machineTeams; - // internedLocalityRecordKeyNameStrings = self->machineLocalityMap._keymap->_lookuparray; - // machineLocalityMapEntryArraySize = self->machineLocalityMap.size(); - // machineLocalityMapRecordArray = self->machineLocalityMap.getRecordArray(); - std::vector _uids = self->machineLocalityMap.getObjects(); - serverIDs = _uids; + configuration = self->configuration; + server_info = self->server_info; + teams = self->teams; + machine_info = self->machine_info; + machineTeams = self->machineTeams; + // internedLocalityRecordKeyNameStrings = self->machineLocalityMap._keymap->_lookuparray; + // machineLocalityMapEntryArraySize = self->machineLocalityMap.size(); + // machineLocalityMapRecordArray = self->machineLocalityMap.getRecordArray(); + std::vector _uids = self->machineLocalityMap.getObjects(); + serverIDs = _uids; - auto const& keys = self->server_status.getKeys(); - for (auto const& key : keys) { - server_status.emplace(key, self->server_status.get(key)); - } + auto const& keys = self->server_status.getKeys(); + for (auto const& key : keys) { + server_status.emplace(key, self->server_status.get(key)); + } - TraceEvent("DDPrintSnapshotTeasmInfo", self->distributorId) - .detail("SnapshotSpeed", now() - snapshotStart) - .detail("Primary", self->primary); + TraceEvent("DDPrintSnapshotTeasmInfo", self->distributorId) + .detail("SnapshotSpeed", now() - snapshotStart) + .detail("Primary", self->primary); - // Print to TraceEvents - TraceEvent("DDConfig", self->distributorId) - .detail("StorageTeamSize", configuration.storageTeamSize) - .detail("DesiredTeamsPerServer", SERVER_KNOBS->DESIRED_TEAMS_PER_SERVER) - .detail("MaxTeamsPerServer", SERVER_KNOBS->MAX_TEAMS_PER_SERVER) - .detail("Primary", self->primary); + // Print to TraceEvents + TraceEvent("DDConfig", self->distributorId) + .detail("StorageTeamSize", configuration.storageTeamSize) + .detail("DesiredTeamsPerServer", SERVER_KNOBS->DESIRED_TEAMS_PER_SERVER) + .detail("MaxTeamsPerServer", SERVER_KNOBS->MAX_TEAMS_PER_SERVER) + .detail("Primary", self->primary); - TraceEvent("ServerInfo", self->distributorId) - .detail("Size", server_info.size()) - .detail("Primary", self->primary); - state int i; - state std::map>::iterator server = server_info.begin(); - for (i = 0; i < server_info.size(); i++) { TraceEvent("ServerInfo", self->distributorId) - .detail("ServerInfoIndex", i) - .detail("ServerID", server->first.toString()) - .detail("ServerTeamOwned", server->second->teams.size()) - .detail("MachineID", server->second->machine->machineID.contents().toString()) + .detail("Size", server_info.size()) .detail("Primary", self->primary); - server++; - if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { - wait(yield()); - } - } - - server = server_info.begin(); - for (i = 0; i < server_info.size(); i++) { - const UID& uid = server->first; - TraceEvent("ServerStatus", self->distributorId) - .detail("ServerUID", uid) - .detail("Healthy", !server_status.at(uid).isUnhealthy()) - .detail("MachineIsValid", server_info[uid]->machine.isValid()) - .detail("MachineTeamSize", - server_info[uid]->machine.isValid() ? server_info[uid]->machine->machineTeams.size() : -1) - .detail("Primary", self->primary); - server++; - if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { - wait(yield()); - } - } - - TraceEvent("ServerTeamInfo", self->distributorId).detail("Size", teams.size()).detail("Primary", self->primary); - for (i = 0; i < teams.size(); i++) { - const auto& team = teams[i]; - TraceEvent("ServerTeamInfo", self->distributorId) - .detail("TeamIndex", i) - .detail("Healthy", team->isHealthy()) - .detail("TeamSize", team->size()) - .detail("MemberIDs", team->getServerIDsStr()) - .detail("Primary", self->primary); - if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { - wait(yield()); - } - } - - TraceEvent("MachineInfo", self->distributorId) - .detail("Size", machine_info.size()) - .detail("Primary", self->primary); - state std::map, Reference>::iterator machine = machine_info.begin(); - state bool isMachineHealthy = false; - for (i = 0; i < machine_info.size(); i++) { - Reference _machine = machine->second; - if (!_machine.isValid() || machine_info.find(_machine->machineID) == machine_info.end() || - _machine->serversOnMachine.empty()) { - isMachineHealthy = false; - } - - // Healthy machine has at least one healthy server - for (auto& server : _machine->serversOnMachine) { - if (!server_status.at(server->id).isUnhealthy()) { - isMachineHealthy = true; + state int i; + state std::map>::iterator server = server_info.begin(); + for (i = 0; i < server_info.size(); i++) { + TraceEvent("ServerInfo", self->distributorId) + .detail("ServerInfoIndex", i) + .detail("ServerID", server->first.toString()) + .detail("ServerTeamOwned", server->second->teams.size()) + .detail("MachineID", server->second->machine->machineID.contents().toString()) + .detail("Primary", self->primary); + server++; + if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { + wait(yield()); + } + } + + server = server_info.begin(); + for (i = 0; i < server_info.size(); i++) { + const UID& uid = server->first; + TraceEvent("ServerStatus", self->distributorId) + .detail("ServerUID", uid) + .detail("Healthy", !server_status.at(uid).isUnhealthy()) + .detail("MachineIsValid", server_info[uid]->machine.isValid()) + .detail("MachineTeamSize", + server_info[uid]->machine.isValid() ? server_info[uid]->machine->machineTeams.size() : -1) + .detail("Primary", self->primary); + server++; + if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { + wait(yield()); + } + } + + TraceEvent("ServerTeamInfo", self->distributorId) + .detail("Size", teams.size()) + .detail("Primary", self->primary); + for (i = 0; i < teams.size(); i++) { + const auto& team = teams[i]; + TraceEvent("ServerTeamInfo", self->distributorId) + .detail("TeamIndex", i) + .detail("Healthy", team->isHealthy()) + .detail("TeamSize", team->size()) + .detail("MemberIDs", team->getServerIDsStr()) + .detail("Primary", self->primary); + if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { + wait(yield()); } } - isMachineHealthy = false; TraceEvent("MachineInfo", self->distributorId) - .detail("MachineInfoIndex", i) - .detail("Healthy", isMachineHealthy) - .detail("MachineID", machine->first.contents().toString()) - .detail("MachineTeamOwned", machine->second->machineTeams.size()) - .detail("ServerNumOnMachine", machine->second->serversOnMachine.size()) - .detail("ServersID", machine->second->getServersIDStr()) + .detail("Size", machine_info.size()) .detail("Primary", self->primary); - machine++; - if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { - wait(yield()); - } - } + state std::map, Reference>::iterator machine = machine_info.begin(); + state bool isMachineHealthy = false; + for (i = 0; i < machine_info.size(); i++) { + Reference _machine = machine->second; + if (!_machine.isValid() || machine_info.find(_machine->machineID) == machine_info.end() || + _machine->serversOnMachine.empty()) { + isMachineHealthy = false; + } + + // Healthy machine has at least one healthy server + for (auto& server : _machine->serversOnMachine) { + if (!server_status.at(server->id).isUnhealthy()) { + isMachineHealthy = true; + } + } + + isMachineHealthy = false; + TraceEvent("MachineInfo", self->distributorId) + .detail("MachineInfoIndex", i) + .detail("Healthy", isMachineHealthy) + .detail("MachineID", machine->first.contents().toString()) + .detail("MachineTeamOwned", machine->second->machineTeams.size()) + .detail("ServerNumOnMachine", machine->second->serversOnMachine.size()) + .detail("ServersID", machine->second->getServersIDStr()) + .detail("Primary", self->primary); + machine++; + if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { + wait(yield()); + } + } - TraceEvent("MachineTeamInfo", self->distributorId) - .detail("Size", machineTeams.size()) - .detail("Primary", self->primary); - for (i = 0; i < machineTeams.size(); i++) { - const auto& team = machineTeams[i]; TraceEvent("MachineTeamInfo", self->distributorId) - .detail("TeamIndex", i) - .detail("MachineIDs", team->getMachineIDsStr()) - .detail("ServerTeams", team->serverTeams.size()) + .detail("Size", machineTeams.size()) .detail("Primary", self->primary); - if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { - wait(yield()); + for (i = 0; i < machineTeams.size(); i++) { + const auto& team = machineTeams[i]; + TraceEvent("MachineTeamInfo", self->distributorId) + .detail("TeamIndex", i) + .detail("MachineIDs", team->getMachineIDsStr()) + .detail("ServerTeams", team->serverTeams.size()) + .detail("Primary", self->primary); + if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { + wait(yield()); + } } + + // TODO: re-enable the following logging or remove them. + // TraceEvent("LocalityRecordKeyName", self->distributorId) + // .detail("Size", internedLocalityRecordKeyNameStrings.size()) + // .detail("Primary", self->primary); + // for (i = 0; i < internedLocalityRecordKeyNameStrings.size(); i++) { + // TraceEvent("LocalityRecordKeyIndexName", self->distributorId) + // .detail("KeyIndex", i) + // .detail("KeyName", internedLocalityRecordKeyNameStrings[i]) + // .detail("Primary", self->primary); + // if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { + // wait(yield()); + // } + // } + + // TraceEvent("MachineLocalityMap", self->distributorId) + // .detail("Size", machineLocalityMapEntryArraySize) + // .detail("Primary", self->primary); + // for (i = 0; i < serverIDs.size(); i++) { + // const auto& serverID = serverIDs[i]; + // Reference record = machineLocalityMapRecordArray[i]; + // if (record.isValid()) { + // TraceEvent("MachineLocalityMap", self->distributorId) + // .detail("LocalityIndex", i) + // .detail("UID", serverID->toString()) + // .detail("LocalityRecord", record->toString()) + // .detail("Primary", self->primary); + // } else { + // TraceEvent("MachineLocalityMap", self->distributorId) + // .detail("LocalityIndex", i) + // .detail("UID", serverID->toString()) + // .detail("LocalityRecord", "[NotFound]") + // .detail("Primary", self->primary); + // } + // if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { + // wait(yield()); + // } + // } + } catch (Error& e) { + wait(tr.onError(e)); } - - // TODO: re-enable the following logging or remove them. - // TraceEvent("LocalityRecordKeyName", self->distributorId) - // .detail("Size", internedLocalityRecordKeyNameStrings.size()) - // .detail("Primary", self->primary); - // for (i = 0; i < internedLocalityRecordKeyNameStrings.size(); i++) { - // TraceEvent("LocalityRecordKeyIndexName", self->distributorId) - // .detail("KeyIndex", i) - // .detail("KeyName", internedLocalityRecordKeyNameStrings[i]) - // .detail("Primary", self->primary); - // if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { - // wait(yield()); - // } - // } - - // TraceEvent("MachineLocalityMap", self->distributorId) - // .detail("Size", machineLocalityMapEntryArraySize) - // .detail("Primary", self->primary); - // for (i = 0; i < serverIDs.size(); i++) { - // const auto& serverID = serverIDs[i]; - // Reference record = machineLocalityMapRecordArray[i]; - // if (record.isValid()) { - // TraceEvent("MachineLocalityMap", self->distributorId) - // .detail("LocalityIndex", i) - // .detail("UID", serverID->toString()) - // .detail("LocalityRecord", record->toString()) - // .detail("Primary", self->primary); - // } else { - // TraceEvent("MachineLocalityMap", self->distributorId) - // .detail("LocalityIndex", i) - // .detail("UID", serverID->toString()) - // .detail("LocalityRecord", "[NotFound]") - // .detail("Primary", self->primary); - // } - // if (++traceEventsPrinted % SERVER_KNOBS->DD_TEAMS_INFO_PRINT_YIELD_COUNT == 0) { - // wait(yield()); - // } - // } } } From da22308025ae5b64110d1583a95ede5dc23c5188 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Thu, 3 Dec 2020 14:49:23 -0800 Subject: [PATCH 130/317] Change the new command to be all lower case to follow the convention. Updated the command line interface documentation and the release notes for 6.2.29. --- documentation/sphinx/source/command-line-interface.rst | 5 +++++ .../sphinx/source/release-notes/release-notes-620.rst | 1 + fdbcli/fdbcli.actor.cpp | 6 +++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/documentation/sphinx/source/command-line-interface.rst b/documentation/sphinx/source/command-line-interface.rst index e91147f19e..59f58683b2 100644 --- a/documentation/sphinx/source/command-line-interface.rst +++ b/documentation/sphinx/source/command-line-interface.rst @@ -294,6 +294,11 @@ status json ``status json`` will provide the cluster status in its JSON format. For a detailed description of this format, see :doc:`mr-status`. +triggerddteaminfolog +------ + +The ``triggerddteaminfolog`` command would trigger the data distributor to log very detailed teams information into trace event logs. + unlock ------ diff --git a/documentation/sphinx/source/release-notes/release-notes-620.rst b/documentation/sphinx/source/release-notes/release-notes-620.rst index 1d74690caf..f4017daaf1 100644 --- a/documentation/sphinx/source/release-notes/release-notes-620.rst +++ b/documentation/sphinx/source/release-notes/release-notes-620.rst @@ -8,6 +8,7 @@ Release Notes ====== * Fix invalid memory access on data distributor when snapshotting large clusters. `(PR #4076) `_ * Add human-readable DateTime to trace events `(PR #4087) `_ +* Add a command in fdbcli to manually trigger the detailed teams information loggings in data distribution. `(PR #4060) `_ 6.2.28 ====== diff --git a/fdbcli/fdbcli.actor.cpp b/fdbcli/fdbcli.actor.cpp index 2b635e6f4e..f34534f7b3 100644 --- a/fdbcli/fdbcli.actor.cpp +++ b/fdbcli/fdbcli.actor.cpp @@ -581,8 +581,8 @@ void initHelp() { CommandHelp("unlock ", "unlock the database with the provided lockUID", "Unlocks the database with the provided lockUID. This is a potentially dangerous operation, so the " "user will be asked to enter a passphrase to confirm their intent."); - helpMap["triggerDDTeamInfoLog"] = - CommandHelp("triggerDDTeamInfoLog", "trigger the data distributor teams logging", + helpMap["triggerddteaminfolog"] = + CommandHelp("triggerddteaminfolog", "trigger the data distributor teams logging", "Trigger the data distributor to log detailed information about its teams."); hiddenCommands.insert("expensive_data_check"); @@ -2988,7 +2988,7 @@ ACTOR Future cli(CLIOptions opt, LineNoise* plinenoise) { continue; } - if (tokencmp(tokens[0], "triggerDDTeamInfoLog")) { + if (tokencmp(tokens[0], "triggerddteaminfolog")) { wait(triggerDDTeamInfoLog(db)); continue; } From e499e3ad70141b2dd6d1ce3cacc69f18f4e049f4 Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Thu, 3 Dec 2020 15:06:33 -0800 Subject: [PATCH 131/317] Remove unneeded knob change for workloads --- fdbserver/workloads/AtomicRestore.actor.cpp | 4 ---- fdbserver/workloads/AtomicSwitchover.actor.cpp | 5 ----- fdbserver/workloads/BackupCorrectness.actor.cpp | 2 -- fdbserver/workloads/BackupToDBAbort.actor.cpp | 6 ------ fdbserver/workloads/BackupToDBCorrectness.actor.cpp | 5 ----- fdbserver/workloads/BackupToDBUpgrade.actor.cpp | 5 ----- 6 files changed, 27 deletions(-) diff --git a/fdbserver/workloads/AtomicRestore.actor.cpp b/fdbserver/workloads/AtomicRestore.actor.cpp index bcd1e78d25..4537970f7a 100644 --- a/fdbserver/workloads/AtomicRestore.actor.cpp +++ b/fdbserver/workloads/AtomicRestore.actor.cpp @@ -61,9 +61,6 @@ struct AtomicRestoreWorkload : TestWorkload { ACTOR static Future _start(Database cx, AtomicRestoreWorkload* self) { state FileBackupAgent backupAgent; - // Disable proxy rejection - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; - wait( delay(self->startAfter * deterministicRandom()->random01()) ); TraceEvent("AtomicRestore_Start"); @@ -108,7 +105,6 @@ struct AtomicRestoreWorkload : TestWorkload { } TraceEvent("AtomicRestore_Done"); - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; return Void(); } }; diff --git a/fdbserver/workloads/AtomicSwitchover.actor.cpp b/fdbserver/workloads/AtomicSwitchover.actor.cpp index dc36a82a86..02fcb77866 100644 --- a/fdbserver/workloads/AtomicSwitchover.actor.cpp +++ b/fdbserver/workloads/AtomicSwitchover.actor.cpp @@ -152,9 +152,6 @@ struct AtomicSwitchoverWorkload : TestWorkload { state DatabaseBackupAgent backupAgent(cx); state DatabaseBackupAgent restoreAgent(self->extraDB); - // Disable proxy rejection to avoid ApplyMutationsError - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; - TraceEvent("AS_Wait1"); wait(success( backupAgent.waitBackup(self->extraDB, BackupAgentBase::getDefaultTag(), false) )); TraceEvent("AS_Ready1"); @@ -180,8 +177,6 @@ struct AtomicSwitchoverWorkload : TestWorkload { g_simulator.drAgents = ISimulator::NoBackupAgents; } - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; - return Void(); } }; diff --git a/fdbserver/workloads/BackupCorrectness.actor.cpp b/fdbserver/workloads/BackupCorrectness.actor.cpp index bf318055c0..ddf7e879f3 100644 --- a/fdbserver/workloads/BackupCorrectness.actor.cpp +++ b/fdbserver/workloads/BackupCorrectness.actor.cpp @@ -364,7 +364,6 @@ struct BackupAndRestoreCorrectnessWorkload : TestWorkload { state FileBackupAgent backupAgent; state Future extraBackup; state bool extraTasks = false; - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; TraceEvent("BARW_Arguments").detail("BackupTag", printable(self->backupTag)).detail("PerformRestore", self->performRestore) .detail("BackupAfter", self->backupAfter).detail("RestoreAfter", self->restoreAfter) .detail("AbortAndRestartAfter", self->abortAndRestartAfter).detail("DifferentialAfter", self->stopDifferentialAfter); @@ -662,7 +661,6 @@ struct BackupAndRestoreCorrectnessWorkload : TestWorkload { TraceEvent(SevError, "BackupAndRestoreCorrectness").error(e).GetLastError(); throw; } - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; return Void(); } }; diff --git a/fdbserver/workloads/BackupToDBAbort.actor.cpp b/fdbserver/workloads/BackupToDBAbort.actor.cpp index 60c73620b7..7d242360ec 100644 --- a/fdbserver/workloads/BackupToDBAbort.actor.cpp +++ b/fdbserver/workloads/BackupToDBAbort.actor.cpp @@ -22,8 +22,6 @@ #include "fdbclient/ManagementAPI.actor.h" #include "fdbclient/NativeAPI.actor.h" #include "fdbserver/workloads/workloads.actor.h" -#include "fdbserver/Knobs.h" - #include "flow/actorcompiler.h" // This must be the last #include. struct BackupToDBAbort : TestWorkload { @@ -74,9 +72,6 @@ struct BackupToDBAbort : TestWorkload { ACTOR static Future _start(BackupToDBAbort* self, Database cx) { state DatabaseBackupAgent backupAgent(cx); - // Disable proxy rejection to avoid ApplyMutationsError - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; - TraceEvent("BDBA_Start").detail("Delay", self->abortDelay); wait(delay(self->abortDelay)); TraceEvent("BDBA_Wait"); @@ -94,7 +89,6 @@ struct BackupToDBAbort : TestWorkload { g_simulator.drAgents = ISimulator::NoBackupAgents; } - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; return Void(); } diff --git a/fdbserver/workloads/BackupToDBCorrectness.actor.cpp b/fdbserver/workloads/BackupToDBCorrectness.actor.cpp index 11fd9642d9..bb1ced25eb 100644 --- a/fdbserver/workloads/BackupToDBCorrectness.actor.cpp +++ b/fdbserver/workloads/BackupToDBCorrectness.actor.cpp @@ -442,9 +442,6 @@ struct BackupToDBCorrectnessWorkload : TestWorkload { TraceEvent("BARW_Arguments").detail("BackupTag", printable(self->backupTag)).detail("BackupAfter", self->backupAfter) .detail("AbortAndRestartAfter", self->abortAndRestartAfter).detail("DifferentialAfter", self->stopDifferentialAfter); - // Disable proxy rejection to avoid ApplyMutationsError - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; - state UID randomID = nondeterministicRandom()->randomUniqueID(); // Increment the backup agent requets @@ -578,8 +575,6 @@ struct BackupToDBCorrectnessWorkload : TestWorkload { throw; } - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; - return Void(); } }; diff --git a/fdbserver/workloads/BackupToDBUpgrade.actor.cpp b/fdbserver/workloads/BackupToDBUpgrade.actor.cpp index 3a324e6b1f..3f2afcc717 100644 --- a/fdbserver/workloads/BackupToDBUpgrade.actor.cpp +++ b/fdbserver/workloads/BackupToDBUpgrade.actor.cpp @@ -346,9 +346,6 @@ struct BackupToDBUpgradeWorkload : TestWorkload { state UID logUid; state Version commitVersion; - // Disable proxy rejection to avoid ApplyMutationsError - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = false; - state Future stopDifferential = delay(self->stopDifferentialAfter); state Future waitUpgrade = backupAgent.waitUpgradeToLatestDrVersion(self->extraDB, self->backupTag); wait(success(stopDifferential) && success(waitUpgrade)); @@ -465,8 +462,6 @@ struct BackupToDBUpgradeWorkload : TestWorkload { throw; } - const_cast(SERVER_KNOBS)->PROXY_REJECT_BATCH_QUEUED_TOO_LONG = true; - return Void(); } }; From 2162fd1421ba68d2d81ae381f35df5325e0d5639 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Thu, 3 Dec 2020 15:19:03 -0800 Subject: [PATCH 132/317] Fix the doc build failure --- documentation/sphinx/source/command-line-interface.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/sphinx/source/command-line-interface.rst b/documentation/sphinx/source/command-line-interface.rst index 59f58683b2..58b6b76e95 100644 --- a/documentation/sphinx/source/command-line-interface.rst +++ b/documentation/sphinx/source/command-line-interface.rst @@ -295,7 +295,7 @@ status json ``status json`` will provide the cluster status in its JSON format. For a detailed description of this format, see :doc:`mr-status`. triggerddteaminfolog ------- +-------------------- The ``triggerddteaminfolog`` command would trigger the data distributor to log very detailed teams information into trace event logs. From 50dda323f81abd76ebdd324854af872a2599557d Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Fri, 4 Dec 2020 13:46:07 -0800 Subject: [PATCH 133/317] Add a test for \xff\xff/worker_interfaces --- .../workloads/SpecialKeySpaceCorrectness.actor.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/fdbserver/workloads/SpecialKeySpaceCorrectness.actor.cpp b/fdbserver/workloads/SpecialKeySpaceCorrectness.actor.cpp index c370da829a..96b90b5a7e 100644 --- a/fdbserver/workloads/SpecialKeySpaceCorrectness.actor.cpp +++ b/fdbserver/workloads/SpecialKeySpaceCorrectness.actor.cpp @@ -365,6 +365,20 @@ struct SpecialKeySpaceCorrectnessWorkload : TestWorkload { ASSERT(e.code() == error_code_key_outside_legal_range); tx->reset(); } + // test case when registered range is the same as the underlying module + try { + state Standalone result = wait(tx->getRange(KeyRangeRef(LiteralStringRef("\xff\xff/worker_interfaces/"), + LiteralStringRef("\xff\xff/worker_interfaces0")), + CLIENT_KNOBS->TOO_MANY)); + // We should have at least 1 process in the cluster + ASSERT(result.size()); + state KeyValueRef entry = deterministicRandom()->randomChoice(result); + Optional singleRes = wait(tx->get(entry.key)); + ASSERT(singleRes.present() && singleRes.get() == entry.value); + tx->reset(); + } catch (Error& e) { + wait(tx->onError(e)); + } return Void(); } From 5ad08782546be042d8d53511ba6e72df995d4dfd Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Fri, 4 Dec 2020 14:27:49 -0800 Subject: [PATCH 134/317] Update fdbserver/MasterProxyServer.actor.cpp Co-authored-by: A.J. Beamon --- fdbserver/MasterProxyServer.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 0615ca26c4..bce4b056d4 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -640,7 +640,7 @@ ACTOR Future commitBatch( /////// Phase 1: Pre-resolution processing (CPU bound except waiting for a version # which is separately pipelined and *should* be available by now (unless empty commit); ordered; currently atomic but could yield) TEST(self->latestLocalCommitBatchResolving.get() < localBatchNumber-1); // Queuing pre-resolution commit processing wait(self->latestLocalCommitBatchResolving.whenAtLeast(localBatchNumber-1)); - double queuingDelay = g_network->timer() - timeStart; + double queuingDelay = g_network->now() - timeStart; if ((queuingDelay > (double)SERVER_KNOBS->MAX_READ_TRANSACTION_LIFE_VERSIONS / SERVER_KNOBS->VERSIONS_PER_SECOND || (g_network->isSimulated() && BUGGIFY_WITH_PROB(0.01))) && SERVER_KNOBS->PROXY_REJECT_BATCH_QUEUED_TOO_LONG && canReject(trs)) { From e5cad0f0772647839f760400fce2481581fb9907 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Fri, 4 Dec 2020 14:58:40 -0800 Subject: [PATCH 135/317] Fix the bug if boundary same as range and add comments --- fdbclient/SpecialKeySpace.actor.cpp | 31 +++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/fdbclient/SpecialKeySpace.actor.cpp b/fdbclient/SpecialKeySpace.actor.cpp index e15898695c..63f2269341 100644 --- a/fdbclient/SpecialKeySpace.actor.cpp +++ b/fdbclient/SpecialKeySpace.actor.cpp @@ -115,27 +115,46 @@ ACTOR Future normalizeKeySelectorActor(SpecialKeySpace* sks, ReadYourWrite KeyRangeRef boundary, int* actualOffset, Standalone* result, Optional>* cache) { + // If offset < 1, where we need to move left, iter points to the range containing at least one smaller key + // (It's a wasting of time to walking through the range whose begin key is same as ks->key) + // (rangeContainingKeyBefore itself handles the case where ks->key == Key()) + // Otherwise, we only need to move right if offset > 1, iter points to the range containing the key + // Since boundary.end is always a key in the RangeMap, it is always safe to move right state RangeMap::Iterator iter = ks->offset < 1 ? sks->getImpls().rangeContainingKeyBefore(ks->getKey()) : sks->getImpls().rangeContaining(ks->getKey()); - while ((ks->offset < 1 && iter->begin() > boundary.begin) || (ks->offset > 1 && iter->begin() < boundary.end)) { + while ((ks->offset < 1 && iter->begin() >= boundary.begin) || (ks->offset > 1 && iter->begin() < boundary.end)) { if (iter->value() != nullptr) { wait(moveKeySelectorOverRangeActor(iter->value(), ryw, ks, cache)); } - ks->offset < 1 ? --iter : ++iter; + // Check if we can still move the iterator left + if (ks->offset < 1) { + if (iter == sks->getImpls().ranges().begin()) { + break; + } else { + --iter; + } + } else if (ks->offset > 1) { + // Always safe to move right + ++iter; + } } *actualOffset = ks->offset; - if (iter->begin() == boundary.begin || iter->begin() == boundary.end) ks->setKey(iter->begin()); if (!ks->isFirstGreaterOrEqual()) { - // The Key Selector clamps up to the legal key space TraceEvent(SevDebug, "ReadToBoundary") .detail("TerminateKey", ks->getKey()) .detail("TerminateOffset", ks->offset); - if (ks->offset < 1) + // If still not normalized after moving to the boundary, + // let key selector clamp up to the boundary + if (ks->offset < 1) { result->readToBegin = true; - else + ks->setKey(boundary.begin); + } + else { result->readThroughEnd = true; + ks->setKey(boundary.end); + } ks->offset = 1; } return Void(); From bf59ab684e0cdf78304639f2e9489531566e0cf4 Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Fri, 4 Dec 2020 16:35:46 -0800 Subject: [PATCH 136/317] Revert change to forceRecovery --- fdbserver/MasterProxyServer.actor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index bce4b056d4..04ffbec49c 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -859,6 +859,7 @@ ACTOR Future commitBatch( if(firstStateMutations) { ASSERT(committed[t] == ConflictBatch::TransactionCommitted); firstStateMutations = false; + forceRecovery = false; } } if (forceRecovery) { From d97523a966fb32945f4748b2aa161a01685a28e6 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Sun, 6 Dec 2020 14:04:16 -0800 Subject: [PATCH 137/317] Fix typo --- fdbclient/SpecialKeySpace.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbclient/SpecialKeySpace.actor.cpp b/fdbclient/SpecialKeySpace.actor.cpp index 63f2269341..752b9243c6 100644 --- a/fdbclient/SpecialKeySpace.actor.cpp +++ b/fdbclient/SpecialKeySpace.actor.cpp @@ -116,7 +116,7 @@ ACTOR Future normalizeKeySelectorActor(SpecialKeySpace* sks, ReadYourWrite Standalone* result, Optional>* cache) { // If offset < 1, where we need to move left, iter points to the range containing at least one smaller key - // (It's a wasting of time to walking through the range whose begin key is same as ks->key) + // (It's a wasting of time to walk through the range whose begin key is same as ks->key) // (rangeContainingKeyBefore itself handles the case where ks->key == Key()) // Otherwise, we only need to move right if offset > 1, iter points to the range containing the key // Since boundary.end is always a key in the RangeMap, it is always safe to move right From 75836d6114bcc7ca67728b807b748ce6cccfac8f Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Mon, 7 Dec 2020 09:01:19 -0800 Subject: [PATCH 138/317] Fix double counting of range reads in TransactionMetrics --- fdbclient/NativeAPI.actor.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/fdbclient/NativeAPI.actor.cpp b/fdbclient/NativeAPI.actor.cpp index 0be7548c76..da4c362378 100644 --- a/fdbclient/NativeAPI.actor.cpp +++ b/fdbclient/NativeAPI.actor.cpp @@ -1902,7 +1902,6 @@ ACTOR Future> getRange( Database cx, ReferencetransactionPhysicalReads; - ++cx->transactionGetRangeRequests; state GetKeyValuesReply rep; try { if (CLIENT_BUGGIFY) { From 207a96ad5a3e315f854a6d1fec54b746b55ee0ef Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Mon, 30 Nov 2020 16:18:30 -0800 Subject: [PATCH 139/317] Add boringssl and ctest2junit to docker; move environment-independent CCACHE flags from Dockerfile.devel to Dockerfile --- build/Dockerfile | 43 ++++++++++++++++++++++++++++++++++++--- build/Dockerfile.devel | 10 ++++----- build/docker-compose.yaml | 2 +- 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/build/Dockerfile b/build/Dockerfile index b230eb4de4..4ced205435 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -21,7 +21,7 @@ RUN yum -y install devtoolset-8-8.1-1.el6 java-1.8.0-openjdk-devel \ devtoolset-8-libubsan-devel devtoolset-8-libasan-devel devtoolset-8-valgrind-devel \ rh-python36-python-devel rh-ruby24 golang python27 rpm-build \ mono-core debbuild python-pip dos2unix valgrind-devel ccache \ - distcc wget git lz4 lz4-devel lz4-static &&\ + distcc wget libxslt git lz4 lz4-devel lz4-static &&\ pip install boto3==1.1.1 USER root @@ -51,6 +51,8 @@ RUN curl -L https://github.com/Kitware/CMake/releases/download/v3.13.4/cmake-3.1 # install Ninja RUN cd /tmp && curl -L https://github.com/ninja-build/ninja/archive/v1.9.0.zip -o ninja.zip &&\ + echo "8e2e654a418373f10c22e4cc9bdbe9baeca8527ace8d572e0b421e9d9b85b7ef ninja.zip" > /tmp/ninja-sha.txt &&\ + sha256sum -c /tmp/ninja-sha.txt &&\ unzip ninja.zip && cd ninja-1.9.0 && scl enable devtoolset-8 -- ./configure.py --bootstrap && cp ninja /usr/bin &&\ cd .. && rm -rf ninja-1.9.0 ninja.zip @@ -67,13 +69,48 @@ RUN cd /opt/ && curl -L https://github.com/facebook/rocksdb/archive/v6.10.1.tar. echo "d573d2f15cdda883714f7e0bc87b814a8d4a53a82edde558f08f940e905541ee rocksdb.tar.gz" > rocksdb-sha.txt &&\ sha256sum -c rocksdb-sha.txt && tar xf rocksdb.tar.gz && rm -rf rocksdb.tar.gz rocksdb-sha.txt +RUN cd /opt/ && curl -L https://github.com/manticoresoftware/manticoresearch/raw/master/misc/junit/ctest2junit.xsl -o ctest2junit.xsl + +# Setting this environment variable switches from OpenSSL to BoringSSL +#ENV OPENSSL_ROOT_DIR=/opt/boringssl + +# install BoringSSL: TODO: They don't seem to have releases(?) I picked today's master SHA. +RUN cd /opt &&\ + git clone https://boringssl.googlesource.com/boringssl &&\ + cd boringssl &&\ + git checkout e796cc65025982ed1fb9ef41b3f74e8115092816 &&\ + mkdir build + +# ninja doesn't respect CXXFLAGS, and the boringssl CMakeLists doesn't expose an option to define __STDC_FORMAT_MACROS +# also, enable -fPIC. +# this is moderately uglier than creating a patchfile, but easier to maintain. +RUN cd /opt/boringssl &&\ + for f in crypto/fipsmodule/rand/fork_detect_test.cc \ + include/openssl/bn.h \ + ssl/test/bssl_shim.cc ; do \ + perl -p -i -e 's/#include /#define __STDC_FORMAT_MACROS 1\n#include /g;' $f ; \ + done &&\ + perl -p -i -e 's/-Werror/-Werror -fPIC/' CMakeLists.txt &&\ + git diff + +RUN cd /opt/boringssl/build &&\ + scl enable devtoolset-8 rh-python36 rh-ruby24 -- cmake -GNinja -DCMAKE_BUILD_TYPE=Release .. &&\ + scl enable devtoolset-8 rh-python36 rh-ruby24 -- ninja &&\ + ./ssl/ssl_test &&\ + mkdir -p ../lib && cp crypto/libcrypto.a ssl/libssl.a ../lib + # Localize time zone ARG TIMEZONEINFO=America/Los_Angeles RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/${TIMEZONEINFO} /etc/localtime -LABEL version=0.1.20 -ENV DOCKER_IMAGEVER=0.1.20 +LABEL version=0.1.21 +ENV DOCKER_IMAGEVER=0.1.21 ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0 ENV CC=/opt/rh/devtoolset-8/root/usr/bin/gcc ENV CXX=/opt/rh/devtoolset-8/root/usr/bin/g++ + +ENV CCACHE_NOHASHDIR=true +ENV CCACHE_UMASK=0000 +ENV CCACHE_SLOPPINESS="file_macro,time_macros,include_file_mtime,include_file_ctime,file_stat_matches" + CMD scl enable devtoolset-8 rh-python36 rh-ruby24 -- bash diff --git a/build/Dockerfile.devel b/build/Dockerfile.devel index 9de4c1245d..884eae7000 100644 --- a/build/Dockerfile.devel +++ b/build/Dockerfile.devel @@ -1,4 +1,5 @@ -FROM foundationdb/foundationdb-build:0.1.20 +ARG IMAGE_TAG=0.1.21 +FROM foundationdb/foundationdb-build:${IMAGE_TAG} USER root @@ -50,8 +51,8 @@ RUN cp -iv /usr/local/bin/clang++ /usr/local/bin/clang++.deref &&\ ldconfig &&\ rm -rf /mnt/artifacts -LABEL version=0.11.11 -ENV DOCKER_IMAGEVER=0.11.11 +LABEL version=0.11.12 +ENV DOCKER_IMAGEVER=0.11.12 ENV CLANGCC=/usr/local/bin/clang.de8a65ef ENV CLANGCXX=/usr/local/bin/clang++.de8a65ef @@ -63,8 +64,5 @@ ENV CC=/usr/local/bin/clang.de8a65ef ENV CXX=/usr/local/bin/clang++.de8a65ef ENV USE_LD=LLD ENV USE_LIBCXX=1 -ENV CCACHE_NOHASHDIR=true -ENV CCACHE_UMASK=0000 -ENV CCACHE_SLOPPINESS="file_macro,time_macros,include_file_mtime,include_file_ctime,file_stat_matches" CMD scl enable devtoolset-8 rh-python36 rh-ruby24 -- bash diff --git a/build/docker-compose.yaml b/build/docker-compose.yaml index 048d468dab..ad1984b8a3 100644 --- a/build/docker-compose.yaml +++ b/build/docker-compose.yaml @@ -2,7 +2,7 @@ version: "3" services: common: &common - image: foundationdb/foundationdb-build:0.1.20 + image: foundationdb/foundationdb-build:0.1.21 build-setup: &build-setup <<: *common From 87a26ac55c715b0e3131c9aed7b347e259e1d0f3 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Tue, 8 Dec 2020 16:26:09 -0800 Subject: [PATCH 140/317] Remove unnecessay m_budget_max, and update the constructor --- fdbrpc/IRateControl.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/fdbrpc/IRateControl.h b/fdbrpc/IRateControl.h index 0b1ca70659..4d2d670f30 100644 --- a/fdbrpc/IRateControl.h +++ b/fdbrpc/IRateControl.h @@ -37,8 +37,7 @@ public: // An IRateControl implemenation that allows at most hands out at most windowLimit units of 'credit' in windowSeconds seconds class SpeedLimit : public IRateControl, ReferenceCounted { public: - SpeedLimit(int windowLimit, int windowSeconds) : m_limit(windowLimit), m_seconds(windowSeconds), m_last_update(0), m_budget(0) { - m_budget_max = m_limit * m_seconds; + SpeedLimit(int windowLimit, double windowSeconds) : m_limit(windowLimit), m_seconds(windowSeconds), m_last_update(0), m_budget(0) { m_last_update = timer(); } virtual ~SpeedLimit() {} @@ -63,7 +62,7 @@ public: virtual void returnUnused(int n) { if(n < 0) return; - m_budget = std::min(m_budget + n, m_budget_max); + m_budget = std::min(m_budget + n, m_limit); } private: @@ -71,7 +70,6 @@ private: double m_seconds; double m_last_update; int64_t m_budget; - int64_t m_budget_max; }; // An IRateControl implemenation that enforces no limit From 90f56d0e8447132b260af267f862e8ca6d8017e2 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Tue, 8 Dec 2020 16:35:08 -0800 Subject: [PATCH 141/317] Add STORAGE_WRITE_WINDOW_SECONDS and STORAGE_WRITE_WINDOW_SECONDS for rate control --- flow/Knobs.cpp | 2 ++ flow/Knobs.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index 28b7deb180..b3b150e35f 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -114,6 +114,8 @@ FlowKnobs::FlowKnobs(bool randomize, bool isSimulated) { //IAsyncFile init( INCREMENTAL_DELETE_TRUNCATE_AMOUNT, 5e8 ); //500MB init( INCREMENTAL_DELETE_INTERVAL, 1.0 ); //every 1 second + init( STORAGE_WRITE_WINDOW_LIMIT, -1 ); // 0 - auto(TODO); Negative - no limit + init( STORAGE_WRITE_WINDOW_SECONDS, -1 ); // 0 - auto(TODO); Negative - no limit //Net2 and FlowTransport init( MIN_COALESCE_DELAY, 10e-6 ); if( randomize && BUGGIFY ) MIN_COALESCE_DELAY = 0; diff --git a/flow/Knobs.h b/flow/Knobs.h index 5dd746cc84..f00af0a0b9 100644 --- a/flow/Knobs.h +++ b/flow/Knobs.h @@ -134,6 +134,8 @@ public: //IAsyncFile int64_t INCREMENTAL_DELETE_TRUNCATE_AMOUNT; double INCREMENTAL_DELETE_INTERVAL; + int64_t STORAGE_WRITE_WINDOW_LIMIT; + double STORAGE_WRITE_WINDOW_SECONDS; //Net2 double MIN_COALESCE_DELAY; From f8ed207ee47f53466b3cd32b244a832236206c00 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Tue, 8 Dec 2020 16:44:39 -0800 Subject: [PATCH 142/317] Change timer() to now() to preserve determinism --- fdbrpc/IRateControl.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fdbrpc/IRateControl.h b/fdbrpc/IRateControl.h index 4d2d670f30..c2316a8fbb 100644 --- a/fdbrpc/IRateControl.h +++ b/fdbrpc/IRateControl.h @@ -38,7 +38,7 @@ public: class SpeedLimit : public IRateControl, ReferenceCounted { public: SpeedLimit(int windowLimit, double windowSeconds) : m_limit(windowLimit), m_seconds(windowSeconds), m_last_update(0), m_budget(0) { - m_last_update = timer(); + m_last_update = now(); } virtual ~SpeedLimit() {} @@ -47,7 +47,7 @@ public: virtual Future getAllowance(unsigned int n) { // Replenish budget based on time since last update - double ts = timer(); + double ts = now(); // returnUnused happens to do exactly what we want here returnUnused((ts - m_last_update) / m_seconds * m_limit); m_last_update = ts; From c68b62f89b3473793802408cdd447e17e1e212f2 Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Tue, 8 Dec 2020 16:57:59 -0800 Subject: [PATCH 143/317] Update txnCommitOut --- fdbserver/MasterProxyServer.actor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 04ffbec49c..cc5f9a2e86 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -661,6 +661,7 @@ ACTOR Future commitBatch( tr.reply.sendError(transaction_too_old()); } ++self->stats.commitBatchOut; + self->stats.txnCommitOut += trs.size(); self->stats.txnConflicts += trs.size(); return Void(); } From aa351d37d37f3971439b2dab6bcab1548acc105c Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Wed, 9 Dec 2020 10:40:39 -0800 Subject: [PATCH 144/317] Increase stable snapshot lower bound to 6.2.29 --- tests/CMakeLists.txt | 16 ++++++++-------- .../SnapCycleRestart-1.txt | 0 .../SnapCycleRestart-2.txt | 0 .../SnapTestAttrition-1.txt | 0 .../SnapTestAttrition-2.txt | 0 .../SnapTestRestart-1.txt | 0 .../SnapTestRestart-2.txt | 0 .../SnapTestSimpleRestart-1.txt | 0 .../SnapTestSimpleRestart-2.txt | 0 9 files changed, 8 insertions(+), 8 deletions(-) rename tests/restarting/{from_6.2.0 => from_6.2.29}/SnapCycleRestart-1.txt (100%) rename tests/restarting/{from_6.2.0 => from_6.2.29}/SnapCycleRestart-2.txt (100%) rename tests/restarting/{from_6.2.0 => from_6.2.29}/SnapTestAttrition-1.txt (100%) rename tests/restarting/{from_6.2.0 => from_6.2.29}/SnapTestAttrition-2.txt (100%) rename tests/restarting/{from_6.2.0 => from_6.2.29}/SnapTestRestart-1.txt (100%) rename tests/restarting/{from_6.2.0 => from_6.2.29}/SnapTestRestart-2.txt (100%) rename tests/restarting/{from_6.2.0 => from_6.2.29}/SnapTestSimpleRestart-1.txt (100%) rename tests/restarting/{from_6.2.0 => from_6.2.29}/SnapTestSimpleRestart-2.txt (100%) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index def5d7de0d..dda134e905 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -173,17 +173,17 @@ if(WITH_PYTHON) TEST_FILES restarting/from_5.0.0/StorefrontTestRestart-1.txt restarting/from_5.0.0/StorefrontTestRestart-2.txt) add_fdb_test( - TEST_FILES restarting/from_6.2.0/SnapTestAttrition-1.txt - restarting/from_6.2.0/SnapTestAttrition-2.txt) + TEST_FILES restarting/from_6.2.29/SnapTestAttrition-1.txt + restarting/from_6.2.29/SnapTestAttrition-2.txt) add_fdb_test( - TEST_FILES restarting/from_6.2.0/SnapTestSimpleRestart-1.txt - restarting/from_6.2.0/SnapTestSimpleRestart-2.txt) + TEST_FILES restarting/from_6.2.29/SnapTestSimpleRestart-1.txt + restarting/from_6.2.29/SnapTestSimpleRestart-2.txt) add_fdb_test( - TEST_FILES restarting/from_6.2.0/SnapTestRestart-1.txt - restarting/from_6.2.0/SnapTestRestart-2.txt) + TEST_FILES restarting/from_6.2.29/SnapTestRestart-1.txt + restarting/from_6.2.29/SnapTestRestart-2.txt) add_fdb_test( - TEST_FILES restarting/from_6.2.0/SnapCycleRestart-1.txt - restarting/from_6.2.0/SnapCycleRestart-2.txt) + TEST_FILES restarting/from_6.2.29/SnapCycleRestart-1.txt + restarting/from_6.2.29/SnapCycleRestart-2.txt) add_fdb_test( TEST_FILES restarting/from_5.1.7/DrUpgradeRestart-1.txt restarting/from_5.1.7/DrUpgradeRestart-2.txt) diff --git a/tests/restarting/from_6.2.0/SnapCycleRestart-1.txt b/tests/restarting/from_6.2.29/SnapCycleRestart-1.txt similarity index 100% rename from tests/restarting/from_6.2.0/SnapCycleRestart-1.txt rename to tests/restarting/from_6.2.29/SnapCycleRestart-1.txt diff --git a/tests/restarting/from_6.2.0/SnapCycleRestart-2.txt b/tests/restarting/from_6.2.29/SnapCycleRestart-2.txt similarity index 100% rename from tests/restarting/from_6.2.0/SnapCycleRestart-2.txt rename to tests/restarting/from_6.2.29/SnapCycleRestart-2.txt diff --git a/tests/restarting/from_6.2.0/SnapTestAttrition-1.txt b/tests/restarting/from_6.2.29/SnapTestAttrition-1.txt similarity index 100% rename from tests/restarting/from_6.2.0/SnapTestAttrition-1.txt rename to tests/restarting/from_6.2.29/SnapTestAttrition-1.txt diff --git a/tests/restarting/from_6.2.0/SnapTestAttrition-2.txt b/tests/restarting/from_6.2.29/SnapTestAttrition-2.txt similarity index 100% rename from tests/restarting/from_6.2.0/SnapTestAttrition-2.txt rename to tests/restarting/from_6.2.29/SnapTestAttrition-2.txt diff --git a/tests/restarting/from_6.2.0/SnapTestRestart-1.txt b/tests/restarting/from_6.2.29/SnapTestRestart-1.txt similarity index 100% rename from tests/restarting/from_6.2.0/SnapTestRestart-1.txt rename to tests/restarting/from_6.2.29/SnapTestRestart-1.txt diff --git a/tests/restarting/from_6.2.0/SnapTestRestart-2.txt b/tests/restarting/from_6.2.29/SnapTestRestart-2.txt similarity index 100% rename from tests/restarting/from_6.2.0/SnapTestRestart-2.txt rename to tests/restarting/from_6.2.29/SnapTestRestart-2.txt diff --git a/tests/restarting/from_6.2.0/SnapTestSimpleRestart-1.txt b/tests/restarting/from_6.2.29/SnapTestSimpleRestart-1.txt similarity index 100% rename from tests/restarting/from_6.2.0/SnapTestSimpleRestart-1.txt rename to tests/restarting/from_6.2.29/SnapTestSimpleRestart-1.txt diff --git a/tests/restarting/from_6.2.0/SnapTestSimpleRestart-2.txt b/tests/restarting/from_6.2.29/SnapTestSimpleRestart-2.txt similarity index 100% rename from tests/restarting/from_6.2.0/SnapTestSimpleRestart-2.txt rename to tests/restarting/from_6.2.29/SnapTestSimpleRestart-2.txt From 13819171faef2ec11528512a16b1d2534fd4e5be Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Wed, 9 Dec 2020 11:45:09 -0800 Subject: [PATCH 145/317] Update knob names to FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT and FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS --- flow/Knobs.cpp | 4 ++-- flow/Knobs.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index b3b150e35f..d4287ecf1a 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -114,8 +114,8 @@ FlowKnobs::FlowKnobs(bool randomize, bool isSimulated) { //IAsyncFile init( INCREMENTAL_DELETE_TRUNCATE_AMOUNT, 5e8 ); //500MB init( INCREMENTAL_DELETE_INTERVAL, 1.0 ); //every 1 second - init( STORAGE_WRITE_WINDOW_LIMIT, -1 ); // 0 - auto(TODO); Negative - no limit - init( STORAGE_WRITE_WINDOW_SECONDS, -1 ); // 0 - auto(TODO); Negative - no limit + init( FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, -1 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT = deterministicRandom()->randomInt(1e3, 1e6); // 0 - auto(TODO); Negative - no limit + init( FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS, -1 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS = 0.05 + (10 - 0.05) * deterministicRandom()->random01(); // 0 - auto(TODO); Negative - no limit //Net2 and FlowTransport init( MIN_COALESCE_DELAY, 10e-6 ); if( randomize && BUGGIFY ) MIN_COALESCE_DELAY = 0; diff --git a/flow/Knobs.h b/flow/Knobs.h index f00af0a0b9..ca88e36842 100644 --- a/flow/Knobs.h +++ b/flow/Knobs.h @@ -134,8 +134,8 @@ public: //IAsyncFile int64_t INCREMENTAL_DELETE_TRUNCATE_AMOUNT; double INCREMENTAL_DELETE_INTERVAL; - int64_t STORAGE_WRITE_WINDOW_LIMIT; - double STORAGE_WRITE_WINDOW_SECONDS; + int64_t FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT; + double FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS; //Net2 double MIN_COALESCE_DELAY; From 5b552162525801e4a80f67e2e59cd189368ad899 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Wed, 9 Dec 2020 12:03:32 -0800 Subject: [PATCH 146/317] Add rate control to AsyncFileCached --- fdbrpc/AsyncFileCached.actor.cpp | 37 ++++++++++++++++--------- fdbrpc/AsyncFileCached.actor.h | 13 +++++++-- fdbrpc/IAsyncFile.h | 4 +++ fdbserver/KeyValueStoreSQLite.actor.cpp | 6 ++++ fdbserver/storageserver.actor.cpp | 2 +- 5 files changed, 46 insertions(+), 16 deletions(-) diff --git a/fdbrpc/AsyncFileCached.actor.cpp b/fdbrpc/AsyncFileCached.actor.cpp index ec5b6f6e73..ef73c13bd0 100644 --- a/fdbrpc/AsyncFileCached.actor.cpp +++ b/fdbrpc/AsyncFileCached.actor.cpp @@ -19,6 +19,7 @@ */ #include "fdbrpc/AsyncFileCached.actor.h" +#include "flow/actorcompiler.h" // This must be the last #include. //Page caches used in non-simulated environments Optional> pc4k, pc64k; @@ -252,23 +253,33 @@ Future AsyncFileCached::changeFileSize( int64_t size ) { }); } +ACTOR static Future flushActor(AsyncFileCached* self) { + state std::vector> unflushed; + state int debug_count = self->getFlushable().size(); + state int i = 0; + state AFCPage* p; + + for (; i < self->getFlushable().size();) { + p = self->getFlushable()[i]; + // Wait for rate control if it is set + if (self->getRateControl()) wait(self->getRateControl()->getAllowance(1)); + auto f = p->flush(); + if (!f.isReady() || f.isError()) unflushed.push_back( f ); + ASSERT((i < self->getFlushable().size() && self->getFlushable()[i] == p) != f.isReady()); + if (!f.isReady()) i++; + } + + ASSERT(self->getFlushable().size() <= debug_count); + wait(waitForAll(unflushed)); + + return Void(); +} + Future AsyncFileCached::flush() { ++countFileCacheWrites; ++countCacheWrites; - std::vector> unflushed; - - int debug_count = flushable.size(); - for(int i=0; iflush(); - if (!f.isReady() || f.isError()) unflushed.push_back( f ); - ASSERT( (i AsyncFileCached::quiesce() { diff --git a/fdbrpc/AsyncFileCached.actor.h b/fdbrpc/AsyncFileCached.actor.h index d9b192b662..3b328944a2 100644 --- a/fdbrpc/AsyncFileCached.actor.h +++ b/fdbrpc/AsyncFileCached.actor.h @@ -230,6 +230,12 @@ public: return filename; } + std::vector const& getFlushable() { return flushable; } + + void setRateControl(Reference const& rc) override { rateControl = rc; } + + Reference const& getRateControl() { return rateControl; } + virtual void addref() { ReferenceCounted::addref(); //TraceEvent("AsyncFileCachedAddRef").detail("Filename", filename).detail("Refcount", debugGetReferenceCount()).backtrace(); @@ -262,6 +268,7 @@ private: Reference pageCache; Future currentTruncate; int64_t currentTruncateSize; + Reference rateControl; // Map of pointers which hold page buffers for pages which have been overwritten // but at the time of write there were still readZeroCopy holders. @@ -287,8 +294,10 @@ private: Int64MetricHandle countCachePageReadsMerged; Int64MetricHandle countCacheReadBytes; - AsyncFileCached( Reference uncached, const std::string& filename, int64_t length, Reference pageCache ) - : uncached(uncached), filename(filename), length(length), prevLength(length), pageCache(pageCache), currentTruncate(Void()), currentTruncateSize(0) { + AsyncFileCached(Reference uncached, const std::string& filename, int64_t length, + Reference pageCache) + : uncached(uncached), filename(filename), length(length), prevLength(length), pageCache(pageCache), + currentTruncate(Void()), currentTruncateSize(0), rateControl(nullptr) { if( !g_network->isSimulated() ) { countFileCacheWrites.init(LiteralStringRef("AsyncFile.CountFileCacheWrites"), filename); countFileCacheReads.init(LiteralStringRef("AsyncFile.CountFileCacheReads"), filename); diff --git a/fdbrpc/IAsyncFile.h b/fdbrpc/IAsyncFile.h index 764b8e6426..0e3e3cc158 100644 --- a/fdbrpc/IAsyncFile.h +++ b/fdbrpc/IAsyncFile.h @@ -24,6 +24,7 @@ #include #include "flow/flow.h" +#include "fdbrpc/IRateControl.h" // All outstanding operations must be cancelled before the destructor of IAsyncFile is called. // The desirability of the above semantic is disputed. Some classes (AsyncFileBlobStore, @@ -81,6 +82,9 @@ public: virtual void releaseZeroCopy( void* data, int length, int64_t offset ) {} virtual int64_t debugFD() = 0; + + // Used for rate control, at present, only AsyncFileCached supports it + virtual void setRateControl(Reference rc) { throw unsupported_operation(); } }; typedef void (*runCycleFuncPtr)(); diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 7baf8072c7..0050dcfff6 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -1346,6 +1346,12 @@ void SQLiteDB::open(bool writable) { if (dbFile.isError()) throw dbFile.getError(); // If we've failed to open the file, throw an exception if (walFile.isError()) throw walFile.getError(); // If we've failed to open the file, throw an exception + // Set Rate control if FLOW_KNOBS are positive + if (FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT > 0 && FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS > 0) { + dbFile.get()->setRateControl(Reference(new SpeedLimit(FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, + FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS))); + } + //TraceEvent("KVThreadInitStage").detail("Stage",2).detail("Filename", filename).detail("Writable", writable); // Now that the file itself is open and locked, let sqlite open the database diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 3b771bf3a8..89a6e649c9 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -339,7 +339,7 @@ public: const double currentTime = now(); double longest = 0; UID UIDofLongest; - for (const auto kv: startTimeMap) { + for (const auto& kv: startTimeMap) { const double currentRunningTime = currentTime - kv.second; if (longest < currentRunningTime) { longest = currentRunningTime; From 9156d38216f8f98f27e215e137da9ff8ef9bee4a Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Wed, 9 Dec 2020 12:09:07 -0800 Subject: [PATCH 147/317] Add knob SQLITE_READER_THREADS to control the number of read threads --- fdbserver/KeyValueStoreSQLite.actor.cpp | 2 +- fdbserver/Knobs.cpp | 1 + fdbserver/Knobs.h | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 0050dcfff6..5e6fae617f 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -1954,7 +1954,7 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke //The DB file should not already be open ASSERT(!vfsAsyncIsOpen(filename)); - readCursors.resize(64); //< number of read threads + readCursors.resize(SERVER_KNOBS->SQLITE_READER_THREADS); //< number of read threads sqlite3_soft_heap_limit64( SERVER_KNOBS->SOFT_HEAP_LIMIT ); // SOMEDAY: Is this a performance issue? Should we drop the cache sizes for individual threads? TaskPriority taskId = g_network->getCurrentTask(); diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 8431be5149..5ed001662b 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -250,6 +250,7 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( SQLITE_BTREE_PAGE_USABLE, 4096 - 8); // pageSize - reserveSize for page checksum init( SQLITE_CHUNK_SIZE_PAGES, 25600 ); // 100MB init( SQLITE_CHUNK_SIZE_PAGES_SIM, 1024 ); // 4MB + init( SQLITE_READER_THREADS, 64 ); // number of read threads // Maximum and minimum cell payload bytes allowed on primary page as calculated in SQLite. // These formulas are copied from SQLite, using its hardcoded constants, so if you are diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 0a5168397d..bd0ac216e0 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -222,6 +222,7 @@ public: double SQLITE_FRAGMENT_MIN_SAVINGS; int SQLITE_CHUNK_SIZE_PAGES; int SQLITE_CHUNK_SIZE_PAGES_SIM; + int SQLITE_READER_THREADS; // KeyValueStoreSqlite spring cleaning double SPRING_CLEANING_NO_ACTION_INTERVAL; From 265a88e2acad83d334d2110aced26987f96aa145 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Wed, 9 Dec 2020 22:30:18 -0800 Subject: [PATCH 148/317] Fix signature --- fdbrpc/IAsyncFile.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbrpc/IAsyncFile.h b/fdbrpc/IAsyncFile.h index 0e3e3cc158..b8fe40ebfd 100644 --- a/fdbrpc/IAsyncFile.h +++ b/fdbrpc/IAsyncFile.h @@ -84,7 +84,7 @@ public: virtual int64_t debugFD() = 0; // Used for rate control, at present, only AsyncFileCached supports it - virtual void setRateControl(Reference rc) { throw unsupported_operation(); } + virtual void setRateControl(Reference const& rc) { throw unsupported_operation(); } }; typedef void (*runCycleFuncPtr)(); From ced946c91805e4625ec8ca2969a7904c3aa817d7 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Wed, 9 Dec 2020 23:02:13 -0800 Subject: [PATCH 149/317] Move flow knobs under AsyncFileCached part --- flow/Knobs.cpp | 4 ++-- flow/Knobs.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index d4287ecf1a..e6f98c4fef 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -92,6 +92,8 @@ FlowKnobs::FlowKnobs(bool randomize, bool isSimulated) { init( MAX_EVICT_ATTEMPTS, 100 ); if( randomize && BUGGIFY ) MAX_EVICT_ATTEMPTS = 2; init( CACHE_EVICTION_POLICY, "random" ); init( PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION, 0.1 ); if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 0.0; else if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 1.0; + init( FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, -1 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT = 1e6; // 0 - auto(TODO); Negative - no limit + init( FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS, -1 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS = 1; // 0 - auto(TODO); Negative - no limit //AsyncFileEIO init( EIO_MAX_PARALLELISM, 4 ); @@ -114,8 +116,6 @@ FlowKnobs::FlowKnobs(bool randomize, bool isSimulated) { //IAsyncFile init( INCREMENTAL_DELETE_TRUNCATE_AMOUNT, 5e8 ); //500MB init( INCREMENTAL_DELETE_INTERVAL, 1.0 ); //every 1 second - init( FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, -1 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT = deterministicRandom()->randomInt(1e3, 1e6); // 0 - auto(TODO); Negative - no limit - init( FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS, -1 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS = 0.05 + (10 - 0.05) * deterministicRandom()->random01(); // 0 - auto(TODO); Negative - no limit //Net2 and FlowTransport init( MIN_COALESCE_DELAY, 10e-6 ); if( randomize && BUGGIFY ) MIN_COALESCE_DELAY = 0; diff --git a/flow/Knobs.h b/flow/Knobs.h index ca88e36842..51a623fb03 100644 --- a/flow/Knobs.h +++ b/flow/Knobs.h @@ -112,6 +112,8 @@ public: double PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION; double TOO_MANY_CONNECTIONS_CLOSED_RESET_DELAY; int TOO_MANY_CONNECTIONS_CLOSED_TIMEOUT; + int FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT; + double FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS; //AsyncFileEIO int EIO_MAX_PARALLELISM; @@ -134,8 +136,6 @@ public: //IAsyncFile int64_t INCREMENTAL_DELETE_TRUNCATE_AMOUNT; double INCREMENTAL_DELETE_INTERVAL; - int64_t FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT; - double FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS; //Net2 double MIN_COALESCE_DELAY; From 7e0d924be9f5a8ab1f37ef3dfcc6ac32a7d07483 Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Thu, 10 Dec 2020 22:12:22 -0800 Subject: [PATCH 150/317] Minor revision and update format for FDB Read and Write Path doc --- .../sphinx/source/read-write-path.rst | 414 ++++++++++++++---- 1 file changed, 324 insertions(+), 90 deletions(-) diff --git a/documentation/sphinx/source/read-write-path.rst b/documentation/sphinx/source/read-write-path.rst index 33185bac88..0674bc1233 100644 --- a/documentation/sphinx/source/read-write-path.rst +++ b/documentation/sphinx/source/read-write-path.rst @@ -8,176 +8,382 @@ FDB Read and Write Path (WiP) This document explains how FDB works at high level in database terms without mentioning FDB internal concepts. -We first discuss the read path and the write path separately for a single transaction. We then describe how the read path and write path work together for a read and write transaction. At the last section, we illustrate how multiple outstanding write transactions are processed and *ordered* in FDB. The processing order of multiple transactions is important because it affects the parallelism of transaction processing and the write throughput. +We first discuss the read path and the write path separately for a single transaction. +We then describe how the read path and write path work together for a read and write transaction. +In the last section, we illustrate how multiple outstanding write transactions are processed and *ordered* in FDB. +The processing order of multiple transactions is important because it affects the parallelism of transaction processing and the write throughput. -The content is based on FDB 6.2 and is true for FDB 6.3. A new timestamp proxy role is introduced in FDB 6.4+, which affects the read path. We will discuss the timestamp proxy role in the future version of this document. +The content is based on FDB 6.2 and is true for FDB 6.3. A new timestamp proxy role is introduced in post FDB 6.3, +which affects the read path. We will discuss the timestamp proxy role in the future version of this document. .. image:: /images/FDB_read_path.png Components ================= -FDB is built on top of several key components. The terms below are common database or distributed system terms, instead of FDB specific terms. +FDB is built on top of several key components. +The terms below are common database or distributed system terms, instead of FDB specific terms. -**Timestamp generator.** It serves logical time, which defines happen-before relation: An event at t1 happens before another event at t2, if t1 < t2. The logic time is used to order events in FDB distributed systems and it is used by concurrency control to decide if two transactions have conflicts. The logical time is the timestamp for a transaction. +**Timestamp generator.** It serves logical time, which defines happen-before relation: +An event at t1 happens before another event at t2, if t1 < t2. +The logic time is used to order events in FDB distributed systems and it is used by concurrency control to decide if two transactions have conflicts. +The logical time is the timestamp for a transaction. * A read-only transaction has only one timestamp which is assigned when the transaction is created; * A read-write transaction has one timestamp at the transaction’s creation time and one timestamp at its commit time. -**Concurrency Control.** It decides if two transactions can be executed concurrently without violating Strict Serializable Isolation (SSI) property. It uses the Optimistic Concurrency Control (OCC) mechanism described in [SSI] to achieve that. +**Concurrency Control.** It decides if two transactions can be executed concurrently without violating Strict Serializable Isolation (SSI) property. +It uses the Optimistic Concurrency Control (OCC) mechanism described in [SSI] to achieve that. -**Client.** It is a library, an FDB application (e.g., CK) uses, to access the database. It exposes the transaction concept to applications. Client in FDB is a *fat* client that does multiple complex operations: (1) It calculates read and write conflict ranges for transactions; (2) it batches transaction requests for better throughput; (3) it automatically retries failed transactions. +**Client.** It is a library, an FDB application uses, to access the database. +It exposes the transaction concept to applications. +Client in FDB is a *fat* client that does multiple complex operations: +(1) It calculates read and write conflict ranges for transactions; +(2) it batches a transaction's operations and send them all together at commit for better throughput; +(3) it automatically retries failed transactions. **Proxies.** It is a subsystem that acts like reverse proxies to serve clients’ requests. Its main purposes is: * Serve for read request by (1) serving the logical time to client; and (2) providing which storage server has data for a key; * Process write transactions on behalf of clients and return the results; -Each proxy has the system’s metadata, called transaction state store (txnStateStore). The metadata decides: (1) which key should go to which storage servers in the storage system; (2) which key should go to which processes in the durable queuing system; (3) is the database locked; etc. +Each proxy has the system’s metadata, called transaction state store (txnStateStore). The metadata decides: +(1) which key should go to which storage servers in the storage system; +(2) which key should go to which processes in the durable queuing system; +(3) is the database locked; etc. -The metadata on all proxies are consistent at any given timestamp. To achieve that, when a proxy has a metadata mutation that changes the metadata at the timestamp V1, the mutation is propagated to all proxies (through the concurrency control component) and its effect is applied on all proxies before any proxy can process transactions after the timestamp V1. +The metadata on all proxies are consistent at any given timestamp. +To achieve that, when a proxy has a metadata mutation that changes the metadata at the timestamp V1, +the mutation is propagated to all proxies (through the concurrency control component), and +its effect is applied on all proxies before any proxy can process transactions after the timestamp V1. -**Durable queuing system.** It is a queuing system for write traffic. Its producers are proxies that send transaction mutation data for durability purpose. Its consumers are storage systems that index data and serve read request. The queuing system is partitioned for the key-space. A shard (i.e., key-range) is mapped to *k* log processes in the queuing system, where *k* is the replication factor. The mapping between shard and storage servers decides the mapping between shard and log processes. +**Durable queuing system.** It is a queuing system for write traffic. +Its producers are proxies that send transaction mutation data for durability purpose. +Its consumers are storage systems that index data and serve read request. +The queuing system is partitioned for the key-space. +A shard (i.e., key-range) is mapped to *k* log processes in the queuing system, where *k* is the replication factor. +The mapping between shard and storage servers decides the mapping between shard and log processes. -**Storage system.** It is a collection of storage servers (SS), each of which is a sqlite database running on a single thread. It indexes data and serves read requests. Each SS has an in-memory p-tree data structure that stores the past 5-second mutations and an on-disk sqlite data. The in-memory data structure can serve multiple versions of key-values in the past 5 seconds. Due to memory limit, the in-memory data cannot hold more than 5 seconds’ multi-version key-values, which is the root cause why FDB’s transactions cannot be longer than 5 seconds. The on-disk sqlite data has only the most-recent key-value. +**Storage system.** It is a collection of storage servers (SS), each of which is a sqlite database running on a single thread. +It indexes data and serves read requests. +Each SS has an in-memory p-tree data structure that stores the past 5-second mutations and an on-disk sqlite data. +The in-memory data structure can serve multiple versions of key-values in the past 5 seconds. +Due to memory limit, the in-memory data cannot hold more than 5 seconds’ multi-version key-values, +which is the root cause why FDB’s transactions cannot be longer than 5 seconds. +The on-disk sqlite data has only the most-recent key-value. **Zookeeper like system.** The system solves two main problems: -* Store the configuration of the transaction system, which includes information such as which processes are proxies, which processes belong to the queuing system, and which processes belong to the concurrency control, etc. The system used to be zookeeper. FDB later replaced it with its own implementation. -* Service discovery. Processes in the zookeeper-like system serve as well-known endpoints for clients to connect to the cluster. These well-known endpoint returns the list of proxies to clients. +* Store the configuration of the transaction system, which includes information such as generations of queuing systems and their processes. + The system used to be zookeeper. FDB later replaced it with its own implementation. + +* Service discovery. Processes in the zookeeper-like system serve as well-known endpoints for clients to connect to the cluster. + These well-known endpoint returns the list of proxies to clients. Read path of a transaction ================================== -Fig. 1 above shows a high-level view of the read path. An application uses FDB client library to read data. It creates a transaction and calls its read() function. The read() operation will lead to several steps. +Fig. 1 above shows a high-level view of the read path. An application uses FDB client library to read data. +It creates a transaction and calls its read() function. The read() operation will lead to several steps. -* **Step 1 (Timestamp request)**: The read operation needs a timestamp. The client initiates the timestamp request through an RPC to proxy. The request will trigger Step 2 and Step 3; - * To improve throughput and reduce load on the server side, each client dynamically batches the timestamp requests. A client keeps adding requests to the current batch until *when* the number of requests in a batch exceeds a configurable threshold or *when* the batching times out at a dynamically computed threshold. Each batch sends only one timestamp request to proxy and all requests in the same batch share the same timestamp. -* **Step 2 ****(Get latest commit version)**: When the timestamp request arrives at a proxy, the proxy wants to get the largest commit version as the return value. So it contacts the rest of (n-1) proxies for their latest commit versions and uses the largest one as the return value for Step 1. - * O(n^2) communication cost: Because each proxy needs to contact the rest of (n-1) proxies to serve clients’ timestamp request, the communication cost is n*(n-1), where n is the number of proxies; - * Batching: To reduce communication cost, each proxy batches clients’ timestamp requests for a configurable time period (say 1ms) and return the same timestamp for requests in the same batch. -* **Step 3 (Confirm proxy’s liveness)**: To prevent proxies that are no longer a part of the system (such as due to network partition) from serving requests, each proxy contacts the queuing system for each timestamp request to confirm it is still valid proxies. This is based on the FDB property that at most one active queuing system is available at any given time. - * Why do we need this step? This is to achieve consensus (i.e., external consistency). Compared to serializable isolation, Strict Serializable Isolation (SSI) requires external consistency. It means the timestamp received by clients cannot decrease. If we do not have step and network partition happens, a set of old proxies that are disconnected from the rest of systems can still serve timestamp requests to clients. These timestamps can be smaller than the new generation of proxies, which breaks the external consistency in SSI. - * O(n * m) communication cost: To confirm a proxy’s liveness, the proxy has to contact all members in the queuing system to ensure the queuing system is still active. This causes *m* network communication, where *m* is the number of processes in the queuing system. A system with n proxies will have O(n * m) network communications at the step 3. In our deployment, n is typically equal to m; - * Do FDB production clusters have this overhead? No. Our production clusters disable the external consistency by configuring the knob ALWAYS_CAUSAL_READ_RISKY. -* **Step 4 (Locality request)**: The client gets which storage servers have its requested keys by sending another RPC to proxy. This step returns a set of *k* storage server interfaces, where k is the replication factor; - * Client cache mechanism: The key location will be cached in client. Future requests will use the cache to directly read from storage servers, which saves a trip to proxy. If location is stale, read will return error and client will retry and refresh the cache. +* **Step 1 (Timestamp request)**: The read operation needs a timestamp. + The client initiates the timestamp request through an RPC to proxy. The request will trigger Step 2 and Step 3; -* **Step 5 (Get data request)**: The client uses the interfaces from step 4 to directly get its keys from those storage servers. - * Direct read from client’s memory: If a key’s value exists in the client’s memory, the client reads it directly from its local memory. This happens when a client updates a key’s value and later reads it. This optimization reduces the amount of unnecessary requests to storage servers. - * Load balance: Each data exists on k storage servers, where k is the replication factor. To balance the load across the k replicas, client has a load balancing algorithm to balance the number of requests to each replica. - * Transaction succeed: If the storage server has the data at the read timestamp, the client will receive the data and return succeed. - * Transaction too old error: If the read request’s timestamp is older than 5 seconds, storage server may have already flushed the data from its in-memory multi-version data structure to its on-disk single-version data structure. This means storage server does not have the data older than 5 seconds. So client will receive transaction too old error. The client will retry with a new timestamp. One scenario that can lead to the error is when it takes too long for a client to send the read request after it gets the timestamp. - * Future transaction error: Each storage server pulls data in increasing order of data’s timestamp from the queuing system. Let’s define a storage server’s timestamp as the largest timestamp of data the storage server has. If the read request’s timestamp is larger than the storage server’s timestamp, the storage server will reply future-transaction-error to the client. The client will retry. One scenario that can lead to the error is when the connection between the SS and the queuing system is slow. - * Wrong shard error: If keys in the request or result depend on data outside this storage server OR if a large selector offset prevents all data from being read in one range read. Client will invalidate its locality cache for the key and retry the read request at the failed key. + * To improve throughput and reduce load on the server side, each client dynamically batches the timestamp requests. + A client keeps adding requests to the current batch until + *when* the number of requests in a batch exceeds a configurable threshold or + *when* the batching times out at a dynamically computed threshold. + Each batch sends only one timestamp request to proxy and all requests in the same batch share the same timestamp. + +* **Step 2 (Get latest commit version)**: When the timestamp request arrives at a proxy, + the proxy wants to get the largest commit version as the return value. + So it contacts the rest of (n-1) proxies for their latest commit versions and + uses the largest one as the return value for Step 1. + + * O(n^2) communication cost: Because each proxy needs to contact the rest of (n-1) proxies to serve clients’ timestamp request, + the communication cost is n*(n-1), where n is the number of proxies; + + * Batching: To reduce communication cost, each proxy batches clients’ timestamp requests for a configurable time period (say 1ms) and + return the same timestamp for requests in the same batch. + +* **Step 3 (Confirm proxy’s liveness)**: To prevent proxies that are no longer a part of the system (such as due to network partition) from serving requests, + each proxy contacts the queuing system for each timestamp request to confirm it is still a valid proxy + (i.e., not replaced by a newer generation proxy process). + This is based on the FDB property that at most one active queuing system is available at any given time. + + * Why do we need this step? This is to achieve consensus (i.e., external consistency). + Compared to serializable isolation, Strict Serializable Isolation (SSI) requires external consistency. + It means the timestamp received by clients cannot decrease. If we do not have step and network partition happens, + a set of old proxies that are disconnected from the rest of systems can still serve timestamp requests to clients. + These timestamps can be smaller than the new generation of proxies, which breaks the external consistency in SSI. + + * O(n * m) communication cost: To confirm a proxy’s liveness, the proxy has to contact all members in the queuing system to + ensure the queuing system is still active. This causes *m* network communication, where *m* is the number of processes in the queuing system. + A system with n proxies will have O(n * m) network communications at the step 3. In our deployment, n is typically equal to m; + + * Do FDB production clusters have this overhead? No. Our production clusters disable the external consistency by + configuring the knob ALWAYS_CAUSAL_READ_RISKY. + +* **Step 4 (Locality request)**: The client gets which storage servers have its requested keys by sending another RPC to proxy. + This step returns a set of *k* storage server interfaces, where k is the replication factor; + + * Client cache mechanism: The key location will be cached in client. + Future requests will use the cache to directly read from storage servers, + which saves a trip to proxy. If location is stale, read will return error and client will retry and refresh the cache. + +* **Step 5 (Get data request)**: The client uses the location information from step 4 to directly query keys from corresponding storage servers. + * Direct read from client’s memory: If a key’s value exists in the client’s memory, the client reads it directly from its local memory. + This happens when a client updates a key’s value and later reads it. + This optimization reduces the amount of unnecessary requests to storage servers. + + * Load balance: Each data exists on k storage servers, where k is the replication factor. + To balance the load across the k replicas, client has a load balancing algorithm to balance the number of requests to each replica. + + * Transaction succeed: If the storage server has the data at the read timestamp, the client will receive the data and return succeed. + + * Transaction too old error: If the read request’s timestamp is older than 5 seconds, + storage server may have already flushed the data from its in-memory multi-version data structure to its on-disk single-version data structure. + This means storage server does not have the data older than 5 seconds. So client will receive transaction too old error. + The client will retry with a new timestamp. + One scenario that can lead to the error is when it takes too long for a client to send the read request after it gets the timestamp. + + * Future transaction error: Each storage server pulls data in increasing order of data’s timestamp from the queuing system. + Let’s define a storage server’s timestamp as the largest timestamp of data the storage server has. + If the read request’s timestamp is larger than the storage server’s timestamp, + the storage server will reply future-transaction-error to the client. + The client will retry. One scenario that can lead to the error is when the connection between the SS and the queuing system is slow. + + * Wrong shard error: If keys in the request or result depend on data outside this storage server OR + if a large selector offset prevents all data from being read in one range read. + Client will invalidate its locality cache for the key and retry the read request at the failed key. Implementation of FDB read path ------------------------------------------ * **Step 1 (Timestamp request)**: - * Each read request tries to get a timestamp if its transaction has not got one: https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L2104 - * Client batches the get-timestamp requests: https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L3172 - * Dynamic batching algorithm: https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L3101-L3104 -* **Step 2 (Get latest commit version)**: Contacting (n-1) proxies for commit version: https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbserver/MasterProxyServer.actor.cpp#L1196 + * Each read request tries to get a timestamp if its transaction has not got one: + https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L2104 + * Client batches the get-timestamp requests: + https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L3172 + * Dynamic batching algorithm: + https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L3101-L3104 + +* **Step 2 (Get latest commit version)**: Contacting (n-1) proxies for commit version: + https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbserver/MasterProxyServer.actor.cpp#L1196 + * **Step 3 (Confirm proxy’s liveness)**: * We typically set our clusters’ knob ALWAYS_CAUSAL_READ_RISKY to 1 to skip this step - * Proxy confirm queuing system is alive: https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbserver/MasterProxyServer.actor.cpp#L1199 - * How is confirmEpochLive(..) implemented for the above item. https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbserver/TagPartitionedLogSystem.actor.cpp#L1216-L1225 -* **Step 4 (Locality request)**: https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L1312-L1313 + * Proxy confirm queuing system is alive: + https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbserver/MasterProxyServer.actor.cpp#L1199 + * How is confirmEpochLive(..) implemented for the above item: + https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbserver/TagPartitionedLogSystem.actor.cpp#L1216-L1225 + +* **Step 4 (Locality request)**: + https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L1312-L1313 + * **Step 5 (Get data request)**: - * Logics of handling get value request: https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L1306-L1396 - * Load balance algorithm: The loadBalance() at https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L1342-L1344 + * Logics of handling get value request: + https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L1306-L1396 + * Load balance algorithm: The loadBalance() at + https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L1342-L1344 Write path of a transaction ================================ -Suppose a client has a write-only transaction. Fig. 2 below shows the write path in a non-HA cluster. We will discuss how a transaction with both read and write works in the next section. +Suppose a client has a write-only transaction. Fig. 2 below shows the write path in a non-HA cluster. +We will discuss how a transaction with both read and write works in the next section. .. image:: /images/FDB_write_path.png -To simplify the explanation, the steps below do not include transaction batching on proxy, which is a typical database technique to increase transaction throughput. +To simplify the explanation, the steps below do not include transaction batching on proxy, +which is a typical database technique to increase transaction throughput. + +* **Step 1 (Client buffers write mutations):** Client buffers all writes in a transaction until commit is called on the transaction. + In the rest of document, a write is also named as a mutation. + + * Client is a fat client that preprocess transactions: + (a) For atomic operations, if client knows the key value, it will convert atomic operations to set operations; + (b) For version stamp atomic operations, client adds extra bytes to key or value for the version stamp; + (c) If a key has multiple operations, client coalesces them to one operation whenever possible. + + * How client buffers mutations: + https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbclient/NativeAPI.actor.cpp#L2345-L2361 -* **Step 1 (Client buffers write mutations):** Client buffers all writes in a transaction until commit is called on the transaction. In the rest of document, a write is also named as a mutation. - * Client is a fat client that preprocess transactions: (a) For atomic operations, if client knows the key value, it will convert atomic operations to set operations; (b) For version stamp atomic operations, client adds extra bytes to key for the version stamp; (c) If a key has multiple operations, client coalesces them to one operation, etc. - * How client buffers mutations: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbclient/NativeAPI.actor.cpp#L2345-L2361 * **Step 2 (Client commits the transaction):** When a client calls commit(), it performs several operations: - * **Step 2-1**: Add extra conflict ranges that are added by user but cannot be calculated from mutations. - * **Step 2-2**: Get a timestamp as the transaction’s start time. The timestamp does not need causal consistency because the transaction has no read. - * This request goes to one of proxies. The proxy will contact all other (n-1) proxies to get the most recent commit version as it does in read path. The proxy does not need to contact log systems to confirm its activeness because it does not need causal consistency. - * **Step 2-3**: Sends the transaction’s information to a proxy. Load balancer in client decides which proxy will be used to handle a transaction. A transaction’s information includes: + + * **Step 2-1**: Add extra conflict ranges that are added by user but cannot be calculated from mutations. + + * **Step 2-2**: Get a timestamp as the transaction’s start time. The timestamp does not need causal consistency because the transaction has no read. + * This request goes to one of proxies. The proxy will contact all other (n-1) proxies to get the most recent commit version as it does in read path. + The proxy does not need to contact log systems to confirm its activeness because it does not need causal consistency. + + * **Step 2-3**: Sends the transaction’s information to a proxy. Load balancer in client decides which proxy will be used to handle a transaction. + A transaction’s information includes: + * All of its mutations; * Read and write conflict range; - * Transaction options that control a transaction’s behavior. For example, should the transaction write when the DB is locked? Shall the transaction uses the first proxy in the proxy list to commit? + * Transaction options that control a transaction’s behavior. For example, should the transaction write when the DB is locked? + Shall the transaction uses the first proxy in the proxy list to commit? + * Implementation: * Transaction commit function: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbclient/NativeAPI.actor.cpp#L2895-L2899 * Major work of commit in client side is done at here: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbclient/NativeAPI.actor.cpp#L2784-L2868 * Step 2-1: Add extra conflict ranges: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbclient/NativeAPI.actor.cpp#L2826-L2828 * Step 2-2: getReadVersion at commit which does not need external consistency because we do not have read in the transaction: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbclient/NativeAPI.actor.cpp#L2822-L2823 * Step 2-3: Send transaction to a proxy via RPC: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbclient/NativeAPI.actor.cpp#L2691-L2700 + * When a proxy receives clients’ transactions, it commits the transaction on behalf of clients with Step 3 - 9. + * **Step 3 (Proxy gets commit timestamp)**: The proxy gets the timestamp of the transaction’s commit time from the time oracle through an RPC call. - * To improve transaction throughput and reduce network communication overhead, each proxy dynamically batch transactions and process transactions in batches. A proxy keeps batching transactions until the batch time exceeds a configurable timeout value or until the number of transactions exceed a configurable value or until the total bytes of the batch exceeds a dynamically calculated desired size. + + * To improve transaction throughput and reduce network communication overhead, + each proxy dynamically batch transactions and process transactions in batches. + A proxy keeps batching transactions until the batch time exceeds a configurable timeout value or + until the number of transactions exceed a configurable value or + until the total bytes of the batch exceeds a dynamically calculated desired size. + * The network overhead is 1 network communication per batch of commit transactions; + * How is the dynamically calculated batch size calculated: https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbserver/MasterProxyServer.actor.cpp#L1770-L1774 * How commit transactions are batched: https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbserver/MasterProxyServer.actor.cpp#L416-L486 * How each transaction batch is handled: https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbserver/MasterProxyServer.actor.cpp#L523-L1174 * Where does proxy sends commit timestamp request to the timestamp generator: https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbserver/MasterProxyServer.actor.cpp#L586-L587 -* **Step 4 (Proxy builds transactions’ conflict ranges)**: Because the concurrency control component may have multiple processes, each of which is responsible for resolving conflicts in a key range, the proxy needs to build one transaction-conflict-resolution request for each concurrency control process: For each transaction, the proxy splits its read and write conflict ranges based on concurrency control process’ responsible ranges. The proxy will create k conflict resolution requests for each transaction, where k is the number of processes in the concurrency control component. - * Implementation: https://github.com/xumengpanda/foundationdb/blob/4086e3a2750b776cc8bfb0f0e463fe00ac905595/fdbserver/MasterProxyServer.actor.cpp#L607-L618 -* **Step 5 (Proxy sends conflict resolution requests to concurrency control)**: Each concurrency control process is responsible for checking conflicts in a key range. Each process checks if the transaction has conflicts with other transactions in its key-range. Each process returns the conflict checking result back to the proxy. - * What is conflict range? - * A transaction’s write conflict range includes any key and key-ranges that are modified in the transactions. - * A transaction’s read conflict range includes any key and key-ranges that are read in the transaction. - * Client can also use transaction options to add explicit read-conflict-range or write-conflict-range. Example: https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L2634-L2635 - * **Piggy-back metadata change**. If the transaction changes database’s metadata, such as locking the database, the change is considered as a special mutation and also checked for conflicts by the concurrency control component. The primary difference between metadata mutation and normal mutations is that the metadata change must be propagated to all proxies so that all proxies have a consistent view of database’s metadata. This is achieved by piggy-backing metadata change in the reply from resolver to proxies. + +* **Step 4 (Proxy builds transactions’ conflict ranges)**: Because the concurrency control component may have multiple processes, + each of which is responsible for resolving conflicts in a key range, + the proxy needs to build one transaction-conflict-resolution request for each concurrency control process: + For each transaction, the proxy splits its read and write conflict ranges based on concurrency control process’ responsible ranges. + The proxy will create k conflict resolution requests for each transaction, where k is the number of processes in the concurrency control component. + + * Implementation: https://github.com/apple/foundationdb/blob/4086e3a2750b776cc8bfb0f0e463fe00ac905595/fdbserver/MasterProxyServer.actor.cpp#L607-L618 + +* **Step 5 (Proxy sends conflict resolution requests to concurrency control)**: + Each concurrency control process is responsible for checking conflicts in a key range. + Each process checks if the transaction has conflicts with other transactions in its key-range. + Each process returns the conflict checking result back to the proxy. + + * What is conflict range? + * A transaction’s write conflict range includes any key and key-ranges that are modified in the transactions. + * A transaction’s read conflict range includes any key and key-ranges that are read in the transaction. + * Client can also use transaction options to add explicit read-conflict-range or write-conflict-range. + Example: https://github.com/apple/foundationdb/blob/4b0fba6ea89b51b82df7868ca24b81f6997db4e4/fdbclient/NativeAPI.actor.cpp#L2634-L2635 + + * **Piggy-back metadata change**. If the transaction changes database’s metadata, such as locking the database, + the change is considered as a special mutation and also checked for conflicts by the concurrency control component. + The primary difference between metadata mutation and normal mutations is that the metadata change must be propagated to all proxies + so that all proxies have a consistent view of database’s metadata. + This is achieved by piggy-backing metadata change in the reply from resolver to proxies. + * Implementation * Create conflict resolution requests for a batch of transactions: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/MasterProxyServer.actor.cpp#L607-L618 * Metadata mutations are sent from proxy to concurrency control processes: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/MasterProxyServer.actor.cpp#L366-L369 -* **Step 6 (Resolve conflicts among concurrent transactions)**: Each concurrency control process checks conflicts among transactions based on the theory in [1]. In a nutshell, it checks for read-write conflicts. Suppose two transactions operates on the same key. If a write transaction’s time overlaps between another read-write transaction’s start time and commit time, only one transaction can commit: the one that arrives first at all concurrency control processes will commit. + +* **Step 6 (Resolve conflicts among concurrent transactions)**: + Each concurrency control process checks conflicts among transactions based on the theory in [1]. + In a nutshell, it checks for read-write conflicts. Suppose two transactions operates on the same key. + If a write transaction’s time overlaps between another read-write transaction’s start time and commit time, + only one transaction can commit: the one that arrives first at all concurrency control processes will commit. + * Implementation * Proxy sends conflict checking request: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/MasterProxyServer.actor.cpp#L626-L629 * Concurrency control process handles the request: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/Resolver.actor.cpp#L320-L322 -* **Step 7 (Proxy’s post resolution processing)**: Once the proxy receives conflict-resolution replies from all concurrency control processes, it performs three steps - * **Step 7-1 (Apply metadata effect caused by other proxies)**: As mentioned above, when a proxy changes database’s metadata, the metadata mutations will be propagated via the concurrency control component to other proxies. So the proxy needs to first compute and apply these metadata mutations onto the proxy’s local states. Otherwise, the proxy will operate in a different view of database’s metadata. + +* **Step 7 (Proxy’s post resolution processing)**: + Once the proxy receives conflict-resolution replies from all concurrency control processes, it performs three steps + + * **Step 7-1 (Apply metadata effect caused by other proxies)**: As mentioned above, when a proxy changes database’s metadata, + the metadata mutations will be propagated via the concurrency control component to other proxies. + So the proxy needs to first compute and apply these metadata mutations onto the proxy’s local states. + Otherwise, the proxy will operate in a different view of database’s metadata. + * For example, if one proxy locks the database in a committed transaction at time t1, all other proxies should have seen the lock immediately after t1. Since another proxy may have transactions in flight already at t1, the proxy must first apply the “lock“ effect before it can process its in-flight transactions. * How metadata effect is applied in implementation: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/MasterProxyServer.actor.cpp#L678-L719 - * **Step 7-2 (Determine which transactions are committed)**: Proxy combines results from all concurrency control processes. Only if all concurrency control processes say a transaction is committed, will the transaction be considered as committed by the proxy. + + * **Step 7-2 (Determine which transactions are committed)**: Proxy combines results from all concurrency control processes. + Only if all concurrency control processes say a transaction is committed, will the transaction be considered as committed by the proxy. + * Implementation: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/MasterProxyServer.actor.cpp#L721-L757 - * **Step 7-3 (Apply metadata effect caused by this proxy)**: For each committed transaction, this proxy applies its metadata mutations to the proxy’s local state. - * Note: These metadata mutations are also sent to concurrency control processes and propagated to other proxies at Step 5. This step is to apply metadata effect on its own proxy’s states. + + * **Step 7-3 (Apply metadata effect caused by this proxy)**: For each committed transaction, + this proxy applies its metadata mutations to the proxy’s local state. + + * Note: These metadata mutations are also sent to concurrency control processes and propagated to other proxies at Step 5. + This step is to apply metadata effect on its own proxy’s states. * Implementation: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/MasterProxyServer.actor.cpp#L763-L777 - * **Step 7-4 (Assign mutations to storage servers and serialize them)**: In order to let the rest of system (the queuing system and storage system) know which process a mutation should be routed to, the proxy needs to add tags to mutations. The proxy serializes mutations with the same tag into the same message and sends the serialized message to the queuing system. + + * **Step 7-4 (Assign mutations to storage servers and serialize them)**: + In order to let the rest of system (the queuing system and storage system) know which process a mutation should be routed to, + the proxy needs to add tags to mutations. + The proxy serializes mutations with the same tag into the same message and sends the serialized message to the queuing system. + * Implementation of adding tags and serializing mutations into messages: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/MasterProxyServer.actor.cpp#L800-L910 * The lines that add tags to a mutation and serialize it: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/MasterProxyServer.actor.cpp#L846-L847 - * **Step 7-5 (Duplicate and serialize mutations to backup system keyspace)**: When backup or disaster recovery (DR) is enabled, each proxy captures mutation streams into a dedicated system keyspace. Mutations in a transaction batch are serialized as a single mutation in a dedicated system keyspace. + + * **Step 7-5 (Duplicate and serialize mutations to backup system keyspace)**: + When backup or disaster recovery (DR) is enabled, each proxy captures mutation streams into a dedicated system keyspace. + Mutations in a transaction batch are serialized as a single mutation in a dedicated system keyspace. + * How mutations are duplicated for backup and DR: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/MasterProxyServer.actor.cpp#L912-L986 - * Note: FDB will have a new backup system that avoids duplicating mutations to the system keyspace. Its design is similar to database’s Change Data Capture (CDC) design. The new backup system is not production-ready yet. -* **Step 8 (Make mutation messages durable in the queuing system)**: Proxy sends serialized mutation messages to the queuing system. The queuing system will append the mutation to an append-only file, fsync it, and send the respnose back. Each message has a tag, which decides which process in the queuing system the message should be sent to. The queuing system returns to the proxy the minimum known committed version, which is the smallest commit version among all proxies. The minimum known commit version is used when the system recovers from fault. + * Note: FDB will have a new backup system that avoids duplicating mutations to the system keyspace. + Its design is similar to database’s Change Data Capture (CDC) design. The new backup system is not production-ready yet. + +* **Step 8 (Make mutation messages durable in the queuing system)**: + Proxy sends serialized mutation messages to the queuing system. + The queuing system will append the mutation to an append-only file, fsync it, and send the respnose back. + Each message has a tag, which decides which process in the queuing system the message should be sent to. + The queuing system returns to the proxy the minimum known committed version, which is the smallest commit version among all proxies. + The minimum known commit version is used when the system recovers from fault. + * Sending messages to the queuing system is abstracted into a push() operation: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/MasterProxyServer.actor.cpp#L1045 * The minimum known committed version is called minKnownCommittedVersion. It is updated for each commit: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/MasterProxyServer.actor.cpp#L1067 -* **Step 9 (Reply to client)**: Proxy replies the transaction’s result to client. If the transaction fails (say due to transaction conflicts), proxy sends the error message to the client. + +* **Step 9 (Reply to client)**: Proxy replies the transaction’s result to client. + If the transaction fails (say due to transaction conflicts), proxy sends the error message to the client. + * Reply to clients based on different transaction’s results: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/MasterProxyServer.actor.cpp#L1117-L1138 -* **Step 10 (Storage systems pull data from queuing system)**: Storage system asynchronously pulls data from queuing system and indexes data for read path. - * Each SS has a primary process (called primary tLog) in the queuing system to pull data from the SS’s data from the queuing system. Each SS only gets in-ordered streams of mutations that are owned by the SS. - * In failure scenario when a SS cannot reach the primary tLog, the SS will pull data from different tLogs that have part of the SS’s data. The SS will then merge the stream of data from different tLogs. - * Each SS does not make its pulled data durable to disk until the data becomes at least 5 seconds older than the most recent data the SS has pulled. This allows each SS to roll back at least 5 seconds of mutations. - * Why do we need roll back feature for SS? This comes from an optimization used in FDB. To make a mutation available in a SS as soon as possible, a SS may fetch a mutation from the queuing system that has not been fully replicated. The mutation’s transaction may be aborted in rare situations, such as when FDB has to recover from faults and decides to throw away the last few non-fully-durable transactions. SSes must throw away data in the aborted transactions. - * Why does SS not make data durable until 5 seconds later? This is because today’s SS does not support rolling back data that has already been made durable on disk. To support roll back, SS keeps data that might be rolled back in memory. When roll-back is needed, SS just throws away the in-memory data. This simplifies the SS implementation. + +* **Step 10 (Storage systems pull data from queuing system)**: + Storage system asynchronously pulls data from queuing system and indexes data for read path. + + * Each SS has a primary process (called primary tLog) in the queuing system to pull data from the SS’s data from the queuing system. + Each SS only gets in-ordered streams of mutations that are owned by the SS. + + * In failure scenario when a SS cannot reach the primary tLog, the SS will pull data from different tLogs that have part of the SS’s data. + The SS will then merge the stream of data from different tLogs. + + * Each SS does not make its pulled data durable to disk until the data becomes + at least 5 seconds older than the most recent data the SS has pulled. + This allows each SS to roll back at least 5 seconds of mutations. + + * Why do we need roll back feature for SS? This comes from an optimization used in FDB. + To make a mutation available in a SS as soon as possible, + a SS may fetch a mutation from the queuing system that has not been fully replicated. + The mutation’s transaction may be aborted in rare situations, such as + when FDB has to recover from faults and decides to throw away the last few non-fully-durable transactions. + SSes must throw away data in the aborted transactions. + + * Why does SS not make data durable until 5 seconds later? + This is because today’s SS does not support rolling back data that has already been made durable on disk. + To support roll back, SS keeps data that might be rolled back in memory. + When roll-back is needed, SS just throws away the in-memory data. This simplifies the SS implementation. * Each storage process pulls data from the queuing system: https://github.com/apple/foundationdb/blob/07e354c499158630d760283aa845440cbeaaa1ca/fdbserver/storageserver.actor.cpp#L3593-L3599 + + Read write path of a transaction ==================================== This section uses an example transaction to describe how a transaction with both read and write operation works in FDB. -Suppose application creates the following transaction, where *Future* is an object that holds an asynchronous call and becomes ready when the async call returns, and *wait()* is a synchronous point when the code waits for futures to be ready. +Suppose application creates the following transaction, where *Future* is an object that holds an asynchronous call and +becomes ready when the async call returns, and *wait()* is a synchronous point when the code waits for futures to be ready. The following code reads key k1 and k2 from database, increases k1’s value by 1 and write back k1’s new value into database. **Example Transaction** :: @@ -192,36 +398,64 @@ The following code reads key k1 and k2 from database, increases k1’s value by The transaction starts with the read path: -* When tr.get() is called, FDB client issues a timestamp request to proxies *if* the transaction has not set its start timestamp. The logic is the Step 1 in the read path; +* When tr.get() is called, FDB client issues a timestamp request to proxies *if* the transaction has not set its start timestamp. + The logic is the Step 1 in the read path; + * Batching timestamp requests. When another tr.get() is called, it will try to get a timestamp as well. If we let every get request to follow the Step 1 in the read path, the performance overhead (especially network communication) will be a lot. In addition, this is not necessary because a transaction has only one start timestamp. To solve this problem, client chooses to batch timestamp requests from the same transaction and only issues one timestamp request when the transaction size reaches a preconfigured threshold or when the transaction duration reaches the batching timeout threshold. - * Timestamp requests are batched: https://github.com/xumengpanda/foundationdb/blob/4086e3a2750b776cc8bfb0f0e463fe00ac905595/fdbclient/NativeAPI.actor.cpp#L3185 - * Thresholds for client to send the timestamp request: https://github.com/xumengpanda/foundationdb/blob/4086e3a2750b776cc8bfb0f0e463fe00ac905595/fdbclient/NativeAPI.actor.cpp#L3095-L3098 + * Timestamp requests are batched: https://github.com/apple/foundationdb/blob/4086e3a2750b776cc8bfb0f0e463fe00ac905595/fdbclient/NativeAPI.actor.cpp#L3185 + * Thresholds for client to send the timestamp request: https://github.com/apple/foundationdb/blob/4086e3a2750b776cc8bfb0f0e463fe00ac905595/fdbclient/NativeAPI.actor.cpp#L3095-L3098 + * Each read request, i.e., tr.get operation in the example, will follow the read path to get data from storage servers, except that they will share the same timestamp; - * These read requests are sent to FDB cluster in parallel. The ordering of which read request will be ready first depends on requests’ network path and storage servers’ load. + * These read requests are sent to FDB cluster in parallel. + The ordering of which read request will be ready first depends on requests’ network path and storage servers’ load. * In the example, tr.get(k2) may return result earlier than tr.get(k1). + * Client will likely block at the synchronization point at Line 4, until the value is returned from the cluster. - * To maximize clients’ performance, a client can issue multiple transactions concurrently. When one transaction is blocked at the synchronization point, the client can switch to work on the other transactions concurrently. -* Client may or may not block at the synchronization point at Line 5. If tr.get(k2) returns earlier than tr.get(k1), the future fv2 is already ready when the client arrives at Line 5. -* At Line 6, client starts the write path. Because the transaction already has its start timestamp, client does not need to request for the transaction’s start time any more and can skip the Step 2-2 in the write path. + * To maximize clients’ performance, a client can issue multiple transactions concurrently. + When one transaction is blocked at the synchronization point, + the client can switch to work on the other transactions concurrently. + +* Client may or may not block at the synchronization point at Line 5. + If tr.get(k2) returns earlier than tr.get(k1), the future fv2 is already ready when the client arrives at Line 5. + +* At Line 6, client starts the write path. Because the transaction already has its start timestamp, + client does not need to request for the transaction’s start time any more and can skip the Step 2-2 in the write path. + * At Line 7, client commits the transaction, which will trigger the operations from Step 2 in the write path. A transaction can get more complex than the example above. -* A transaction can have more writes operations between Line 6 and Line 7. Those writes will be buffered in client’s memory, which is the Step 1 in the write path. Only when the client calls commit(), will the rest of steps in the write path will be triggered; +* A transaction can have more writes operations between Line 6 and Line 7. + Those writes will be buffered in client’s memory, which is the Step 1 in the write path. + Only when the client calls commit(), will the rest of steps in the write path will be triggered; + * A transaction can have reads operations between Line 6 and Line 7 as well. -* A transaction may return commit_unknown_result, which indicate the transaction may or may not succeed. If application simply retries the transaction, the transaction may get executed twice. To solve this problem, the application can adds a transaction id to the transaction and check if the transaction id exists on the commit_unknown_result error. + +* A transaction may return commit_unknown_result, which indicate the transaction may or may not succeed. + If application simply retries the transaction, the transaction may get executed twice. + To solve this problem, the application can adds a transaction id to the transaction and + check if the transaction id exists on the commit_unknown_result error. Concurrency and ordering of multiple write transactions ======================================================================= -FDB orders concurrent transactions in increasing order of the transactions’ commit timestamp. The ordering is enforced in the timestamp generator, the concurrency control component and the durable queuing system. +FDB orders concurrent transactions in increasing order of the transactions’ commit timestamp. +The ordering is enforced in the timestamp generator, the concurrency control component and the durable queuing system. -* When timestamp generator serves the commit timestamp request from a proxy, the reply includes not only the commit timestamp but also the latest commit timestamp the generator has sent out. For example, the timestamp generator just gave out the commit timestamp 50. When the next request arrives, the generator’s timestamp is 100 and the generator replies (50, 100). When the second request arrives and the generator’s timestamp is 200, the generator replies (100, 200). -* When a proxy sends conflict resolution requests to concurrency control processes or durable requests to the queuing system, each request includes both the current transaction’s commit timestamp and the previous transaction’s commit timestamp. -* Each concurrency control process and each process in the queuing system always process requests in the strict order of the request’s commit version. The semantics is do not process a request whose commit timestamp is V2 until the request at its previous commit timestamp V1 has been processed. +* When timestamp generator serves the commit timestamp request from a proxy, + the reply includes not only the commit timestamp but also the latest commit timestamp the generator has sent out. + For example, the timestamp generator just gave out the commit timestamp 50. + When the next request arrives, the generator’s timestamp is 100 and the generator replies (50, 100). + When the second request arrives and the generator’s timestamp is 200, the generator replies (100, 200). + +* When a proxy sends conflict resolution requests to concurrency control processes or durable requests to the queuing system, + each request includes both the current transaction’s commit timestamp and the previous transaction’s commit timestamp. + +* Each concurrency control process and each process in the queuing system always process requests in the strict order of the request’s commit version. + The semantics is do not process a request whose commit timestamp is V2 until the request at its previous commit timestamp V1 has been processed. We use the following example and draw its swimlane diagram to illustrate how two write transactions are ordered in FDB. From 0613a149a64ae311e8bb120060592ad6f69c18c5 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Fri, 11 Dec 2020 00:22:26 -0800 Subject: [PATCH 151/317] Add rate control on both db file and log file --- fdbserver/KeyValueStoreSQLite.actor.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 5e6fae617f..37616226b5 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -1348,8 +1348,10 @@ void SQLiteDB::open(bool writable) { // Set Rate control if FLOW_KNOBS are positive if (FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT > 0 && FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS > 0) { - dbFile.get()->setRateControl(Reference(new SpeedLimit(FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, - FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS))); + Reference rc(new SpeedLimit(FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, + FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS)); + dbFile.get()->setRateControl(rc); + walFile.get()->setRateControl(rc); } //TraceEvent("KVThreadInitStage").detail("Stage",2).detail("Filename", filename).detail("Writable", writable); From cea7336baed0c55fca6e2d93909fc7b4e413e25b Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Fri, 11 Dec 2020 10:18:02 -0800 Subject: [PATCH 152/317] Remove WiP from Read and Write Path doc --- documentation/sphinx/source/read-write-path.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/sphinx/source/read-write-path.rst b/documentation/sphinx/source/read-write-path.rst index 0674bc1233..c9459a03fd 100644 --- a/documentation/sphinx/source/read-write-path.rst +++ b/documentation/sphinx/source/read-write-path.rst @@ -1,5 +1,5 @@ ############################## -FDB Read and Write Path (WiP) +FDB Read and Write Path ############################## | Author: Meng Xu From 315557f58f1447405526f17fc1f7da08af7645fe Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Fri, 11 Dec 2020 10:33:50 -0800 Subject: [PATCH 153/317] Not all flush will write to disk --- fdbrpc/AsyncFileCached.actor.cpp | 37 +++++++++++--------------------- fdbrpc/AsyncFileCached.actor.h | 4 ++++ 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/fdbrpc/AsyncFileCached.actor.cpp b/fdbrpc/AsyncFileCached.actor.cpp index ef73c13bd0..ec5b6f6e73 100644 --- a/fdbrpc/AsyncFileCached.actor.cpp +++ b/fdbrpc/AsyncFileCached.actor.cpp @@ -19,7 +19,6 @@ */ #include "fdbrpc/AsyncFileCached.actor.h" -#include "flow/actorcompiler.h" // This must be the last #include. //Page caches used in non-simulated environments Optional> pc4k, pc64k; @@ -253,33 +252,23 @@ Future AsyncFileCached::changeFileSize( int64_t size ) { }); } -ACTOR static Future flushActor(AsyncFileCached* self) { - state std::vector> unflushed; - state int debug_count = self->getFlushable().size(); - state int i = 0; - state AFCPage* p; - - for (; i < self->getFlushable().size();) { - p = self->getFlushable()[i]; - // Wait for rate control if it is set - if (self->getRateControl()) wait(self->getRateControl()->getAllowance(1)); - auto f = p->flush(); - if (!f.isReady() || f.isError()) unflushed.push_back( f ); - ASSERT((i < self->getFlushable().size() && self->getFlushable()[i] == p) != f.isReady()); - if (!f.isReady()) i++; - } - - ASSERT(self->getFlushable().size() <= debug_count); - wait(waitForAll(unflushed)); - - return Void(); -} - Future AsyncFileCached::flush() { ++countFileCacheWrites; ++countCacheWrites; - return flushActor(this); + std::vector> unflushed; + + int debug_count = flushable.size(); + for(int i=0; iflush(); + if (!f.isReady() || f.isError()) unflushed.push_back( f ); + ASSERT( (i AsyncFileCached::quiesce() { diff --git a/fdbrpc/AsyncFileCached.actor.h b/fdbrpc/AsyncFileCached.actor.h index 3b328944a2..95e694a9a2 100644 --- a/fdbrpc/AsyncFileCached.actor.h +++ b/fdbrpc/AsyncFileCached.actor.h @@ -512,6 +512,10 @@ struct AFCPage : public EvictablePage, public FastAllocated { wait( self->notReading && self->notFlushing ); if (dirty) { + // Wait for rate control if it is set + if (self->owner->getRateControl()) + wait(self->owner->getRateControl()->getAllowance(1)); + if ( self->pageOffset + self->pageCache->pageSize > self->owner->length ) { ASSERT(self->pageOffset < self->owner->length); memset( static_cast(self->data) + self->owner->length - self->pageOffset, 0, self->pageCache->pageSize - (self->owner->length - self->pageOffset) ); From d7ebae07f5adb051fe00fbe755bb3aa460b33192 Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Sat, 12 Dec 2020 02:40:06 -0800 Subject: [PATCH 154/317] Added yield to remap cleanup loop to prevent a stack overflow if too many queue entries are processed without waiting on IO. --- fdbserver/VersionedBTree.actor.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fdbserver/VersionedBTree.actor.cpp b/fdbserver/VersionedBTree.actor.cpp index 40a7763c2c..26da92f01c 100644 --- a/fdbserver/VersionedBTree.actor.cpp +++ b/fdbserver/VersionedBTree.actor.cpp @@ -1837,6 +1837,7 @@ public: state Version minStopVersion = cutoff.version - (BUGGIFY ? deterministicRandom()->randomInt(0, 10) : (self->remapCleanupWindow * SERVER_KNOBS->REDWOOD_REMAP_CLEANUP_LAG)); self->remapDestinationsSimOnly.clear(); + state int sinceYield = 0; loop { state Optional p = wait(self->remapQueue.pop(cutoff)); debug_printf("DWALPager(%s) remapCleanup popped %s\n", self->filename.c_str(), ::toString(p).c_str()); @@ -1855,6 +1856,11 @@ public: if (self->remapCleanupStop && p.get().version >= minStopVersion) { break; } + + if(++sinceYield >= 100) { + sinceYield = 0; + wait(yield()); + } } debug_printf("DWALPager(%s) remapCleanup stopped (stop=%d)\n", self->filename.c_str(), self->remapCleanupStop); From 15ac27ef94cfc0a4a3545c287b9ba5fea2b31571 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Wed, 16 Dec 2020 11:16:13 -0800 Subject: [PATCH 155/317] Added a metric into ProxyMetrics to expose current commit batching window, which can be used as an indicator of the load on the proxy. --- fdbserver/MasterProxyServer.actor.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index cc5f9a2e86..d7c078d5c9 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -65,6 +65,7 @@ struct ProxyStats { Version lastCommitVersionAssigned; double transactionRateAllowed, batchTransactionRateAllowed; double transactionLimit, batchTransactionLimit; + double commitBatchInterval; // how much of the GRV requests queue was processed in one attempt to hand out read version. double percentageOfDefaultGRVQueueProcessed; double percentageOfBatchGRVQueueProcessed; @@ -122,6 +123,7 @@ struct ProxyStats { [this]() { return this->percentageOfDefaultGRVQueueProcessed; }); specialCounter(cc, "PercentageOfBatchGRVQueueProcessed", [this]() { return this->percentageOfBatchGRVQueueProcessed; }); + specialCounter(cc, "DynamicCommitBatchWindow", [this]() { return this->commitBatchInterval; }); logger = traceCounters("ProxyMetrics", id, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "ProxyMetrics"); } }; @@ -1253,6 +1255,7 @@ ACTOR Future commitBatch( std::min(SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_MAX, target_latency * SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_SMOOTHER_ALPHA + self->commitBatchInterval * (1-SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_SMOOTHER_ALPHA))); + self->stats.commitBatchInterval = self->commitBatchInterval; self->commitBatchesMemBytesCount -= currentBatchMemBytesCount; ASSERT_ABORT(self->commitBatchesMemBytesCount >= 0); From 35e8bf3ec7bab3ea7166dd0b48ea1e7a206171f2 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Fri, 18 Dec 2020 16:33:46 -0800 Subject: [PATCH 156/317] Change from logging point value to logging histogram. --- fdbserver/MasterProxyServer.actor.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index d7c078d5c9..1c4814800e 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -65,7 +65,6 @@ struct ProxyStats { Version lastCommitVersionAssigned; double transactionRateAllowed, batchTransactionRateAllowed; double transactionLimit, batchTransactionLimit; - double commitBatchInterval; // how much of the GRV requests queue was processed in one attempt to hand out read version. double percentageOfDefaultGRVQueueProcessed; double percentageOfBatchGRVQueueProcessed; @@ -79,6 +78,8 @@ struct ProxyStats { LatencyBands commitLatencyBands; LatencyBands grvLatencyBands; + LatencySample commitBatchingWindowSize; + Future logger; explicit ProxyStats(UID id, Version* pVersion, NotifiedVersion* pCommittedVersion, @@ -102,6 +103,8 @@ struct ProxyStats { SERVER_KNOBS->LATENCY_SAMPLE_SIZE), grvLatencySample("GRVLatencyMetrics", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, SERVER_KNOBS->LATENCY_SAMPLE_SIZE), + commitBatchingWindowSize("CommitBatchingWindowSize", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, + SERVER_KNOBS->LATENCY_SAMPLE_SIZE), commitLatencyBands("CommitLatencyBands", id, SERVER_KNOBS->STORAGE_LOGGING_DELAY), grvLatencyBands("GRVLatencyBands", id, SERVER_KNOBS->STORAGE_LOGGING_DELAY), defaultTxnGRVTimeInQueue("DefaultTxnGRVTimeInQueue", id, SERVER_KNOBS->LATENCY_METRICS_LOGGING_INTERVAL, @@ -123,7 +126,6 @@ struct ProxyStats { [this]() { return this->percentageOfDefaultGRVQueueProcessed; }); specialCounter(cc, "PercentageOfBatchGRVQueueProcessed", [this]() { return this->percentageOfBatchGRVQueueProcessed; }); - specialCounter(cc, "DynamicCommitBatchWindow", [this]() { return this->commitBatchInterval; }); logger = traceCounters("ProxyMetrics", id, SERVER_KNOBS->WORKER_LOGGING_INTERVAL, &cc, "ProxyMetrics"); } }; @@ -1255,7 +1257,7 @@ ACTOR Future commitBatch( std::min(SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_MAX, target_latency * SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_SMOOTHER_ALPHA + self->commitBatchInterval * (1-SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_SMOOTHER_ALPHA))); - self->stats.commitBatchInterval = self->commitBatchInterval; + self->stats.commitBatchingWindowSize.addMeasurement(self->commitBatchInterval); self->commitBatchesMemBytesCount -= currentBatchMemBytesCount; ASSERT_ABORT(self->commitBatchesMemBytesCount >= 0); From c3b152113c29a114ff98c2c42508dc547c8f7cbf Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Tue, 22 Dec 2020 13:57:13 -0800 Subject: [PATCH 157/317] Update release notes and download links. --- documentation/sphinx/source/downloads.rst | 24 +++++++++---------- .../release-notes/release-notes-620.rst | 3 +++ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/documentation/sphinx/source/downloads.rst b/documentation/sphinx/source/downloads.rst index 065440b8c5..e4de4ac711 100644 --- a/documentation/sphinx/source/downloads.rst +++ b/documentation/sphinx/source/downloads.rst @@ -10,38 +10,38 @@ macOS The macOS installation package is supported on macOS 10.7+. It includes the client and (optionally) the server. -* `FoundationDB-6.2.28.pkg `_ +* `FoundationDB-6.2.29.pkg `_ Ubuntu ------ The Ubuntu packages are supported on 64-bit Ubuntu 12.04+, but beware of the Linux kernel bug in Ubuntu 12.x. -* `foundationdb-clients-6.2.28-1_amd64.deb `_ -* `foundationdb-server-6.2.28-1_amd64.deb `_ (depends on the clients package) +* `foundationdb-clients-6.2.29-1_amd64.deb `_ +* `foundationdb-server-6.2.29-1_amd64.deb `_ (depends on the clients package) RHEL/CentOS EL6 --------------- The RHEL/CentOS EL6 packages are supported on 64-bit RHEL/CentOS 6.x. -* `foundationdb-clients-6.2.28-1.el6.x86_64.rpm `_ -* `foundationdb-server-6.2.28-1.el6.x86_64.rpm `_ (depends on the clients package) +* `foundationdb-clients-6.2.29-1.el6.x86_64.rpm `_ +* `foundationdb-server-6.2.29-1.el6.x86_64.rpm `_ (depends on the clients package) RHEL/CentOS EL7 --------------- The RHEL/CentOS EL7 packages are supported on 64-bit RHEL/CentOS 7.x. -* `foundationdb-clients-6.2.28-1.el7.x86_64.rpm `_ -* `foundationdb-server-6.2.28-1.el7.x86_64.rpm `_ (depends on the clients package) +* `foundationdb-clients-6.2.29-1.el7.x86_64.rpm `_ +* `foundationdb-server-6.2.29-1.el7.x86_64.rpm `_ (depends on the clients package) Windows ------- The Windows installer is supported on 64-bit Windows XP and later. It includes the client and (optionally) the server. -* `foundationdb-6.2.28-x64.msi `_ +* `foundationdb-6.2.29-x64.msi `_ API Language Bindings ===================== @@ -58,18 +58,18 @@ On macOS and Windows, the FoundationDB Python API bindings are installed as part If you need to use the FoundationDB Python API from other Python installations or paths, download the Python package: -* `foundationdb-6.2.28.tar.gz `_ +* `foundationdb-6.2.29.tar.gz `_ Ruby 1.9.3/2.0.0+ ----------------- -* `fdb-6.2.28.gem `_ +* `fdb-6.2.29.gem `_ Java 8+ ------- -* `fdb-java-6.2.28.jar `_ -* `fdb-java-6.2.28-javadoc.jar `_ +* `fdb-java-6.2.29.jar `_ +* `fdb-java-6.2.29-javadoc.jar `_ Go 1.11+ -------- diff --git a/documentation/sphinx/source/release-notes/release-notes-620.rst b/documentation/sphinx/source/release-notes/release-notes-620.rst index 07f3ce02d7..fa51a8190f 100644 --- a/documentation/sphinx/source/release-notes/release-notes-620.rst +++ b/documentation/sphinx/source/release-notes/release-notes-620.rst @@ -10,6 +10,9 @@ Release Notes * Add human-readable DateTime to trace events `(PR #4087) `_ * Proxy rejects transaction batch that exceeds MVCC window `(PR #4113) `_ * Add a command in fdbcli to manually trigger the detailed teams information loggings in data distribution. `(PR #4060) `_ +* Add documentation on read and write Path. `(PR #4099) `_ +* Add a histogram to expose commit batching window on Proxies. `(PR #4166) `_ +* Fix double counting of range reads in TransactionMetrics. `(PR #4130) `_ 6.2.28 ====== From a1809f7d8610531b5be9034df9c34b7bfd4b3cca Mon Sep 17 00:00:00 2001 From: Vishesh Yadav Date: Tue, 15 Dec 2020 14:42:07 -0800 Subject: [PATCH 158/317] doc: Fault Tolerance and Region Configuration --- fdbclient/DatabaseConfiguration.h | 143 ++++++++++++++++++++---------- fdbserver/LogSystemConfig.h | 2 +- fdbserver/Status.actor.cpp | 1 + 3 files changed, 96 insertions(+), 50 deletions(-) diff --git a/fdbclient/DatabaseConfiguration.h b/fdbclient/DatabaseConfiguration.h index 46f1d76dba..7f6b410eb3 100644 --- a/fdbclient/DatabaseConfiguration.h +++ b/fdbclient/DatabaseConfiguration.h @@ -51,9 +51,19 @@ struct RegionInfo { int32_t priority; Reference satelliteTLogPolicy; + + // Number of tLogs that should be recruited in satellite datacenters. int32_t satelliteDesiredTLogCount; + + // Total number of copies made for each mutation across all satellite tLogs in all DCs. int32_t satelliteTLogReplicationFactor; + + // Number of tLog replies we can ignore when waiting for quorum. Hence, effective quorum is + // satelliteDesiredTLogCount - satelliteTLogWriteAntiQuorum. Locality of individual tLogs is not taken + // into account. int32_t satelliteTLogWriteAntiQuorum; + + // Number of satellite datacenters for current region, as set by `satellite_redundancy_mode`. int32_t satelliteTLogUsableDcs; Reference satelliteTLogPolicyFallback; @@ -63,27 +73,32 @@ struct RegionInfo { std::vector satellites; - RegionInfo() : priority(0), satelliteDesiredTLogCount(-1), satelliteTLogReplicationFactor(0), satelliteTLogWriteAntiQuorum(0), satelliteTLogUsableDcs(1), - satelliteTLogReplicationFactorFallback(0), satelliteTLogWriteAntiQuorumFallback(0), satelliteTLogUsableDcsFallback(0) {} + RegionInfo() + : priority(0), satelliteDesiredTLogCount(-1), satelliteTLogReplicationFactor(0), satelliteTLogWriteAntiQuorum(0), + satelliteTLogUsableDcs(1), satelliteTLogReplicationFactorFallback(0), satelliteTLogWriteAntiQuorumFallback(0), + satelliteTLogUsableDcsFallback(0) {} struct sort_by_priority { - bool operator ()(RegionInfo const&a, RegionInfo const& b) const { return a.priority > b.priority; } + bool operator()(RegionInfo const& a, RegionInfo const& b) const { return a.priority > b.priority; } }; template void serialize(Ar& ar) { - serializer(ar, dcId, priority, satelliteTLogPolicy, satelliteDesiredTLogCount, satelliteTLogReplicationFactor, satelliteTLogWriteAntiQuorum, satelliteTLogUsableDcs, - satelliteTLogPolicyFallback, satelliteTLogReplicationFactorFallback, satelliteTLogWriteAntiQuorumFallback, satelliteTLogUsableDcsFallback, satellites); + serializer(ar, dcId, priority, satelliteTLogPolicy, satelliteDesiredTLogCount, satelliteTLogReplicationFactor, + satelliteTLogWriteAntiQuorum, satelliteTLogUsableDcs, satelliteTLogPolicyFallback, + satelliteTLogReplicationFactorFallback, satelliteTLogWriteAntiQuorumFallback, + satelliteTLogUsableDcsFallback, satellites); } }; struct DatabaseConfiguration { DatabaseConfiguration(); - void applyMutation( MutationRef mutation ); - bool set( KeyRef key, ValueRef value ); // Returns true if a configuration option that requires recovery to take effect is changed - bool clear( KeyRangeRef keys ); - Optional get( KeyRef key ) const; + void applyMutation(MutationRef mutation); + bool set(KeyRef key, + ValueRef value); // Returns true if a configuration option that requires recovery to take effect is changed + bool clear(KeyRangeRef keys); + Optional get(KeyRef key) const; bool isValid() const; @@ -92,62 +107,73 @@ struct DatabaseConfiguration { std::string toString() const; StatusObject toJSON(bool noPolicies = false) const; StatusArray getRegionJSON() const; - - RegionInfo getRegion( Optional dcId ) const { - if(!dcId.present()) { + + RegionInfo getRegion(Optional dcId) const { + if (!dcId.present()) { return RegionInfo(); } - for(auto& r : regions) { - if(r.dcId == dcId.get()) { + for (auto& r : regions) { + if (r.dcId == dcId.get()) { return r; } } return RegionInfo(); } - int expectedLogSets( Optional dcId ) const { + int expectedLogSets(Optional dcId) const { int result = 1; - if(dcId.present() && getRegion(dcId.get()).satelliteTLogReplicationFactor > 0 && usableRegions > 1) { + if (dcId.present() && getRegion(dcId.get()).satelliteTLogReplicationFactor > 0 && usableRegions > 1) { result++; } - - if(usableRegions > 1) { + + if (usableRegions > 1) { result++; } return result; } + // Counts the number of DCs required including remote and satellites for current database configuraiton. int32_t minDatacentersRequired() const { int minRequired = 0; - for(auto& r : regions) { + for (auto& r : regions) { minRequired += 1 + r.satellites.size(); } return minRequired; } + int32_t minZonesRequiredPerDatacenter() const { - int minRequired = std::max( remoteTLogReplicationFactor, std::max(tLogReplicationFactor, storageTeamSize) ); - for(auto& r : regions) { - minRequired = std::max( minRequired, r.satelliteTLogReplicationFactor/std::max(1, r.satelliteTLogUsableDcs) ); + int minRequired = std::max(remoteTLogReplicationFactor, std::max(tLogReplicationFactor, storageTeamSize)); + for (auto& r : regions) { + minRequired = + std::max(minRequired, r.satelliteTLogReplicationFactor / std::max(1, r.satelliteTLogUsableDcs)); } return minRequired; } - //Killing an entire datacenter counts as killing one zone in modes that support it + // Retuns the maximum number of discrete failures a cluster can tolerate. + // In HA mode, `fullyReplicatedRegions` is set to false initially when data is being + // replicated to remote, and will be true later. `forAvailablity` is set to true + // if we want to account the number for machines that can recruit new tLogs/SS after failures. + // Killing an entire datacenter counts as killing one zone in modes that support it int32_t maxZoneFailuresTolerated(int fullyReplicatedRegions, bool forAvailability) const { int worstSatellite = regions.size() ? std::numeric_limits::max() : 0; int regionsWithNonNegativePriority = 0; - for(auto& r : regions) { - if(r.priority >= 0) { + for (auto& r : regions) { + if (r.priority >= 0) { regionsWithNonNegativePriority++; } - worstSatellite = std::min(worstSatellite, r.satelliteTLogReplicationFactor - r.satelliteTLogWriteAntiQuorum); - if(r.satelliteTLogUsableDcsFallback > 0) { - worstSatellite = std::min(worstSatellite, r.satelliteTLogReplicationFactorFallback - r.satelliteTLogWriteAntiQuorumFallback); + worstSatellite = + std::min(worstSatellite, r.satelliteTLogReplicationFactor - r.satelliteTLogWriteAntiQuorum); + if (r.satelliteTLogUsableDcsFallback > 0) { + worstSatellite = std::min(worstSatellite, r.satelliteTLogReplicationFactorFallback - + r.satelliteTLogWriteAntiQuorumFallback); } } - if(usableRegions > 1 && fullyReplicatedRegions > 1 && worstSatellite > 0 && (!forAvailability || regionsWithNonNegativePriority > 1)) { - return 1 + std::min(std::max(tLogReplicationFactor - 1 - tLogWriteAntiQuorum, worstSatellite - 1), storageTeamSize - 1); - } else if(worstSatellite > 0) { + if (usableRegions > 1 && fullyReplicatedRegions > 1 && worstSatellite > 0 && + (!forAvailability || regionsWithNonNegativePriority > 1)) { + return 1 + std::min(std::max(tLogReplicationFactor - 1 - tLogWriteAntiQuorum, worstSatellite - 1), + storageTeamSize - 1); + } else if (worstSatellite > 0) { return std::min(tLogReplicationFactor + worstSatellite - 2 - tLogWriteAntiQuorum, storageTeamSize - 1); } return std::min(tLogReplicationFactor - 1 - tLogWriteAntiQuorum, storageTeamSize - 1); @@ -185,27 +211,47 @@ struct DatabaseConfiguration { // Backup Workers bool backupWorkerEnabled; - //Data centers - int32_t usableRegions; + // Data centers + int32_t usableRegions; // Number of regions which have a replica of the database. int32_t repopulateRegionAntiQuorum; std::vector regions; // Excluded servers (no state should be here) - bool isExcludedServer( NetworkAddressList ) const; + bool isExcludedServer(NetworkAddressList) const; std::set getExcludedServers() const; - int32_t getDesiredProxies() const { if(masterProxyCount == -1) return autoMasterProxyCount; return masterProxyCount; } - int32_t getDesiredResolvers() const { if(resolverCount == -1) return autoResolverCount; return resolverCount; } - int32_t getDesiredLogs() const { if(desiredTLogCount == -1) return autoDesiredTLogCount; return desiredTLogCount; } - int32_t getDesiredRemoteLogs() const { if(remoteDesiredTLogCount == -1) return getDesiredLogs(); return remoteDesiredTLogCount; } - int32_t getDesiredSatelliteLogs( Optional dcId ) const { - auto desired = getRegion(dcId).satelliteDesiredTLogCount; - if(desired == -1) return autoDesiredTLogCount; return desired; + int32_t getDesiredProxies() const { + if (masterProxyCount == -1) return autoMasterProxyCount; + return masterProxyCount; } - int32_t getRemoteTLogReplicationFactor() const { if(remoteTLogReplicationFactor == 0) return tLogReplicationFactor; return remoteTLogReplicationFactor; } - Reference getRemoteTLogPolicy() const { if(remoteTLogReplicationFactor == 0) return tLogPolicy; return remoteTLogPolicy; } + int32_t getDesiredResolvers() const { + if (resolverCount == -1) return autoResolverCount; + return resolverCount; + } + int32_t getDesiredLogs() const { + if (desiredTLogCount == -1) return autoDesiredTLogCount; + return desiredTLogCount; + } + int32_t getDesiredRemoteLogs() const { + if (remoteDesiredTLogCount == -1) return getDesiredLogs(); + return remoteDesiredTLogCount; + } + int32_t getDesiredSatelliteLogs(Optional dcId) const { - bool operator == ( DatabaseConfiguration const& rhs ) const { + auto desired = getRegion(dcId).satelliteDesiredTLogCount; + if (desired == -1) return autoDesiredTLogCount; + return desired; + } + int32_t getRemoteTLogReplicationFactor() const { + if (remoteTLogReplicationFactor == 0) return tLogReplicationFactor; + return remoteTLogReplicationFactor; + } + Reference getRemoteTLogPolicy() const { + if (remoteTLogReplicationFactor == 0) return tLogPolicy; + return remoteTLogPolicy; + } + + bool operator==(DatabaseConfiguration const& rhs) const { const_cast(this)->makeConfigurationImmutable(); const_cast(&rhs)->makeConfigurationImmutable(); return rawConfiguration == rhs.rawConfiguration; @@ -216,8 +262,7 @@ struct DatabaseConfiguration { if (!ar.isDeserializing) makeConfigurationImmutable(); serializer(ar, rawConfiguration); if (ar.isDeserializing) { - for(auto c=rawConfiguration.begin(); c!=rawConfiguration.end(); ++c) - setInternal(c->key, c->value); + for (auto c = rawConfiguration.begin(); c != rawConfiguration.end(); ++c) setInternal(c->key, c->value); setDefaultReplicationPolicy(); } } @@ -225,13 +270,13 @@ struct DatabaseConfiguration { void fromKeyValues(Standalone> rawConfig); private: - Optional< std::map > mutableConfiguration; // If present, rawConfiguration is not valid - Standalone> rawConfiguration; // sorted by key + Optional> mutableConfiguration; // If present, rawConfiguration is not valid + Standalone> rawConfiguration; // sorted by key void makeConfigurationMutable(); void makeConfigurationImmutable(); - bool setInternal( KeyRef key, ValueRef value ); + bool setInternal(KeyRef key, ValueRef value); void resetInternal(); void setDefaultReplicationPolicy(); diff --git a/fdbserver/LogSystemConfig.h b/fdbserver/LogSystemConfig.h index 37834f63d2..1697cf8c70 100644 --- a/fdbserver/LogSystemConfig.h +++ b/fdbserver/LogSystemConfig.h @@ -78,7 +78,7 @@ struct serializable_traits> : std::true_type { } }; - +// Contains a generation of tLogs for an individual DC. struct TLogSet { constexpr static FileIdentifier file_identifier = 6302317; std::vector> tLogs; diff --git a/fdbserver/Status.actor.cpp b/fdbserver/Status.actor.cpp index 649875be00..d5ae2c6dbf 100644 --- a/fdbserver/Status.actor.cpp +++ b/fdbserver/Status.actor.cpp @@ -1607,6 +1607,7 @@ ACTOR static Future>> getProxie return results; } +// Returns the number of zones eligble for recruiting new tLogs after failures, to maintain the current replication factor. static int getExtraTLogEligibleZones(const vector& workers, const DatabaseConfiguration& configuration) { std::set allZones; std::map> dcId_zone; From 6957e648863e9233a5a48577ad41729e7f7f9b9e Mon Sep 17 00:00:00 2001 From: Vishesh Yadav Date: Tue, 22 Dec 2020 16:26:19 -0800 Subject: [PATCH 159/317] fix: Calculate fault tolerance when keys are not fully replicated Whem the database is not fully replicated to remote, fault tolerance can be calculated by couting total number of tLogs replicas in primary and satellite - 1, as we can lose all but one of those, but we were subtracting 2 instead of 1. --- fdbclient/DatabaseConfiguration.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fdbclient/DatabaseConfiguration.h b/fdbclient/DatabaseConfiguration.h index 7f6b410eb3..1d85c93606 100644 --- a/fdbclient/DatabaseConfiguration.h +++ b/fdbclient/DatabaseConfiguration.h @@ -174,7 +174,8 @@ struct DatabaseConfiguration { return 1 + std::min(std::max(tLogReplicationFactor - 1 - tLogWriteAntiQuorum, worstSatellite - 1), storageTeamSize - 1); } else if (worstSatellite > 0) { - return std::min(tLogReplicationFactor + worstSatellite - 2 - tLogWriteAntiQuorum, storageTeamSize - 1); + // Primary and Satellite tLogs are synchronously replicated, hence we can lose all but 1. + return std::min(tLogReplicationFactor + worstSatellite - 1 - tLogWriteAntiQuorum, storageTeamSize - 1); } return std::min(tLogReplicationFactor - 1 - tLogWriteAntiQuorum, storageTeamSize - 1); } From d1a715a85c4852fe8e7d2b2e96abbb59cf829c3d Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Tue, 22 Dec 2020 21:32:23 -0800 Subject: [PATCH 160/317] update version to 6.2.30 --- CMakeLists.txt | 2 +- versions.target | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 567d81c91f..0e18f25556 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ # limitations under the License. cmake_minimum_required(VERSION 3.12) project(foundationdb - VERSION 6.2.29 + VERSION 6.2.30 DESCRIPTION "FoundationDB is a scalable, fault-tolerant, ordered key-value store with full ACID transactions." HOMEPAGE_URL "http://www.foundationdb.org/" LANGUAGES C CXX ASM) diff --git a/versions.target b/versions.target index 0347371b31..75e3f0fe92 100644 --- a/versions.target +++ b/versions.target @@ -1,7 +1,7 @@ - 6.2.29 + 6.2.30 6.2 From a3d2607ca310cbef594f2f692da0bc43f071d8ad Mon Sep 17 00:00:00 2001 From: Jingyu Zhou Date: Tue, 22 Dec 2020 21:32:23 -0800 Subject: [PATCH 161/317] update installer WIX GUID following release --- packaging/msi/FDBInstaller.wxs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/msi/FDBInstaller.wxs b/packaging/msi/FDBInstaller.wxs index 2c6c498372..8e97797d6e 100644 --- a/packaging/msi/FDBInstaller.wxs +++ b/packaging/msi/FDBInstaller.wxs @@ -32,7 +32,7 @@ Date: Wed, 23 Dec 2020 14:33:30 -0800 Subject: [PATCH 162/317] Resolver merge conflicts --- CMakeLists.txt | 4 --- .../sphinx/source/command-line-interface.rst | 4 +-- documentation/sphinx/source/downloads.rst | 36 ------------------- fdbserver/MasterProxyServer.actor.cpp | 7 ---- packaging/msi/FDBInstaller.wxs | 4 --- versions.target | 5 --- 6 files changed, 1 insertion(+), 59 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ee2d0bafbf..844d302637 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,11 +18,7 @@ # limitations under the License. cmake_minimum_required(VERSION 3.13) project(foundationdb -<<<<<<< HEAD VERSION 6.3.10 -======= - VERSION 6.2.30 ->>>>>>> 5a2b1ab258ecb3cb8992823e6ffe50637ff7e545 DESCRIPTION "FoundationDB is a scalable, fault-tolerant, ordered key-value store with full ACID transactions." HOMEPAGE_URL "http://www.foundationdb.org/" LANGUAGES C CXX ASM) diff --git a/documentation/sphinx/source/command-line-interface.rst b/documentation/sphinx/source/command-line-interface.rst index 61f2aa74b1..84eef0d696 100644 --- a/documentation/sphinx/source/command-line-interface.rst +++ b/documentation/sphinx/source/command-line-interface.rst @@ -393,7 +393,6 @@ status json ``status json`` will provide the cluster status in its JSON format. For a detailed description of this format, see :doc:`mr-status`. -<<<<<<< HEAD .. _cli-throttle: throttle @@ -469,12 +468,11 @@ list Prints a list of currently active transaction tag throttles. ``LIMIT`` - The number of throttles to print. Defaults to 100. -======= + triggerddteaminfolog -------------------- The ``triggerddteaminfolog`` command would trigger the data distributor to log very detailed teams information into trace event logs. ->>>>>>> 5a2b1ab258ecb3cb8992823e6ffe50637ff7e545 unlock ------ diff --git a/documentation/sphinx/source/downloads.rst b/documentation/sphinx/source/downloads.rst index 5b470ab5cc..825eefab40 100644 --- a/documentation/sphinx/source/downloads.rst +++ b/documentation/sphinx/source/downloads.rst @@ -10,61 +10,38 @@ macOS The macOS installation package is supported on macOS 10.7+. It includes the client and (optionally) the server. -<<<<<<< HEAD * `FoundationDB-6.3.9.pkg `_ -======= -* `FoundationDB-6.2.29.pkg `_ ->>>>>>> 5a2b1ab258ecb3cb8992823e6ffe50637ff7e545 Ubuntu ------ The Ubuntu packages are supported on 64-bit Ubuntu 12.04+, but beware of the Linux kernel bug in Ubuntu 12.x. -<<<<<<< HEAD * `foundationdb-clients-6.3.9-1_amd64.deb `_ * `foundationdb-server-6.3.9-1_amd64.deb `_ (depends on the clients package) -======= -* `foundationdb-clients-6.2.29-1_amd64.deb `_ -* `foundationdb-server-6.2.29-1_amd64.deb `_ (depends on the clients package) ->>>>>>> 5a2b1ab258ecb3cb8992823e6ffe50637ff7e545 RHEL/CentOS EL6 --------------- The RHEL/CentOS EL6 packages are supported on 64-bit RHEL/CentOS 6.x. -<<<<<<< HEAD * `foundationdb-clients-6.3.9-1.el6.x86_64.rpm `_ * `foundationdb-server-6.3.9-1.el6.x86_64.rpm `_ (depends on the clients package) -======= -* `foundationdb-clients-6.2.29-1.el6.x86_64.rpm `_ -* `foundationdb-server-6.2.29-1.el6.x86_64.rpm `_ (depends on the clients package) ->>>>>>> 5a2b1ab258ecb3cb8992823e6ffe50637ff7e545 RHEL/CentOS EL7 --------------- The RHEL/CentOS EL7 packages are supported on 64-bit RHEL/CentOS 7.x. -<<<<<<< HEAD * `foundationdb-clients-6.3.9-1.el7.x86_64.rpm `_ * `foundationdb-server-6.3.9-1.el7.x86_64.rpm `_ (depends on the clients package) -======= -* `foundationdb-clients-6.2.29-1.el7.x86_64.rpm `_ -* `foundationdb-server-6.2.29-1.el7.x86_64.rpm `_ (depends on the clients package) ->>>>>>> 5a2b1ab258ecb3cb8992823e6ffe50637ff7e545 Windows ------- The Windows installer is supported on 64-bit Windows XP and later. It includes the client and (optionally) the server. -<<<<<<< HEAD * `foundationdb-6.3.9-x64.msi `_ -======= -* `foundationdb-6.2.29-x64.msi `_ ->>>>>>> 5a2b1ab258ecb3cb8992823e6ffe50637ff7e545 API Language Bindings ===================== @@ -81,31 +58,18 @@ On macOS and Windows, the FoundationDB Python API bindings are installed as part If you need to use the FoundationDB Python API from other Python installations or paths, use the Python package manager ``pip`` (``pip install foundationdb``) or download the Python package: -<<<<<<< HEAD * `foundationdb-6.3.9.tar.gz `_ -======= -* `foundationdb-6.2.29.tar.gz `_ ->>>>>>> 5a2b1ab258ecb3cb8992823e6ffe50637ff7e545 Ruby 1.9.3/2.0.0+ ----------------- -<<<<<<< HEAD * `fdb-6.3.9.gem `_ -======= -* `fdb-6.2.29.gem `_ ->>>>>>> 5a2b1ab258ecb3cb8992823e6ffe50637ff7e545 Java 8+ ------- -<<<<<<< HEAD * `fdb-java-6.3.9.jar `_ * `fdb-java-6.3.9-javadoc.jar `_ -======= -* `fdb-java-6.2.29.jar `_ -* `fdb-java-6.2.29-javadoc.jar `_ ->>>>>>> 5a2b1ab258ecb3cb8992823e6ffe50637ff7e545 Go 1.11+ -------- diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index d8ea9673c2..fe15a73e74 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -1509,20 +1509,13 @@ ACTOR Future commitBatch( // Dynamic batching for commits double target_latency = (now() - t1) * SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_LATENCY_FRACTION; -<<<<<<< HEAD self->commitBatchInterval = std::max( SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_MIN, std::min(SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_MAX, target_latency * SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_SMOOTHER_ALPHA + self->commitBatchInterval * (1 - SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_SMOOTHER_ALPHA))); -======= - self->commitBatchInterval = - std::max(SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_MIN, - std::min(SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_MAX, - target_latency * SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_SMOOTHER_ALPHA + self->commitBatchInterval * (1-SERVER_KNOBS->COMMIT_TRANSACTION_BATCH_INTERVAL_SMOOTHER_ALPHA))); self->stats.commitBatchingWindowSize.addMeasurement(self->commitBatchInterval); ->>>>>>> 5a2b1ab258ecb3cb8992823e6ffe50637ff7e545 self->commitBatchesMemBytesCount -= currentBatchMemBytesCount; ASSERT_ABORT(self->commitBatchesMemBytesCount >= 0); diff --git a/packaging/msi/FDBInstaller.wxs b/packaging/msi/FDBInstaller.wxs index 689f28c2db..63a724ab46 100644 --- a/packaging/msi/FDBInstaller.wxs +++ b/packaging/msi/FDBInstaller.wxs @@ -32,11 +32,7 @@ >>>>>> 5a2b1ab258ecb3cb8992823e6ffe50637ff7e545 UpgradeCode='{A95EA002-686E-4164-8356-C715B7F8B1C8}' Version='$(var.Version)' Manufacturer='$(var.Manufacturer)' diff --git a/versions.target b/versions.target index 7822ca96b5..8b1467c77e 100644 --- a/versions.target +++ b/versions.target @@ -1,12 +1,7 @@ -<<<<<<< HEAD 6.3.10 6.3 -======= - 6.2.30 - 6.2 ->>>>>>> 5a2b1ab258ecb3cb8992823e6ffe50637ff7e545 From 58360a192fda6550c5a564d0d42daffe7667a4ad Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Tue, 5 Jan 2021 10:18:43 -0800 Subject: [PATCH 163/317] Add a counter for the number of status requests made by a client --- fdbclient/DatabaseContext.h | 1 + fdbclient/NativeAPI.actor.cpp | 18 +++++++++--------- fdbclient/ReadYourWrites.actor.cpp | 1 + 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/fdbclient/DatabaseContext.h b/fdbclient/DatabaseContext.h index a0d2ea6414..b0760df84a 100644 --- a/fdbclient/DatabaseContext.h +++ b/fdbclient/DatabaseContext.h @@ -188,6 +188,7 @@ public: Counter transactionsCommitCompleted; Counter transactionKeyServerLocationRequests; Counter transactionKeyServerLocationRequestsCompleted; + Counter transactionStatusRequests; Counter transactionsTooOld; Counter transactionsFutureVersions; Counter transactionsNotCommitted; diff --git a/fdbclient/NativeAPI.actor.cpp b/fdbclient/NativeAPI.actor.cpp index da4c362378..649aa0fc25 100644 --- a/fdbclient/NativeAPI.actor.cpp +++ b/fdbclient/NativeAPI.actor.cpp @@ -524,10 +524,11 @@ DatabaseContext::DatabaseContext( transactionBytesRead("BytesRead", cc), transactionKeysRead("KeysRead", cc), transactionMetadataVersionReads("MetadataVersionReads", cc), transactionCommittedMutations("CommittedMutations", cc), transactionCommittedMutationBytes("CommittedMutationBytes", cc), transactionSetMutations("SetMutations", cc), transactionClearMutations("ClearMutations", cc), transactionAtomicMutations("AtomicMutations", cc), transactionsCommitStarted("CommitStarted", cc), transactionsCommitCompleted("CommitCompleted", cc), - transactionKeyServerLocationRequests("KeyServerLocationRequests", cc), transactionKeyServerLocationRequestsCompleted("KeyServerLocationRequestsCompleted", cc), transactionsTooOld("TooOld", cc), - transactionsFutureVersions("FutureVersions", cc), transactionsNotCommitted("NotCommitted", cc), transactionsMaybeCommitted("MaybeCommitted", cc), - transactionsResourceConstrained("ResourceConstrained", cc), transactionsProcessBehind("ProcessBehind", cc), outstandingWatches(0), latencies(1000), readLatencies(1000), commitLatencies(1000), - GRVLatencies(1000), mutationsPerCommit(1000), bytesPerCommit(1000), mvCacheInsertLocation(0), healthMetricsLastUpdated(0), detailedHealthMetricsLastUpdated(0), internal(internal) + transactionKeyServerLocationRequests("KeyServerLocationRequests", cc), transactionKeyServerLocationRequestsCompleted("KeyServerLocationRequestsCompleted", cc), + transactionStatusRequests("StatusRequests", cc), transactionsTooOld("TooOld", cc), transactionsFutureVersions("FutureVersions", cc), transactionsNotCommitted("NotCommitted", cc), + transactionsMaybeCommitted("MaybeCommitted", cc), transactionsResourceConstrained("ResourceConstrained", cc), transactionsProcessBehind("ProcessBehind", cc), outstandingWatches(0), + latencies(1000), readLatencies(1000), commitLatencies(1000), GRVLatencies(1000), mutationsPerCommit(1000), bytesPerCommit(1000), mvCacheInsertLocation(0), healthMetricsLastUpdated(0), + detailedHealthMetricsLastUpdated(0), internal(internal) { dbId = deterministicRandom()->randomUniqueID(); connected = clientInfo->get().proxies.size() ? Void() : clientInfo->onChange(); @@ -559,11 +560,10 @@ DatabaseContext::DatabaseContext( const Error &err ) : deferredError(err), cc("T transactionBytesRead("BytesRead", cc), transactionKeysRead("KeysRead", cc), transactionMetadataVersionReads("MetadataVersionReads", cc), transactionCommittedMutations("CommittedMutations", cc), transactionCommittedMutationBytes("CommittedMutationBytes", cc), transactionSetMutations("SetMutations", cc), transactionClearMutations("ClearMutations", cc), transactionAtomicMutations("AtomicMutations", cc), transactionsCommitStarted("CommitStarted", cc), transactionsCommitCompleted("CommitCompleted", cc), - transactionKeyServerLocationRequests("KeyServerLocationRequests", cc), transactionKeyServerLocationRequestsCompleted("KeyServerLocationRequestsCompleted", cc), transactionsTooOld("TooOld", cc), - transactionsFutureVersions("FutureVersions", cc), transactionsNotCommitted("NotCommitted", cc), transactionsMaybeCommitted("MaybeCommitted", cc), - transactionsResourceConstrained("ResourceConstrained", cc), transactionsProcessBehind("ProcessBehind", cc), latencies(1000), readLatencies(1000), commitLatencies(1000), - GRVLatencies(1000), mutationsPerCommit(1000), bytesPerCommit(1000), - internal(false) {} + transactionKeyServerLocationRequests("KeyServerLocationRequests", cc), transactionKeyServerLocationRequestsCompleted("KeyServerLocationRequestsCompleted", cc), + transactionStatusRequests("StatusRequests", cc), transactionsTooOld("TooOld", cc), transactionsFutureVersions("FutureVersions", cc), transactionsNotCommitted("NotCommitted", cc), + transactionsMaybeCommitted("MaybeCommitted", cc), transactionsResourceConstrained("ResourceConstrained", cc), transactionsProcessBehind("ProcessBehind", cc), + latencies(1000), readLatencies(1000), commitLatencies(1000), GRVLatencies(1000), mutationsPerCommit(1000), bytesPerCommit(1000), internal(false) {} Database DatabaseContext::create(Reference> clientInfo, Future clientInfoMonitor, LocalityData clientLocality, bool enableLocalityLoadBalance, TaskPriority taskID, bool lockAware, int apiVersion, bool switchable) { diff --git a/fdbclient/ReadYourWrites.actor.cpp b/fdbclient/ReadYourWrites.actor.cpp index c2a0fbdb69..0a3ab4fe93 100644 --- a/fdbclient/ReadYourWrites.actor.cpp +++ b/fdbclient/ReadYourWrites.actor.cpp @@ -1211,6 +1211,7 @@ Future< Optional > ReadYourWritesTransaction::get( const Key& key, bool s if (key == LiteralStringRef("\xff\xff/status/json")){ if (tr.getDatabase().getPtr() && tr.getDatabase()->getConnectionFile()) { + ++tr.getDatabase()->transactionStatusRequests; return getJSON(tr.getDatabase()); } else { From 31cc8885626234e9e6f14b7e5527bbb039d7e05b Mon Sep 17 00:00:00 2001 From: Vishesh Yadav Date: Tue, 22 Dec 2020 16:53:34 -0800 Subject: [PATCH 164/317] Make fault_tolerance_without_losing data consistent with 6.2 in HA. Don't consider satellites for now. This is a HACK which needs to be fixed soon, but for now need this to keep the monitoring sane. --- fdbserver/Status.actor.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fdbserver/Status.actor.cpp b/fdbserver/Status.actor.cpp index d5ae2c6dbf..4ece196afc 100644 --- a/fdbserver/Status.actor.cpp +++ b/fdbserver/Status.actor.cpp @@ -1945,7 +1945,14 @@ static JsonBuilderObject tlogFetcher(int* logFaultTolerance, const std::vector= 0) { localSetsWithNonNegativeFaultTolerance++; } - minFaultTolerance = std::min(minFaultTolerance, currentFaultTolerance); + + if (tLogs[i].locality == tagLocalitySatellite) { + // FIXME: This hack to bump satellite fault tolerance, is to make it consistent + // with 6.2. + minFaultTolerance = std::min(minFaultTolerance, currentFaultTolerance + 1); + } else { + minFaultTolerance = std::min(minFaultTolerance, currentFaultTolerance); + } } if (tLogs[i].isLocal && tLogs[i].locality == tagLocalitySatellite) { From 4c28341351e89a83876596ca9163fa2590db2417 Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Tue, 5 Jan 2021 21:34:16 -0800 Subject: [PATCH 165/317] Performance bug fix: Every page cache hit was calling forwardError() unnecessarily. --- fdbserver/VersionedBTree.actor.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fdbserver/VersionedBTree.actor.cpp b/fdbserver/VersionedBTree.actor.cpp index 40a7763c2c..bb07586379 100644 --- a/fdbserver/VersionedBTree.actor.cpp +++ b/fdbserver/VersionedBTree.actor.cpp @@ -1649,11 +1649,10 @@ public: if (!cacheEntry.initialized()) { debug_printf("DWALPager(%s) issuing actual read of %s\n", filename.c_str(), toString(pageID).c_str()); - cacheEntry.readFuture = readPhysicalPage(this, (PhysicalPageID)pageID); + cacheEntry.readFuture = forwardError(readPhysicalPage(this, (PhysicalPageID)pageID), errorPromise); cacheEntry.writeFuture = Void(); } - cacheEntry.readFuture = forwardError(cacheEntry.readFuture, errorPromise); return cacheEntry.readFuture; } From 97a4637b5298bec5e98d01423f5cea469fb1e8e3 Mon Sep 17 00:00:00 2001 From: Balachandar Namasivayam Date: Wed, 6 Jan 2021 11:54:18 -0800 Subject: [PATCH 166/317] Update downloads and release notes for 6.3.10 --- documentation/sphinx/source/downloads.rst | 24 +++++++++---------- .../release-notes/release-notes-630.rst | 8 ++++++- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/documentation/sphinx/source/downloads.rst b/documentation/sphinx/source/downloads.rst index 825eefab40..b6255f42ec 100644 --- a/documentation/sphinx/source/downloads.rst +++ b/documentation/sphinx/source/downloads.rst @@ -10,38 +10,38 @@ macOS The macOS installation package is supported on macOS 10.7+. It includes the client and (optionally) the server. -* `FoundationDB-6.3.9.pkg `_ +* `FoundationDB-6.3.10.pkg `_ Ubuntu ------ The Ubuntu packages are supported on 64-bit Ubuntu 12.04+, but beware of the Linux kernel bug in Ubuntu 12.x. -* `foundationdb-clients-6.3.9-1_amd64.deb `_ -* `foundationdb-server-6.3.9-1_amd64.deb `_ (depends on the clients package) +* `foundationdb-clients-6.3.10-1_amd64.deb `_ +* `foundationdb-server-6.3.10-1_amd64.deb `_ (depends on the clients package) RHEL/CentOS EL6 --------------- The RHEL/CentOS EL6 packages are supported on 64-bit RHEL/CentOS 6.x. -* `foundationdb-clients-6.3.9-1.el6.x86_64.rpm `_ -* `foundationdb-server-6.3.9-1.el6.x86_64.rpm `_ (depends on the clients package) +* `foundationdb-clients-6.3.10-1.el6.x86_64.rpm `_ +* `foundationdb-server-6.3.10-1.el6.x86_64.rpm `_ (depends on the clients package) RHEL/CentOS EL7 --------------- The RHEL/CentOS EL7 packages are supported on 64-bit RHEL/CentOS 7.x. -* `foundationdb-clients-6.3.9-1.el7.x86_64.rpm `_ -* `foundationdb-server-6.3.9-1.el7.x86_64.rpm `_ (depends on the clients package) +* `foundationdb-clients-6.3.10-1.el7.x86_64.rpm `_ +* `foundationdb-server-6.3.10-1.el7.x86_64.rpm `_ (depends on the clients package) Windows ------- The Windows installer is supported on 64-bit Windows XP and later. It includes the client and (optionally) the server. -* `foundationdb-6.3.9-x64.msi `_ +* `foundationdb-6.3.10-x64.msi `_ API Language Bindings ===================== @@ -58,18 +58,18 @@ On macOS and Windows, the FoundationDB Python API bindings are installed as part If you need to use the FoundationDB Python API from other Python installations or paths, use the Python package manager ``pip`` (``pip install foundationdb``) or download the Python package: -* `foundationdb-6.3.9.tar.gz `_ +* `foundationdb-6.3.10.tar.gz `_ Ruby 1.9.3/2.0.0+ ----------------- -* `fdb-6.3.9.gem `_ +* `fdb-6.3.10.gem `_ Java 8+ ------- -* `fdb-java-6.3.9.jar `_ -* `fdb-java-6.3.9-javadoc.jar `_ +* `fdb-java-6.3.10.jar `_ +* `fdb-java-6.3.10-javadoc.jar `_ Go 1.11+ -------- diff --git a/documentation/sphinx/source/release-notes/release-notes-630.rst b/documentation/sphinx/source/release-notes/release-notes-630.rst index b79db36a9c..246f7e6277 100644 --- a/documentation/sphinx/source/release-notes/release-notes-630.rst +++ b/documentation/sphinx/source/release-notes/release-notes-630.rst @@ -6,6 +6,12 @@ Release Notes 6.3.10 ====== +* Make fault tolerance metric calculation in HA clusters consistent with 6.2 branch. `(PR #4175) `_ +* Bug fix, stack overflow in redwood storage engine. `(PR #4161) `_ +* Bug fix, getting certain special keys fail. `(PR #4128) `_ +* Prevent slow task on TLog by yielding while processing ignored pop requests. `(PR #4112) `_ +* Support reading xxhash3 sqlite checksums. `(PR #4104) `_ +* Fix a race between submit and abort backup. `(PR #3935) `_ Packaging --------- @@ -134,7 +140,7 @@ Fixes from previous versions * The 6.3.3 patch release includes all fixes from the patch release 6.2.23. :doc:`(6.2 Release Notes) ` * The 6.3.5 patch release includes all fixes from the patch releases 6.2.24 and 6.2.25. :doc:`(6.2 Release Notes) ` * The 6.3.9 patch release includes all fixes from the patch releases 6.2.26. :doc:`(6.2 Release Notes) ` -* The 6.3.10 patch release includes all fixes from the patch releases 6.2.27. :doc:`(6.2 Release Notes) ` +* The 6.3.10 patch release includes all fixes from the patch releases 6.2.27-6.2.29 :doc:`(6.2 Release Notes) ` Fixes only impacting 6.3.0+ --------------------------- From e2e9b70206c7d1cb06a707f0c4b1433cc902d922 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Wed, 6 Jan 2021 22:09:38 +0000 Subject: [PATCH 167/317] Remove -Wno-unused-value --- cmake/ConfigureCompiler.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/cmake/ConfigureCompiler.cmake b/cmake/ConfigureCompiler.cmake index 270fbc9f9c..d5dbb1a416 100644 --- a/cmake/ConfigureCompiler.cmake +++ b/cmake/ConfigureCompiler.cmake @@ -259,7 +259,6 @@ else() -Wno-unused-function -Wno-unused-local-typedef -Wno-unused-parameter - -Wno-unused-value -Wno-self-assign ) if (USE_CCACHE) From 74c6427e6ef276420a8cbbdddd5ecd6171fa61c0 Mon Sep 17 00:00:00 2001 From: Balachandar Namasivayam Date: Wed, 6 Jan 2021 23:29:57 -0800 Subject: [PATCH 168/317] update version to 6.3.11 --- CMakeLists.txt | 2 +- versions.target | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 844d302637..81af95a68f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ # limitations under the License. cmake_minimum_required(VERSION 3.13) project(foundationdb - VERSION 6.3.10 + VERSION 6.3.11 DESCRIPTION "FoundationDB is a scalable, fault-tolerant, ordered key-value store with full ACID transactions." HOMEPAGE_URL "http://www.foundationdb.org/" LANGUAGES C CXX ASM) diff --git a/versions.target b/versions.target index 8b1467c77e..7264504e1e 100644 --- a/versions.target +++ b/versions.target @@ -1,7 +1,7 @@ - 6.3.10 + 6.3.11 6.3 From 73233d778d51aedfe32de9f065bb53f99479eb98 Mon Sep 17 00:00:00 2001 From: Balachandar Namasivayam Date: Wed, 6 Jan 2021 23:29:57 -0800 Subject: [PATCH 169/317] update installer WIX GUID following release --- packaging/msi/FDBInstaller.wxs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/msi/FDBInstaller.wxs b/packaging/msi/FDBInstaller.wxs index 63a724ab46..7489ae2272 100644 --- a/packaging/msi/FDBInstaller.wxs +++ b/packaging/msi/FDBInstaller.wxs @@ -32,7 +32,7 @@ Date: Sat, 9 Jan 2021 07:03:47 -0800 Subject: [PATCH 170/317] Add write buffering to BackupContainerLocalDirectory::BackupFile to greatly reduce the number of IAsyncFile::write() calls made when writing backup data. The buffer size is controlled by a knob. --- fdbclient/BackupContainer.actor.cpp | 43 ++++++++++++++++++++++++++--- fdbclient/BackupContainer.h | 7 ++--- fdbclient/Knobs.cpp | 1 + fdbclient/Knobs.h | 1 + 4 files changed, 43 insertions(+), 9 deletions(-) diff --git a/fdbclient/BackupContainer.actor.cpp b/fdbclient/BackupContainer.actor.cpp index bd96901512..a886fd2444 100644 --- a/fdbclient/BackupContainer.actor.cpp +++ b/fdbclient/BackupContainer.actor.cpp @@ -1277,15 +1277,39 @@ public: class BackupFile : public IBackupFile, ReferenceCounted { public: - BackupFile(std::string fileName, Reference file, std::string finalFullPath) : IBackupFile(fileName), m_file(file), m_finalFullPath(finalFullPath) {} + BackupFile(std::string fileName, Reference file, std::string finalFullPath) + : IBackupFile(fileName), m_file(file), m_finalFullPath(finalFullPath), m_writeOffset(0) + { + m_buffer.reserve(m_buffer.arena(), CLIENT_KNOBS->BACKUP_LOCAL_FILE_WRITE_BLOCK); + } Future append(const void *data, int len) { - Future r = m_file->write(data, len, m_offset); - m_offset += len; + m_buffer.append(m_buffer.arena(), (const uint8_t *)data, len); + + if(m_buffer.size() >= CLIENT_KNOBS->BACKUP_LOCAL_FILE_WRITE_BLOCK) { + return flush(CLIENT_KNOBS->BACKUP_LOCAL_FILE_WRITE_BLOCK); + } + + return Void(); + } + + Future flush(int size) { + ASSERT(size <= m_buffer.size()); + + // Keep a reference to the old buffer + Standalone> old = m_buffer; + // Make a new buffer, initialized with the excess bytes over the block size from the old buffer + m_buffer = Standalone>(old.slice(size, old.size())); + + // Write the old buffer to the underlying file and update the write offset + Future r = holdWhile(old, m_file->write(old.begin(), size, m_writeOffset)); + m_writeOffset += size; + return r; } ACTOR static Future finish_impl(Reference f) { + wait(f->flush(f->m_buffer.size())); wait(f->m_file->truncate(f->size())); // Some IAsyncFile implementations extend in whole block sizes. wait(f->m_file->sync()); std::string name = f->m_file->getFilename(); @@ -1294,6 +1318,10 @@ public: return Void(); } + int64_t size() const { + return m_buffer.size() + m_writeOffset; + } + Future finish() { return finish_impl(Reference::addRef(this)); } @@ -1303,6 +1331,8 @@ public: private: Reference m_file; + Standalone> m_buffer; + int64_t m_writeOffset; std::string m_finalFullPath; }; @@ -1435,7 +1465,7 @@ public: class BackupFile : public IBackupFile, ReferenceCounted { public: - BackupFile(std::string fileName, Reference file) : IBackupFile(fileName), m_file(file) {} + BackupFile(std::string fileName, Reference file) : IBackupFile(fileName), m_file(file), m_offset(0) {} Future append(const void *data, int len) { Future r = m_file->write(data, len, m_offset); @@ -1448,10 +1478,15 @@ public: return map(m_file->sync(), [=](Void _) { self->m_file.clear(); return Void(); }); } + int64_t size() const { + return m_offset; + } + void addref() { return ReferenceCounted::addref(); } void delref() { return ReferenceCounted::delref(); } private: Reference m_file; + int64_t m_offset; }; Future> writeFile(std::string path) { diff --git a/fdbclient/BackupContainer.h b/fdbclient/BackupContainer.h index 552223cc25..5520251288 100644 --- a/fdbclient/BackupContainer.h +++ b/fdbclient/BackupContainer.h @@ -36,7 +36,7 @@ Future timeKeeperVersionFromDatetime(std::string const &datetime, Datab // TODO: Move the log file and range file format encoding/decoding stuff to this file and behind interfaces. class IBackupFile { public: - IBackupFile(std::string fileName) : m_fileName(fileName), m_offset(0) {} + IBackupFile(std::string fileName) : m_fileName(fileName) {} virtual ~IBackupFile() {} // Backup files are append-only and cannot have more than 1 append outstanding at once. virtual Future append(const void *data, int len) = 0; @@ -44,16 +44,13 @@ public: inline std::string getFileName() const { return m_fileName; } - inline int64_t size() const { - return m_offset; - } + virtual int64_t size() const = 0; virtual void addref() = 0; virtual void delref() = 0; Future appendStringRefWithLen(Standalone s); protected: std::string m_fileName; - int64_t m_offset; }; // Structures for various backup components diff --git a/fdbclient/Knobs.cpp b/fdbclient/Knobs.cpp index 92595f2030..285c966b54 100644 --- a/fdbclient/Knobs.cpp +++ b/fdbclient/Knobs.cpp @@ -115,6 +115,7 @@ ClientKnobs::ClientKnobs(bool randomize) { init( TASKBUCKET_MAX_TASK_KEYS, 1000 ); if( randomize && BUGGIFY ) TASKBUCKET_MAX_TASK_KEYS = 20; //Backup + init( BACKUP_LOCAL_FILE_WRITE_BLOCK, 1024*1024 ); if( randomize && BUGGIFY ) BACKUP_LOCAL_FILE_WRITE_BLOCK = 100; init( BACKUP_CONCURRENT_DELETES, 100 ); init( BACKUP_SIMULATED_LIMIT_BYTES, 1e6 ); if( randomize && BUGGIFY ) BACKUP_SIMULATED_LIMIT_BYTES = 1000; init( BACKUP_GET_RANGE_LIMIT_BYTES, 1e6 ); diff --git a/fdbclient/Knobs.h b/fdbclient/Knobs.h index 2be31e6d27..9b58d776b8 100644 --- a/fdbclient/Knobs.h +++ b/fdbclient/Knobs.h @@ -117,6 +117,7 @@ public: int TASKBUCKET_MAX_TASK_KEYS; // Backup + int BACKUP_LOCAL_FILE_WRITE_BLOCK; int BACKUP_CONCURRENT_DELETES; int BACKUP_SIMULATED_LIMIT_BYTES; int BACKUP_GET_RANGE_LIMIT_BYTES; From ecf5c2b5917b7db0ee9aa5f91c3d6d13c920d876 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Mon, 11 Jan 2021 21:38:34 +0000 Subject: [PATCH 171/317] Add knobs for prefix bloom filters and larger block cache --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 44 ++++++++++++++++++++++-- fdbserver/Knobs.cpp | 2 ++ fdbserver/Knobs.h | 2 ++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index f6ed28b7e7..a32fd6117c 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -1,7 +1,11 @@ #ifdef SSD_ROCKSDB_EXPERIMENTAL +#include #include +#include #include +#include +#include #include #include "flow/flow.h" #include "flow/IThreadPool.h" @@ -42,6 +46,40 @@ rocksdb::Options getOptions() { if (SERVER_KNOBS->ROCKSDB_BACKGROUND_PARALLELISM > 0) { options.IncreaseParallelism(SERVER_KNOBS->ROCKSDB_BACKGROUND_PARALLELISM); } + + rocksdb::BlockBasedTableOptions bbOpts; + // TODO: Add a knob for the block cache size. (Default is 8 MB) + if (SERVER_KNOBS->ROCKSDB_PREFIX_LEN > 0) { + // Prefix blooms are used during Seek. + options.prefix_extractor.reset(rocksdb::NewFixedPrefixTransform(SERVER_KNOBS->ROCKSDB_PREFIX_LEN)); + + // Also turn on bloom filters in the memtable. + // TODO: Make a knob for this as well. + options.memtable_prefix_bloom_size_ratio = 0.1; + + // 5 -- Can be read by RocksDB's versions since 6.6.0. Full and partitioned + // filters use a generally faster and more accurate Bloom filter + // implementation, with a different schema. + // https://github.com/facebook/rocksdb/blob/b77569f18bfc77fb1d8a0b3218f6ecf571bc4988/include/rocksdb/table.h#L391 + bbOpts.format_version = 5; + + // Create and apply a bloom filter using the 10 bits + // which should yield a ~1% false positive rate: + // https://github.com/facebook/rocksdb/wiki/RocksDB-Bloom-Filter#full-filters-new-format + bbOpts.filter_policy.reset(rocksdb::NewBloomFilterPolicy(10)); + + // The whole key blooms are only used for point lookups. + // https://github.com/facebook/rocksdb/wiki/RocksDB-Bloom-Filter#prefix-vs-whole-key + bbOpts.whole_key_filtering = false; + } + + if (SERVER_KNOBS->ROCKSDB_BLOCK_CACHE_SIZE > 0) { + bbOpts.block_cache = rocksdb::NewLRUCache(SERVER_KNOBS->ROCKSDB_BLOCK_CACHE_SIZE); + } + + if (SERVER_KNOBS->ROCKSDB_BLOCK_CACHE_SIZE > 0 || SERVER_KNOBS->ROCKSDB_PREFIX_LEN > 0) { + options.table_factory.reset(rocksdb::NewBlockBasedTableFactory(bbOpts)); + } return options; } @@ -248,8 +286,11 @@ struct RocksDBKeyValueStore : IKeyValueStore { } int accumulatedBytes = 0; rocksdb::Status s; + rocksdb::ReadOptions options; + // When using a prefix extractor, ensure that keys are returned in order even if they cross + // a prefix boundary. + options.auto_prefix_mode = (SERVER_KNOBS->ROCKSDB_PREFIX_LEN > 0); if (a.rowLimit >= 0) { - rocksdb::ReadOptions options; auto endSlice = toSlice(a.keys.end); options.iterate_upper_bound = &endSlice; auto cursor = std::unique_ptr(db->NewIterator(options)); @@ -266,7 +307,6 @@ struct RocksDBKeyValueStore : IKeyValueStore { } s = cursor->status(); } else { - rocksdb::ReadOptions options; auto beginSlice = toSlice(a.keys.begin); options.iterate_lower_bound = &beginSlice; auto cursor = std::unique_ptr(db->NewIterator(options)); diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 58815ba8d7..9b930b4467 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -323,6 +323,8 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi init( ROCKSDB_MEMTABLE_BYTES, 512 * 1024 * 1024 ); init( ROCKSDB_UNSAFE_AUTO_FSYNC, false ); init( ROCKSDB_PERIODIC_COMPACTION_SECONDS, 0 ); + init( ROCKSDB_PREFIX_LEN, 0 ); + init( ROCKSDB_BLOCK_CACHE_SIZE, 0 ); // Leader election bool longLeaderElection = randomize && BUGGIFY; diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 26b07ed96c..bede67f70b 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -258,6 +258,8 @@ public: int64_t ROCKSDB_MEMTABLE_BYTES; bool ROCKSDB_UNSAFE_AUTO_FSYNC; int64_t ROCKSDB_PERIODIC_COMPACTION_SECONDS; + int ROCKSDB_PREFIX_LEN; + int64_t ROCKSDB_BLOCK_CACHE_SIZE; // Leader election int MAX_NOTIFICATIONS; From e32a0fb742ee5530c407edefbb1f99b8e4e0c130 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Thu, 14 Jan 2021 20:13:29 +0000 Subject: [PATCH 172/317] Resolve conflicts --- fdbclient/BackupContainer.actor.cpp | 11 +-- fdbclient/NativeAPI.actor.cpp | 102 +++++++++++----------------- fdbclient/ReadYourWrites.actor.cpp | 12 +--- 3 files changed, 42 insertions(+), 83 deletions(-) diff --git a/fdbclient/BackupContainer.actor.cpp b/fdbclient/BackupContainer.actor.cpp index df903e9b92..c6303a567a 100644 --- a/fdbclient/BackupContainer.actor.cpp +++ b/fdbclient/BackupContainer.actor.cpp @@ -1917,18 +1917,13 @@ public: return map(m_file->sync(), [=](Void _) { self->m_file.clear(); return Void(); }); } -<<<<<<< HEAD - void addref() final { return ReferenceCounted::addref(); } - void delref() final { return ReferenceCounted::delref(); } - -======= int64_t size() const { return m_offset; } - void addref() { return ReferenceCounted::addref(); } - void delref() { return ReferenceCounted::delref(); } ->>>>>>> upstream/release-6.2 + void addref() final { return ReferenceCounted::addref(); } + void delref() final { return ReferenceCounted::delref(); } + private: Reference m_file; int64_t m_offset; diff --git a/fdbclient/NativeAPI.actor.cpp b/fdbclient/NativeAPI.actor.cpp index 5c8945bfdf..8a4fab2799 100644 --- a/fdbclient/NativeAPI.actor.cpp +++ b/fdbclient/NativeAPI.actor.cpp @@ -500,7 +500,6 @@ ACTOR static Future getHealthMetricsActor(DatabaseContext *cx, bo Future DatabaseContext::getHealthMetrics(bool detailed = false) { return getHealthMetricsActor(this, detailed); } -<<<<<<< HEAD void DatabaseContext::registerSpecialKeySpaceModule(SpecialKeySpace::MODULE module, std::unique_ptr impl) { specialKeySpace->registerKeyRange(module, impl->getKeyRange(), impl.get()); @@ -652,8 +651,7 @@ DatabaseContext::DatabaseContext(Reference(specialKeys.begin, specialKeys.end, /* test */ false)) { -======= -DatabaseContext::DatabaseContext( - Reference>> connectionFile, Reference> clientInfo, Future clientInfoMonitor, - TaskPriority taskID, LocalityData const& clientLocality, bool enableLocalityLoadBalance, bool lockAware, bool internal, int apiVersion, bool switchable ) - : connectionFile(connectionFile),clientInfo(clientInfo), clientInfoMonitor(clientInfoMonitor), taskID(taskID), clientLocality(clientLocality), enableLocalityLoadBalance(enableLocalityLoadBalance), - lockAware(lockAware), apiVersion(apiVersion), switchable(switchable), provisional(false), cc("TransactionMetrics"), transactionReadVersions("ReadVersions", cc), - transactionReadVersionsCompleted("ReadVersionsCompleted", cc), transactionReadVersionBatches("ReadVersionBatches", cc), transactionBatchReadVersions("BatchPriorityReadVersions", cc), - transactionDefaultReadVersions("DefaultPriorityReadVersions", cc), transactionImmediateReadVersions("ImmediatePriorityReadVersions", cc), - transactionBatchReadVersionsCompleted("BatchPriorityReadVersionsCompleted", cc), transactionDefaultReadVersionsCompleted("DefaultPriorityReadVersionsCompleted", cc), - transactionImmediateReadVersionsCompleted("ImmediatePriorityReadVersionsCompleted", cc), transactionLogicalReads("LogicalUncachedReads", cc), transactionPhysicalReads("PhysicalReadRequests", cc), - transactionPhysicalReadsCompleted("PhysicalReadRequestsCompleted", cc), transactionGetKeyRequests("GetKeyRequests", cc), transactionGetValueRequests("GetValueRequests", cc), - transactionGetRangeRequests("GetRangeRequests", cc), transactionWatchRequests("WatchRequests", cc), transactionGetAddressesForKeyRequests("GetAddressesForKeyRequests", cc), - transactionBytesRead("BytesRead", cc), transactionKeysRead("KeysRead", cc), transactionMetadataVersionReads("MetadataVersionReads", cc), transactionCommittedMutations("CommittedMutations", cc), - transactionCommittedMutationBytes("CommittedMutationBytes", cc), transactionSetMutations("SetMutations", cc), transactionClearMutations("ClearMutations", cc), - transactionAtomicMutations("AtomicMutations", cc), transactionsCommitStarted("CommitStarted", cc), transactionsCommitCompleted("CommitCompleted", cc), - transactionKeyServerLocationRequests("KeyServerLocationRequests", cc), transactionKeyServerLocationRequestsCompleted("KeyServerLocationRequestsCompleted", cc), - transactionStatusRequests("StatusRequests", cc), transactionsTooOld("TooOld", cc), transactionsFutureVersions("FutureVersions", cc), transactionsNotCommitted("NotCommitted", cc), - transactionsMaybeCommitted("MaybeCommitted", cc), transactionsResourceConstrained("ResourceConstrained", cc), transactionsProcessBehind("ProcessBehind", cc), outstandingWatches(0), - latencies(1000), readLatencies(1000), commitLatencies(1000), GRVLatencies(1000), mutationsPerCommit(1000), bytesPerCommit(1000), mvCacheInsertLocation(0), healthMetricsLastUpdated(0), - detailedHealthMetricsLastUpdated(0), internal(internal) -{ ->>>>>>> upstream/release-6.2 dbId = deterministicRandom()->randomUniqueID(); connected = clientInfo->get().proxies.size() ? Void() : clientInfo->onChange(); @@ -739,6 +716,7 @@ DatabaseContext::DatabaseContext( [](ReadYourWritesTransaction* ryw) -> Future> { if (ryw->getDatabase().getPtr() && ryw->getDatabase()->getConnectionFile()) { + ++ryw->getDatabase()->transactionStatusRequests; return getJSON(ryw->getDatabase()); } else { return Optional(); @@ -784,39 +762,35 @@ DatabaseContext::DatabaseContext( } } -<<<<<<< HEAD -DatabaseContext::DatabaseContext( const Error &err ) : deferredError(err), cc("TransactionMetrics"), transactionReadVersions("ReadVersions", cc), transactionReadVersionsThrottled("ReadVersionsThrottled", cc), - transactionReadVersionsCompleted("ReadVersionsCompleted", cc), transactionReadVersionBatches("ReadVersionBatches", cc), transactionBatchReadVersions("BatchPriorityReadVersions", cc), - transactionDefaultReadVersions("DefaultPriorityReadVersions", cc), transactionImmediateReadVersions("ImmediatePriorityReadVersions", cc), - transactionBatchReadVersionsCompleted("BatchPriorityReadVersionsCompleted", cc), transactionDefaultReadVersionsCompleted("DefaultPriorityReadVersionsCompleted", cc), - transactionImmediateReadVersionsCompleted("ImmediatePriorityReadVersionsCompleted", cc), transactionLogicalReads("LogicalUncachedReads", cc), transactionPhysicalReads("PhysicalReadRequests", cc), - transactionPhysicalReadsCompleted("PhysicalReadRequestsCompleted", cc), transactionGetKeyRequests("GetKeyRequests", cc), transactionGetValueRequests("GetValueRequests", cc), - transactionGetRangeRequests("GetRangeRequests", cc), transactionWatchRequests("WatchRequests", cc), transactionGetAddressesForKeyRequests("GetAddressesForKeyRequests", cc), - transactionBytesRead("BytesRead", cc), transactionKeysRead("KeysRead", cc), transactionMetadataVersionReads("MetadataVersionReads", cc), transactionCommittedMutations("CommittedMutations", cc), - transactionCommittedMutationBytes("CommittedMutationBytes", cc), transactionSetMutations("SetMutations", cc), transactionClearMutations("ClearMutations", cc), - transactionAtomicMutations("AtomicMutations", cc), transactionsCommitStarted("CommitStarted", cc), transactionsCommitCompleted("CommitCompleted", cc), - transactionKeyServerLocationRequests("KeyServerLocationRequests", cc), transactionKeyServerLocationRequestsCompleted("KeyServerLocationRequestsCompleted", cc), transactionsTooOld("TooOld", cc), - transactionsFutureVersions("FutureVersions", cc), transactionsNotCommitted("NotCommitted", cc), transactionsMaybeCommitted("MaybeCommitted", cc), - transactionsResourceConstrained("ResourceConstrained", cc), transactionsThrottled("Throttled", cc), transactionsProcessBehind("ProcessBehind", cc), latencies(1000), readLatencies(1000), commitLatencies(1000), - GRVLatencies(1000), mutationsPerCommit(1000), bytesPerCommit(1000), - internal(false) {} -======= -DatabaseContext::DatabaseContext( const Error &err ) : deferredError(err), cc("TransactionMetrics"), transactionReadVersions("ReadVersions", cc), - transactionReadVersionsCompleted("ReadVersionsCompleted", cc), transactionReadVersionBatches("ReadVersionBatches", cc), transactionBatchReadVersions("BatchPriorityReadVersions", cc), - transactionDefaultReadVersions("DefaultPriorityReadVersions", cc), transactionImmediateReadVersions("ImmediatePriorityReadVersions", cc), - transactionBatchReadVersionsCompleted("BatchPriorityReadVersionsCompleted", cc), transactionDefaultReadVersionsCompleted("DefaultPriorityReadVersionsCompleted", cc), - transactionImmediateReadVersionsCompleted("ImmediatePriorityReadVersionsCompleted", cc), transactionLogicalReads("LogicalUncachedReads", cc), transactionPhysicalReads("PhysicalReadRequests", cc), - transactionPhysicalReadsCompleted("PhysicalReadRequestsCompleted", cc), transactionGetKeyRequests("GetKeyRequests", cc), transactionGetValueRequests("GetValueRequests", cc), - transactionGetRangeRequests("GetRangeRequests", cc), transactionWatchRequests("WatchRequests", cc), transactionGetAddressesForKeyRequests("GetAddressesForKeyRequests", cc), - transactionBytesRead("BytesRead", cc), transactionKeysRead("KeysRead", cc), transactionMetadataVersionReads("MetadataVersionReads", cc), transactionCommittedMutations("CommittedMutations", cc), - transactionCommittedMutationBytes("CommittedMutationBytes", cc), transactionSetMutations("SetMutations", cc), transactionClearMutations("ClearMutations", cc), - transactionAtomicMutations("AtomicMutations", cc), transactionsCommitStarted("CommitStarted", cc), transactionsCommitCompleted("CommitCompleted", cc), - transactionKeyServerLocationRequests("KeyServerLocationRequests", cc), transactionKeyServerLocationRequestsCompleted("KeyServerLocationRequestsCompleted", cc), - transactionStatusRequests("StatusRequests", cc), transactionsTooOld("TooOld", cc), transactionsFutureVersions("FutureVersions", cc), transactionsNotCommitted("NotCommitted", cc), - transactionsMaybeCommitted("MaybeCommitted", cc), transactionsResourceConstrained("ResourceConstrained", cc), transactionsProcessBehind("ProcessBehind", cc), - latencies(1000), readLatencies(1000), commitLatencies(1000), GRVLatencies(1000), mutationsPerCommit(1000), bytesPerCommit(1000), internal(false) {} ->>>>>>> upstream/release-6.2 - +DatabaseContext::DatabaseContext(const Error& err) + : deferredError(err), cc("TransactionMetrics"), transactionReadVersions("ReadVersions", cc), + transactionReadVersionsThrottled("ReadVersionsThrottled", cc), + transactionReadVersionsCompleted("ReadVersionsCompleted", cc), + transactionReadVersionBatches("ReadVersionBatches", cc), + transactionBatchReadVersions("BatchPriorityReadVersions", cc), + transactionDefaultReadVersions("DefaultPriorityReadVersions", cc), + transactionImmediateReadVersions("ImmediatePriorityReadVersions", cc), + transactionBatchReadVersionsCompleted("BatchPriorityReadVersionsCompleted", cc), + transactionDefaultReadVersionsCompleted("DefaultPriorityReadVersionsCompleted", cc), + transactionImmediateReadVersionsCompleted("ImmediatePriorityReadVersionsCompleted", cc), + transactionLogicalReads("LogicalUncachedReads", cc), transactionPhysicalReads("PhysicalReadRequests", cc), + transactionPhysicalReadsCompleted("PhysicalReadRequestsCompleted", cc), + transactionGetKeyRequests("GetKeyRequests", cc), transactionGetValueRequests("GetValueRequests", cc), + transactionGetRangeRequests("GetRangeRequests", cc), transactionWatchRequests("WatchRequests", cc), + transactionGetAddressesForKeyRequests("GetAddressesForKeyRequests", cc), transactionBytesRead("BytesRead", cc), + transactionKeysRead("KeysRead", cc), transactionMetadataVersionReads("MetadataVersionReads", cc), + transactionCommittedMutations("CommittedMutations", cc), + transactionCommittedMutationBytes("CommittedMutationBytes", cc), transactionSetMutations("SetMutations", cc), + transactionClearMutations("ClearMutations", cc), transactionAtomicMutations("AtomicMutations", cc), + transactionsCommitStarted("CommitStarted", cc), transactionsCommitCompleted("CommitCompleted", cc), + transactionKeyServerLocationRequests("KeyServerLocationRequests", cc), + transactionKeyServerLocationRequestsCompleted("KeyServerLocationRequestsCompleted", cc), + transactionStatusRequests("StatusRequests", cc), transactionsTooOld("TooOld", cc), + transactionsFutureVersions("FutureVersions", cc), transactionsNotCommitted("NotCommitted", cc), + transactionsMaybeCommitted("MaybeCommitted", cc), transactionsResourceConstrained("ResourceConstrained", cc), + transactionsThrottled("Throttled", cc), transactionsProcessBehind("ProcessBehind", cc), latencies(1000), + readLatencies(1000), commitLatencies(1000), GRVLatencies(1000), mutationsPerCommit(1000), bytesPerCommit(1000), + internal(false) {} Database DatabaseContext::create(Reference> clientInfo, Future clientInfoMonitor, LocalityData clientLocality, bool enableLocalityLoadBalance, TaskPriority taskID, bool lockAware, int apiVersion, bool switchable) { return Database( new DatabaseContext( Reference>>(), clientInfo, clientInfoMonitor, taskID, clientLocality, enableLocalityLoadBalance, lockAware, true, apiVersion, switchable ) ); diff --git a/fdbclient/ReadYourWrites.actor.cpp b/fdbclient/ReadYourWrites.actor.cpp index b51eaba66c..07ea6f6a44 100644 --- a/fdbclient/ReadYourWrites.actor.cpp +++ b/fdbclient/ReadYourWrites.actor.cpp @@ -1225,26 +1225,16 @@ ACTOR Future> getWorkerInterfaces (Reference > ReadYourWritesTransaction::get( const Key& key, bool snapshot ) { TEST(true); -<<<<<<< HEAD if (getDatabase()->apiVersionAtLeast(630)) { if (specialKeys.contains(key)) { TEST(true); // Special keys get return getDatabase()->specialKeySpace->get(this, key); -======= - - if (key == LiteralStringRef("\xff\xff/status/json")){ - if (tr.getDatabase().getPtr() && tr.getDatabase()->getConnectionFile()) { - ++tr.getDatabase()->transactionStatusRequests; - return getJSON(tr.getDatabase()); - } - else { - return Optional(); ->>>>>>> upstream/release-6.2 } } else { if (key == LiteralStringRef("\xff\xff/status/json")) { if (tr.getDatabase().getPtr() && tr.getDatabase()->getConnectionFile()) { + ++tr.getDatabase()->transactionStatusRequests; return getJSON(tr.getDatabase()); } else { return Optional(); From ddb5b0b0505dbdc583d4e8630eb90ad286997cbb Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Fri, 15 Jan 2021 00:30:31 +0000 Subject: [PATCH 173/317] Backport correctness package --- CMakeLists.txt | 1 + cmake/AddFdbTest.cmake | 254 ++- cmake/FlowCommands.cmake | 13 +- contrib/CMakeLists.txt | 4 + contrib/Joshua/README.md | 23 + contrib/Joshua/scripts/bindingTest.sh | 10 + contrib/Joshua/scripts/bindingTestScript.sh | 88 + contrib/Joshua/scripts/bindingTimeout.sh | 28 + contrib/Joshua/scripts/correctnessTest.sh | 3 + contrib/Joshua/scripts/correctnessTimeout.sh | 4 + contrib/Joshua/scripts/localClusterStart.sh | 402 +++++ contrib/Joshua/scripts/valgrindTest.sh | 3 + contrib/Joshua/scripts/valgrindTimeout.sh | 6 + contrib/TestHarness/CMakeLists.txt | 17 + contrib/TestHarness/Program.cs.cmake | 1588 +++++++++++++++++ .../TestHarness/Properties/AssemblyInfo.cs | 56 + contrib/TestHarness/TestHarness.csproj | 62 + contrib/TraceLogHelper/CMakeLists.txt | 20 + contrib/TraceLogHelper/Event.cs | 263 +++ contrib/TraceLogHelper/JsonParser.cs | 93 + .../TraceLogHelper/Properties/AssemblyInfo.cs | 56 + contrib/TraceLogHelper/TraceLogHelper.csproj | 58 + contrib/TraceLogHelper/TraceLogUtil.cs | 79 + contrib/TraceLogHelper/XmlParser.cs | 194 ++ tests/CMakeLists.txt | 8 + 25 files changed, 3320 insertions(+), 13 deletions(-) create mode 100644 contrib/CMakeLists.txt create mode 100644 contrib/Joshua/README.md create mode 100755 contrib/Joshua/scripts/bindingTest.sh create mode 100755 contrib/Joshua/scripts/bindingTestScript.sh create mode 100755 contrib/Joshua/scripts/bindingTimeout.sh create mode 100755 contrib/Joshua/scripts/correctnessTest.sh create mode 100755 contrib/Joshua/scripts/correctnessTimeout.sh create mode 100644 contrib/Joshua/scripts/localClusterStart.sh create mode 100755 contrib/Joshua/scripts/valgrindTest.sh create mode 100755 contrib/Joshua/scripts/valgrindTimeout.sh create mode 100644 contrib/TestHarness/CMakeLists.txt create mode 100644 contrib/TestHarness/Program.cs.cmake create mode 100644 contrib/TestHarness/Properties/AssemblyInfo.cs create mode 100644 contrib/TestHarness/TestHarness.csproj create mode 100644 contrib/TraceLogHelper/CMakeLists.txt create mode 100644 contrib/TraceLogHelper/Event.cs create mode 100644 contrib/TraceLogHelper/JsonParser.cs create mode 100644 contrib/TraceLogHelper/Properties/AssemblyInfo.cs create mode 100644 contrib/TraceLogHelper/TraceLogHelper.csproj create mode 100644 contrib/TraceLogHelper/TraceLogUtil.cs create mode 100644 contrib/TraceLogHelper/XmlParser.cs diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e18f25556..ca7257d26b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -188,6 +188,7 @@ if(WITH_PYTHON) add_subdirectory(bindings) endif() add_subdirectory(fdbbackup) +add_subdirectory(contrib) add_subdirectory(tests) if(WITH_DOCUMENTATION) add_subdirectory(documentation) diff --git a/cmake/AddFdbTest.cmake b/cmake/AddFdbTest.cmake index a20fef78ed..1a831c5d0b 100644 --- a/cmake/AddFdbTest.cmake +++ b/cmake/AddFdbTest.cmake @@ -61,6 +61,9 @@ function(add_fdb_test) set(this_test_timeout ${ADD_FDB_TEST_TIMEOUT}) if(NOT this_test_timeout) set(this_test_timeout 3600) + if(USE_VALGRIND_FOR_CTEST) + set(this_test_timeout 36000) + endif() endif() set(test_type "simulation") set(fdb_test_files_ "${fdb_test_files}") @@ -84,6 +87,9 @@ function(add_fdb_test) if (NOT "${ADD_FDB_TEST_TEST_NAME}" STREQUAL "") set(test_name ${ADD_FDB_TEST_TEST_NAME}) endif() + if((NOT test_name MATCHES "${TEST_INCLUDE}") OR (test_name MATCHES "${TEST_EXCLUDE}")) + return() + endif() math(EXPR test_idx "${CURRENT_TEST_INDEX} + ${NUM_TEST_FILES}") set(CURRENT_TEST_INDEX "${test_idx}" PARENT_SCOPE) # set( PARENT_SCOPE) doesn't set the @@ -107,7 +113,7 @@ function(add_fdb_test) set(BUGGIFY_OPTION "-B") endif() set(VALGRIND_OPTION "") - if (USE_VALGRIND) + if (USE_VALGRIND_FOR_CTEST) set(VALGRIND_OPTION "--use-valgrind") endif() list(TRANSFORM ADD_FDB_TEST_TEST_FILES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/") @@ -117,6 +123,7 @@ function(add_fdb_test) -b ${PROJECT_BINARY_DIR} -t ${test_type} -O ${OLD_FDBSERVER_BINARY} + --crash --aggregate-traces ${TEST_AGGREGATE_TRACES} --log-format ${TEST_LOG_FORMAT} --keep-logs ${TEST_KEEP_LOGS} @@ -127,9 +134,244 @@ function(add_fdb_test) ${VALGRIND_OPTION} ${ADD_FDB_TEST_TEST_FILES} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) - get_filename_component(test_dir_full ${first_file} DIRECTORY) - if(NOT ${test_dir_full} STREQUAL "") - get_filename_component(test_dir ${test_dir_full} NAME) - set_tests_properties(${test_name} PROPERTIES TIMEOUT ${this_test_timeout} LABELS "${test_dir}") - endif() + get_filename_component(test_dir_full ${first_file} DIRECTORY) + if(NOT ${test_dir_full} STREQUAL "") + get_filename_component(test_dir ${test_dir_full} NAME) + set_tests_properties(${test_name} PROPERTIES TIMEOUT ${this_test_timeout} LABELS "${test_dir}") + endif() + # set variables used for generating test packages + set(TEST_NAMES ${TEST_NAMES} ${test_name} PARENT_SCOPE) + set(TEST_FILES_${test_name} ${ADD_FDB_TEST_TEST_FILES} PARENT_SCOPE) + set(TEST_TYPE_${test_name} ${test_type} PARENT_SCOPE) +endfunction() + +if(NOT WIN32) + set(TEST_PACKAGE_INCLUDE ".*" CACHE STRING "A regex of all tests that should be included in the test package") + set(TEST_PACKAGE_EXCLUDE ".^" CACHE STRING "A regex of all tests that shouldn't be added to the test package") + set(TEST_PACKAGE_ADD_DIRECTORIES "" CACHE STRING "A ;-separated list of directories. All files within each directory will be added to the test package") +endif() + +# This sets up a directory with the correctness files common to all correctness packages. +# This function should be called with the following arguments: +# +# - OUT_DIR the directory where files will be staged +# - CONTEXT the type of correctness package being built (e.g. 'valgrind correctness') +function(stage_correctness_package) + set(oneValueArgs OUT_DIR CONTEXT OUT_FILES) + cmake_parse_arguments(STAGE "" "${oneValueArgs}" "" "${ARGN}") + file(MAKE_DIRECTORY ${STAGE_OUT_DIR}/bin) + string(LENGTH "${CMAKE_SOURCE_DIR}/tests/" base_length) + foreach(test IN LISTS TEST_NAMES) + if(("${TEST_TYPE_${test}}" STREQUAL "simulation") AND + (${test} MATCHES ${TEST_PACKAGE_INCLUDE}) AND + (NOT ${test} MATCHES ${TEST_PACKAGE_EXCLUDE})) + foreach(file IN LISTS TEST_FILES_${test}) + string(SUBSTRING ${file} ${base_length} -1 rel_out_file) + set(out_file ${STAGE_OUT_DIR}/tests/${rel_out_file}) + list(APPEND test_files ${out_file}) + add_custom_command( + OUTPUT ${out_file} + DEPENDS ${file} + COMMAND ${CMAKE_COMMAND} -E copy ${file} ${out_file} + COMMENT "Copying ${STAGE_CONTEXT} test file ${rel_out_file}" + ) + endforeach() + endif() + endforeach() + foreach(dir IN LISTS TEST_PACKAGE_ADD_DIRECTORIES) + file(GLOB_RECURSE files ${dir}/*) + string(LENGTH ${dir} dir_len) + foreach(file IN LISTS files) + get_filename_component(src_dir ${file} DIRECTORY) + # We need to make sure that ${src_dir} is at least + # as long as ${dir}. Otherwise the later call to + # SUBSTRING will fail + set(src_dir "${src_dir}/") + string(SUBSTRING ${src_dir} ${dir_len} -1 dest_dir) + string(SUBSTRING ${file} ${dir_len} -1 rel_out_file) + set(out_file ${STAGE_OUT_DIR}/${rel_out_file}) + list(APPEND external_files ${out_file}) + add_custom_command( + OUTPUT ${out_file} + DEPENDS ${file} + COMMAND ${CMAKE_COMMAND} -E copy ${file} ${out_file} + COMMENT "Copying ${STAGE_CONTEXT} external file ${file}" + ) + endforeach() + endforeach() + list(APPEND package_files ${STAGE_OUT_DIR}/bin/fdbserver + ${STAGE_OUT_DIR}/bin/coverage.fdbserver.xml + ${STAGE_OUT_DIR}/bin/coverage.fdbclient.xml + ${STAGE_OUT_DIR}/bin/coverage.fdbrpc.xml + ${STAGE_OUT_DIR}/bin/coverage.flow.xml + ${STAGE_OUT_DIR}/bin/TestHarness.exe + ${STAGE_OUT_DIR}/bin/TraceLogHelper.dll + ${STAGE_OUT_DIR}/CMakeCache.txt + ) + add_custom_command( + OUTPUT ${package_files} + DEPENDS ${CMAKE_BINARY_DIR}/CMakeCache.txt + ${CMAKE_BINARY_DIR}/packages/bin/fdbserver + ${CMAKE_BINARY_DIR}/bin/coverage.fdbserver.xml + ${CMAKE_BINARY_DIR}/lib/coverage.fdbclient.xml + ${CMAKE_BINARY_DIR}/lib/coverage.fdbrpc.xml + ${CMAKE_BINARY_DIR}/lib/coverage.flow.xml + ${CMAKE_BINARY_DIR}/packages/bin/TestHarness.exe + ${CMAKE_BINARY_DIR}/packages/bin/TraceLogHelper.dll + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/CMakeCache.txt ${STAGE_OUT_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/packages/bin/fdbserver + ${CMAKE_BINARY_DIR}/bin/coverage.fdbserver.xml + ${CMAKE_BINARY_DIR}/lib/coverage.fdbclient.xml + ${CMAKE_BINARY_DIR}/lib/coverage.fdbrpc.xml + ${CMAKE_BINARY_DIR}/lib/coverage.flow.xml + ${CMAKE_BINARY_DIR}/packages/bin/TestHarness.exe + ${CMAKE_BINARY_DIR}/packages/bin/TraceLogHelper.dll + ${STAGE_OUT_DIR}/bin + COMMENT "Copying files for ${STAGE_CONTEXT} package" + ) + list(APPEND package_files ${test_files} ${external_files}) + if(STAGE_OUT_FILES) + set(${STAGE_OUT_FILES} ${package_files} PARENT_SCOPE) + endif() +endfunction() + +function(create_correctness_package) + if(WIN32) + return() + endif() + set(out_dir "${CMAKE_BINARY_DIR}/correctness") + stage_correctness_package(OUT_DIR ${out_dir} CONTEXT "correctness" OUT_FILES package_files) + set(tar_file ${CMAKE_BINARY_DIR}/packages/correctness-${CMAKE_PROJECT_VERSION}.tar.gz) + add_custom_command( + OUTPUT ${tar_file} + DEPENDS ${package_files} + ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/correctnessTest.sh + ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/correctnessTimeout.sh + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/correctnessTest.sh + ${out_dir}/joshua_test + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/correctnessTimeout.sh + ${out_dir}/joshua_timeout + COMMAND ${CMAKE_COMMAND} -E tar cfz ${tar_file} ${package_files} + ${out_dir}/joshua_test + ${out_dir}/joshua_timeout + WORKING_DIRECTORY ${out_dir} + COMMENT "Package correctness archive" + ) + add_custom_target(package_tests ALL DEPENDS ${tar_file}) + add_dependencies(package_tests strip_only_fdbserver TestHarness) +endfunction() + +function(create_valgrind_correctness_package) + if(WIN32) + return() + endif() + if(USE_VALGRIND) + set(out_dir "${CMAKE_BINARY_DIR}/valgrind_correctness") + stage_correctness_package(OUT_DIR ${out_dir} CONTEXT "valgrind correctness" OUT_FILES package_files) + set(tar_file ${CMAKE_BINARY_DIR}/packages/valgrind-${CMAKE_PROJECT_VERSION}.tar.gz) + add_custom_command( + OUTPUT ${tar_file} + DEPENDS ${package_files} + ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/valgrindTest.sh + ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/valgrindTimeout.sh + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/valgrindTest.sh + ${out_dir}/joshua_test + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/valgrindTimeout.sh + ${out_dir}/joshua_timeout + COMMAND ${CMAKE_COMMAND} -E tar cfz ${tar_file} ${package_files} + ${out_dir}/joshua_test + ${out_dir}/joshua_timeout + WORKING_DIRECTORY ${out_dir} + COMMENT "Package valgrind correctness archive" + ) + add_custom_target(package_valgrind_tests ALL DEPENDS ${tar_file}) + add_dependencies(package_valgrind_tests strip_only_fdbserver TestHarness) + endif() +endfunction() + +function(package_bindingtester) + if(WIN32 OR OPEN_FOR_IDE) + return() + elseif(APPLE) + set(fdbcName "libfdb_c.dylib") + else() + set(fdbcName "libfdb_c.so") + endif() + set(bdir ${CMAKE_BINARY_DIR}/bindingtester) + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bindingtester) + set(outfiles ${bdir}/fdbcli ${bdir}/fdbserver ${bdir}/${fdbcName} ${bdir}/joshua_test ${bdir}/joshua_timeout) + add_custom_command( + OUTPUT ${outfiles} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/CMakeCache.txt + ${CMAKE_BINARY_DIR}/packages/bin/fdbcli + ${CMAKE_BINARY_DIR}/packages/bin/fdbserver + ${CMAKE_BINARY_DIR}/packages/lib/${fdbcName} + ${bdir} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/bindingTest.sh ${bdir}/joshua_test + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/bindingTimeout.sh ${bdir}/joshua_timeout + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/localClusterStart.sh ${bdir}/localClusterStart.sh + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/contrib/Joshua/scripts/bindingTestScript.sh ${bdir}/bindingTestScript.sh + COMMENT "Copy executables and scripts to bindingtester dir") + file(GLOB_RECURSE test_files ${CMAKE_SOURCE_DIR}/bindings/*) + add_custom_command( + OUTPUT "${CMAKE_BINARY_DIR}/bindingtester.touch" + COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/bindingtester/tests + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/bindingtester/tests + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bindings ${CMAKE_BINARY_DIR}/bindingtester/tests + COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_BINARY_DIR}/bindingtester.touch" + COMMENT "Copy test files for bindingtester") + + add_custom_target(copy_binding_output_files DEPENDS ${CMAKE_BINARY_DIR}/bindingtester.touch python_binding fdb_flow_tester) + add_custom_command( + TARGET copy_binding_output_files + COMMAND ${CMAKE_COMMAND} -E copy $ ${bdir}/tests/flow/bin/fdb_flow_tester + COMMENT "Copy Flow tester for bindingtester") + + set(generated_binding_files python/fdb/fdboptions.py) + if(WITH_JAVA) + if(NOT FDB_RELEASE) + set(prerelease_string "-PRERELEASE") + else() + set(prerelease_string "") + endif() + add_custom_command( + TARGET copy_binding_output_files + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_BINARY_DIR}/packages/fdb-java-${CMAKE_PROJECT_VERSION}${prerelease_string}.jar + ${bdir}/tests/java/foundationdb-client.jar + COMMENT "Copy Java bindings for bindingtester") + add_dependencies(copy_binding_output_files fat-jar) + add_dependencies(copy_binding_output_files foundationdb-tests) + set(generated_binding_files ${generated_binding_files} java/foundationdb-tests.jar) + endif() + + if(WITH_GO AND NOT OPEN_FOR_IDE) + add_dependencies(copy_binding_output_files fdb_go_tester fdb_go) + add_custom_command( + TARGET copy_binding_output_files + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/bindings/go/bin/_stacktester ${bdir}/tests/go/build/bin/_stacktester + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_BINARY_DIR}/bindings/go/src/github.com/apple/foundationdb/bindings/go/src/fdb/generated.go # SRC + ${bdir}/tests/go/src/fdb/ # DEST + COMMENT "Copy generated.go for bindingtester") + endif() + + foreach(generated IN LISTS generated_binding_files) + add_custom_command( + TARGET copy_binding_output_files + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/bindings/${generated} ${bdir}/tests/${generated} + COMMENT "Copy ${generated} to bindingtester") + endforeach() + + add_custom_target(copy_bindingtester_binaries + DEPENDS ${outfiles} "${CMAKE_BINARY_DIR}/bindingtester.touch" copy_binding_output_files) + add_dependencies(copy_bindingtester_binaries strip_only_fdbserver strip_only_fdbcli strip_only_fdb_c) + set(tar_file ${CMAKE_BINARY_DIR}/packages/bindingtester-${CMAKE_PROJECT_VERSION}.tar.gz) + add_custom_command( + OUTPUT ${tar_file} + COMMAND ${CMAKE_COMMAND} -E tar czf ${tar_file} * + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bindingtester + COMMENT "Pack bindingtester") + add_custom_target(bindingtester ALL DEPENDS ${tar_file}) + add_dependencies(bindingtester copy_bindingtester_binaries) endfunction() diff --git a/cmake/FlowCommands.cmake b/cmake/FlowCommands.cmake index 1a3914f3de..4b22de1375 100644 --- a/cmake/FlowCommands.cmake +++ b/cmake/FlowCommands.cmake @@ -130,21 +130,20 @@ function(strip_debug_symbols target) list(APPEND strip_command -o "${out_file}") add_custom_command(OUTPUT "${out_file}" COMMAND ${strip_command} $ + DEPENDS ${target} COMMENT "Stripping symbols from ${target}") add_custom_target(strip_only_${target} DEPENDS ${out_file}) if(is_exec AND NOT APPLE) add_custom_command(OUTPUT "${out_file}.debug" + DEPENDS strip_only_${target} COMMAND objcopy --verbose --only-keep-debug $ "${out_file}.debug" COMMAND objcopy --verbose --add-gnu-debuglink="${out_file}.debug" "${out_file}" - DEPENDS ${out_file} COMMENT "Copy debug symbols to ${out_name}.debug") - list(APPEND out_files "${out_file}.debug") - add_custom_target(strip_${target} DEPENDS "${out_file}.debug") + add_custom_target(strip_${target} DEPENDS "${out_file}.debug") else() add_custom_target(strip_${target}) + add_dependencies(strip_${target} strip_only_${target}) endif() - add_dependencies(strip_${target} strip_only_${target}) - add_dependencies(strip_${target} ${target}) add_dependencies(strip_targets strip_${target}) endfunction() @@ -185,12 +184,12 @@ function(add_flow_target) if(WIN32) add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${generated}" COMMAND $ "${CMAKE_CURRENT_SOURCE_DIR}/${src}" "${CMAKE_CURRENT_BINARY_DIR}/${generated}" ${actor_compiler_flags} - DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${src}" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${src}" ${actor_exe} COMMENT "Compile actor: ${src}") else() add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${generated}" COMMAND ${MONO_EXECUTABLE} ${actor_exe} "${CMAKE_CURRENT_SOURCE_DIR}/${src}" "${CMAKE_CURRENT_BINARY_DIR}/${generated}" ${actor_compiler_flags} > /dev/null - DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${src}" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${src}" ${actor_exe} COMMENT "Compile actor: ${src}") endif() else() diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt new file mode 100644 index 0000000000..fcbb4a9c1d --- /dev/null +++ b/contrib/CMakeLists.txt @@ -0,0 +1,4 @@ +if(NOT WIN32) + add_subdirectory(TraceLogHelper) + add_subdirectory(TestHarness) +endif() diff --git a/contrib/Joshua/README.md b/contrib/Joshua/README.md new file mode 100644 index 0000000000..f3d98892c6 --- /dev/null +++ b/contrib/Joshua/README.md @@ -0,0 +1,23 @@ +# Overview + +This directory provides the files needed to create a Joshua correctness bundle for testing FoundationDB. + +Rigorous testing is central to our engineering process. The features of our core are challenging, requiring us to meet exacting standards of correctness and performance. Data guarantees and transactional integrity must be maintained not only during normal operations but over a broad range of failure scenarios. At the same time, we aim to achieve performance goals such as low latencies and near-linear scalability. To meet these challenges, we use a combined regime of robust simulation, live performance testing, and hardware-based failure testing. + +# Joshua + +Joshua is a powerful tool for testing system correctness. Our simulation technology, called Joshua, is enabled by and tightly integrated with `flow`, our programming language for actor-based concurrency. In addition to generating efficient production code, Flow works with Joshua for simulated execution. + +The major goal of Joshua is to make sure that we find and diagnose issues in simulation rather than the real world. Joshua runs tens of thousands of simulations every night, each one simulating large numbers of component failures. Based on the volume of tests that we run and the increased intensity of the failures in our scenarios, we estimate that we have run the equivalent of roughly one trillion CPU-hours of simulation on FoundationDB. + +Joshua is able to conduct a *deterministic* simulation of an entire FoundationDB cluster within a single-threaded process. Determinism is crucial in that it allows perfect repeatability of a simulated run, facilitating controlled experiments to home in on issues. The simulation steps through time, synchronized across the system, representing a larger amount of real time in a smaller amount of simulated time. In practice, our simulations usually have about a 10-1 factor of real-to-simulated time, which is advantageous for the efficiency of testing. + +We run a broad range of simulations testing various aspects of the system. For example, we run a cycle test that uses key-values pairs arranged in a ring that executes transactions to change the values in a manner designed to maintain the ring's integrity, allowing a clear test of transactional isolation. + +Joshua simulates all physical components of a FoundationDB system, beginning with the number and type of machines in the cluster. For example, Joshua models drive performance on each machine, including drive space and the possibility of the drive filling up. Joshua also models the network, allowing a small amount of code to specify delivery of packets. + +We use Joshua to simulate failures modes at the network, machine, and datacenter levels, including connection failures, degradation of machine performance, machine shutdowns or reboots, machines coming back from the dead, etc. We stress-test all of these failure modes, failing machines at very short intervals, inducing unusually severe loads, and delaying communications channels. + +For a while, there was an informal competition within the engineering team to design failures that found the toughest bugs and issues the most easily. After a period of one-upsmanship, the reigning champion is called "swizzle-clogging". To swizzle-clog, you first pick a random subset of nodes in the cluster. Then, you "clog" (stop) each of their network connections one by one over a few seconds. Finally, you unclog them in a random order, again one by one, until they are all up. This pattern seems to be particularly good at finding deep issues that only happen in the rarest real-world cases. + +Joshua's success has surpassed our expectation and has been vital to our engineering team. It seems unlikely that we would have been able to build FoundationDB without this technology. diff --git a/contrib/Joshua/scripts/bindingTest.sh b/contrib/Joshua/scripts/bindingTest.sh new file mode 100755 index 0000000000..4a0d7c70da --- /dev/null +++ b/contrib/Joshua/scripts/bindingTest.sh @@ -0,0 +1,10 @@ +#!/bin/bash +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +ulimit -S -c unlimited + +unset FDB_NETWORK_OPTION_EXTERNAL_CLIENT_DIRECTORY +WORKDIR="$(pwd)/tmp/$$" +if [ ! -d "${WORKDIR}" ] ; then + mkdir -p "${WORKDIR}" +fi +DEBUGLEVEL=0 DISPLAYERROR=1 RANDOMTEST=1 WORKDIR="${WORKDIR}" ${SCRIPTDIR}/bindingTestScript.sh 1 diff --git a/contrib/Joshua/scripts/bindingTestScript.sh b/contrib/Joshua/scripts/bindingTestScript.sh new file mode 100755 index 0000000000..f4e0e8eb8b --- /dev/null +++ b/contrib/Joshua/scripts/bindingTestScript.sh @@ -0,0 +1,88 @@ +#/bin/bash +SCRIPTDIR=$( cd "${BASH_SOURCE[0]%\/*}" && pwd ) +cwd="$(pwd)" +BINDIR="${BINDIR:-${SCRIPTDIR}}" +LIBDIR="${BINDIR}:${LD_LIBRARY_PATH}" +SCRIPTID="${$}" +SAVEONERROR="${SAVEONERROR:-1}" +PYTHONDIR="${BINDIR}/tests/python" +testScript="${BINDIR}/tests/bindingtester/run_binding_tester.sh" +VERSION="1.9" + +source ${SCRIPTDIR}/localClusterStart.sh + +# Display syntax +if [ "$#" -lt 1 ] +then + echo "bindingTestScript.sh " + echo " version: ${VERSION}" + exit 1 +fi + +cycles="${1}" + +if [ "${DEBUGLEVEL}" -gt 0 ] +then + echo "Work dir: ${WORKDIR}" + echo "Bin dir: ${BINDIR}" + echo "Log dir: ${LOGDIR}" + echo "Python path: ${PYTHONDIR}" + echo "Lib dir: ${LIBDIR}" + echo "Cluster String: ${FDBCLUSTERTEXT}" + echo "Script Id: ${SCRIPTID}" + echo "Version: ${VERSION}" +fi + +# Begin the cluster using the logic in localClusterStart.sh. +startCluster + +# Stop the cluster on exit +trap "stopCluster" EXIT + +# Display user message +if [ "${status}" -ne 0 ]; then + : +elif ! displayMessage "Running binding tester" +then + echo 'Failed to display user message' + let status="${status} + 1" + +elif ! PYTHONPATH="${PYTHONDIR}" LD_LIBRARY_PATH="${LIBDIR}" FDB_CLUSTER_FILE="${FDBCONF}" LOGSTDOUT=1 CONSOLELOG="${WORKDIR}/console.log" "${testScript}" "${cycles}" "${WORKDIR}/errors/run.log" +then + if [ "${DEBUGLEVEL}" -gt 0 ]; then + printf "\n%-16s %-40s \n" "$(date '+%F %H-%M-%S')" "Failed to complete binding tester in ${SECONDS} seconds." + fi + let status="${status} + 1" + +elif [ "${DEBUGLEVEL}" -gt 0 ]; then + printf "\n%-16s %-40s \n" "$(date '+%F %H-%M-%S')" "Completed binding tester in ${SECONDS} seconds" +fi + +# Display directory and log information, if an error occurred +if [ "${status}" -ne 0 ] +then + ls "${WORKDIR}" &> "${LOGDIR}/dir.log" + ps -eafwH &> "${LOGDIR}/process-preclean.log" + if [ -f "${FDBCONF}" ]; then + cp -f "${FDBCONF}" "${LOGDIR}/" + fi + # Display the severity errors + if [ -d "${LOGDIR}" ]; then + grep -ir 'Severity="40"' "${LOGDIR}" + fi +fi + +# Save debug information files, environment, and log information, if an error occurred +if [ "${status}" -ne 0 ] && [ "${SAVEONERROR}" -gt 0 ]; then + ps -eafwH &> "${LOGDIR}/process-exit.log" + netstat -na &> "${LOGDIR}/netstat.log" + df -h &> "${LOGDIR}/disk.log" + env &> "${LOGDIR}/env.log" +fi + +# Stop the cluster +if stopCluster; then + unset FDBSERVERID +fi + +exit "${status}" diff --git a/contrib/Joshua/scripts/bindingTimeout.sh b/contrib/Joshua/scripts/bindingTimeout.sh new file mode 100755 index 0000000000..d28fd938ce --- /dev/null +++ b/contrib/Joshua/scripts/bindingTimeout.sh @@ -0,0 +1,28 @@ +#!/bin/bash -u + +# Look for the start cluster log file. +notstarted=0 +for file in `find . -name startcluster.log` ; do + if [ -n "$(grep 'Could not create database' "${file}")" ] ; then + echo "${file}:" + cat "${file}" + echo + notstarted=1 + fi +done + +# Print information on how the server didn't start. +if [ "${notstarted}" -gt 0 ] ; then + for file in `find . -name fdbclient.log` ; do + echo "${file}:" + cat "${file}" + echo + done +fi + +# Print the test output. +for file in `find . -name console.log` ; do + echo "${file}:" + cat "${file}" + echo +done diff --git a/contrib/Joshua/scripts/correctnessTest.sh b/contrib/Joshua/scripts/correctnessTest.sh new file mode 100755 index 0000000000..5f6abd6926 --- /dev/null +++ b/contrib/Joshua/scripts/correctnessTest.sh @@ -0,0 +1,3 @@ +#!/bin/sh +OLDBINDIR="${OLDBINDIR:-/app/deploy/global_data/oldBinaries}" +mono bin/TestHarness.exe joshua-run "${OLDBINDIR}" false diff --git a/contrib/Joshua/scripts/correctnessTimeout.sh b/contrib/Joshua/scripts/correctnessTimeout.sh new file mode 100755 index 0000000000..7917aae591 --- /dev/null +++ b/contrib/Joshua/scripts/correctnessTimeout.sh @@ -0,0 +1,4 @@ +#!/bin/bash -u +for file in `find . -name 'trace*.xml'` ; do + mono ./bin/TestHarness.exe summarize "${file}" summary.xml "" JoshuaTimeout true +done diff --git a/contrib/Joshua/scripts/localClusterStart.sh b/contrib/Joshua/scripts/localClusterStart.sh new file mode 100644 index 0000000000..d1280267b3 --- /dev/null +++ b/contrib/Joshua/scripts/localClusterStart.sh @@ -0,0 +1,402 @@ +#!/bin/bash +SCRIPTDIR="${SCRIPTDIR:-$( cd "${BASH_SOURCE[0]%\/*}" && pwd )}" +DEBUGLEVEL="${DEBUGLEVEL:-1}" +WORKDIR="${WORKDIR:-${SCRIPTDIR}/tmp/fdb.work}" +LOGDIR="${WORKDIR}/log" +ETCDIR="${WORKDIR}/etc" +BINDIR="${BINDIR:-${SCRIPTDIR}}" +FDBPORTSTART="${FDBPORTSTART:-4000}" +FDBPORTTOTAL="${FDBPORTTOTAL:-1000}" +SERVERCHECKS="${SERVERCHECKS:-10}" +CONFIGUREWAIT="${CONFIGUREWAIT:-240}" +FDBCONF="${ETCDIR}/fdb.cluster" +LOGFILE="${LOGFILE:-${LOGDIR}/startcluster.log}" +AUDITCLUSTER="${AUDITCLUSTER:-0}" +AUDITLOG="${AUDITLOG:-/tmp/audit-cluster.log}" + +# Initialize the variables +status=0 +messagetime=0 +messagecount=0 + +# Do nothing, if cluster string is already defined +if [ -n "${FDBCLUSTERTEXT}" ] +then + : +# Otherwise, define the cluster text +else + # Define a random ip address and port on localhost + if [ -z "${IPADDRESS}" ]; then + let index2="${RANDOM} % 256" + let index3="${RANDOM} % 256" + let index4="(${RANDOM} % 255) + 1" + IPADDRESS="127.${index2}.${index3}.${index4}" + fi + if [ -z "${FDBPORT}" ]; then + let FDBPORT="(${RANDOM} % ${FDBPORTTOTAL}) + ${FDBPORTSTART}" + fi + FDBCLUSTERTEXT="${IPADDRESS}:${FDBPORT}" +fi + +function log +{ + local status=0 + if [ "$#" -lt 1 ] + then + echo "Usage: log [echo]" + echo + echo "Logs the message and timestamp to LOGFILE (${LOGFILE}) and, if the" + echo "second argument is either not present or is set to 1, stdout." + let status="${status} + 1" + else + # Log to stdout. + if [ "$#" -lt 2 ] || [ "${2}" -ge 1 ] + then + echo "${1}" + fi + + # Log to file. + datestr=$(date +"%Y-%m-%d %H:%M:%S (%s)") + dir=$(dirname "${LOGFILE}") + if ! [ -d "${dir}" ] && ! mkdir -p "${dir}" + then + echo "Could not create directory to log output." + let status="${status} + 1" + elif ! [ -f "${LOGFILE}" ] && ! touch "${LOGFILE}" + then + echo "Could not create file ${LOGFILE} to log output." + let status="${status} + 1" + elif ! echo "[ ${datestr} ] ${1}" >> "${LOGFILE}" + then + echo "Could not log output to ${LOGFILE}." + let status="${status} + 1" + fi + fi + + return "${status}" +} + +# Display a message for the user. +function displayMessage +{ + local status=0 + + if [ "$#" -lt 1 ] + then + echo "displayMessage " + let status="${status} + 1" + elif ! log "${1}" 0 + then + log "Could not write message to file." + else + # Increment the message counter + let messagecount="${messagecount} + 1" + + # Display successful message, if previous message + if [ "${messagecount}" -gt 1 ] + then + # Determine the amount of transpired time + let timespent="${SECONDS}-${messagetime}" + + if [ "${DEBUGLEVEL}" -gt 0 ]; then + printf "... done in %3d seconds\n" "${timespent}" + fi + fi + + # Display message + if [ "${DEBUGLEVEL}" -gt 0 ]; then + printf "%-16s %-35s " "$(date "+%F %H-%M-%S")" "$1" + fi + + # Update the variables + messagetime="${SECONDS}" + fi + + return "${status}" +} + +# Create the directories used by the server. +function createDirectories +{ + local status=0 + + # Display user message + if ! displayMessage "Creating directories" + then + echo 'Failed to display user message' + let status="${status} + 1" + + elif ! mkdir -p "${LOGDIR}" "${ETCDIR}" + then + log "Failed to create directories" + let status="${status} + 1" + + # Display user message + elif ! displayMessage "Setting file permissions" + then + log 'Failed to display user message' + let status="${status} + 1" + + elif ! chmod 755 "${BINDIR}/fdbserver" "${BINDIR}/fdbcli" + then + log "Failed to set file permissions" + let status="${status} + 1" + + else + while read filepath + do + if [ -f "${filepath}" ] && [ ! -x "${filepath}" ] + then + # if [ "${DEBUGLEVEL}" -gt 1 ]; then + # log " Enable executable: ${filepath}" + # fi + log " Enable executable: ${filepath}" "${DEBUGLEVEL}" + if ! chmod 755 "${filepath}" + then + log "Failed to set executable for file: ${filepath}" + let status="${status} + 1" + fi + fi + done < <(find "${BINDIR}" -iname '*.py' -o -iname '*.rb' -o -iname 'fdb_flow_tester' -o -iname '_stacktester' -o -iname '*.js' -o -iname '*.sh' -o -iname '*.ksh') + fi + + return ${status} +} + +# Create a cluster file for the local cluster. +function createClusterFile +{ + local status=0 + + if [ "${status}" -ne 0 ]; then + : + # Display user message + elif ! displayMessage "Creating Fdb Cluster file" + then + log 'Failed to display user message' + let status="${status} + 1" + else + description=$(LC_CTYPE=C tr -dc A-Za-z0-9 < /dev/urandom 2> /dev/null | head -c 8) + random_str=$(LC_CTYPE=C tr -dc A-Za-z0-9 < /dev/urandom 2> /dev/null | head -c 8) + echo "${description}:${random_str}@${FDBCLUSTERTEXT}" > "${FDBCONF}" + fi + + if [ "${status}" -ne 0 ]; then + : + elif ! chmod 0664 "${FDBCONF}"; then + log "Failed to set permissions on fdbconf: ${FDBCONF}" + let status="${status} + 1" + fi + + return ${status} +} + +# Stop the Cluster from running. +function stopCluster +{ + local status=0 + + # Add an audit entry, if enabled + if [ "${AUDITCLUSTER}" -gt 0 ]; then + printf '%-15s (%6s) Stopping cluster %-20s (%6s): %s\n' "$(date +'%Y-%m-%d %H:%M:%S')" "${$}" "${FDBCLUSTERTEXT}" "${FDBSERVERID}" >> "${AUDITLOG}" + fi + if [ -z "${FDBSERVERID}" ]; then + log 'FDB Server process is not defined' + let status="${status} + 1" + elif ! kill -0 "${FDBSERVERID}"; then + log "Failed to locate FDB Server process (${FDBSERVERID})" + let status="${status} + 1" + elif "${BINDIR}/fdbcli" -C "${FDBCONF}" --exec "kill; kill ${FDBCLUSTERTEXT}; sleep 3" --timeout 120 &>> "${LOGDIR}/fdbcli-kill.log" + then + # Ensure that process is dead + if ! kill -0 "${FDBSERVERID}" 2> /dev/null; then + log "Killed cluster (${FDBSERVERID}) via cli" + elif ! kill -9 "${FDBSERVERID}"; then + log "Failed to kill FDB Server process (${FDBSERVERID}) via cli or kill command" + let status="${status} + 1" + else + log "Forcibly killed FDB Server process (${FDBSERVERID}) since cli failed" + fi + elif ! kill -9 "${FDBSERVERID}"; then + log "Failed to forcibly kill FDB Server process (${FDBSERVERID})" + let status="${status} + 1" + else + log "Forcibly killed FDB Server process (${FDBSERVERID})" + fi + return "${status}" +} + +# Start the server running. +function startFdbServer +{ + local status=0 + + # Add an audit entry, if enabled + if [ "${AUDITCLUSTER}" -gt 0 ]; then + printf '%-15s (%6s) Starting cluster %-20s\n' "$(date +'%Y-%m-%d %H:%M:%S')" "${$}" "${FDBCLUSTERTEXT}" >> "${AUDITLOG}" + fi + + if ! displayMessage "Starting Fdb Server" + then + log 'Failed to display user message' + let status="${status} + 1" + + else + "${BINDIR}/fdbserver" --knob_disable_posix_kernel_aio=1 -C "${FDBCONF}" -p "${FDBCLUSTERTEXT}" -L "${LOGDIR}" -d "${WORKDIR}/fdb/${$}" &> "${LOGDIR}/fdbserver.log" & + if [ "${?}" -ne 0 ] + then + log "Failed to start FDB Server" + let status="${status} + 1" + else + FDBSERVERID="${!}" + fi + fi + + if [ -z "${FDBSERVERID}" ]; then + log "FDB Server start failed because no process" + let status="${status} + 1" + elif ! kill -0 "${FDBSERVERID}" ; then + log "FDB Server start failed because process terminated unexpectedly" + let status="${status} + 1" + fi + + return ${status} +} + +function getStatus +{ + local status=0 + + if [ "${status}" -ne 0 ]; then + : + elif ! date &>> "${LOGDIR}/fdbclient.log" + then + log 'Failed to get date' + let status="${status} + 1" + elif ! "${BINDIR}/fdbcli" -C "${FDBCONF}" --exec 'status json' --timeout 120 &>> "${LOGDIR}/fdbclient.log" + then + log 'Failed to get status from fdbcli' + let status="${status} + 1" + elif ! date &>> "${LOGDIR}/fdbclient.log" + then + log 'Failed to get date' + let status="${status} + 1" + fi + + return ${status} +} + +# Verify that the cluster is available. +function verifyAvailable +{ + local status=0 + + if [ -z "${FDBSERVERID}" ]; then + log "FDB Server process is not defined." + let status="${status} + 1" + # Verify that the server is running. + elif ! kill -0 "${FDBSERVERID}" + then + log "FDB server process (${FDBSERVERID}) is not running" + let status="${status} + 1" + # Display user message. + elif ! displayMessage "Checking cluster availability" + then + log 'Failed to display user message' + let status="${status} + 1" + # Determine if status json says the database is available. + else + avail=`"${BINDIR}/fdbcli" -C "${FDBCONF}" --exec 'status json' --timeout "${SERVERCHECKS}" 2> /dev/null | grep -E '"database_available"|"available"' | grep 'true'` + log "Avail value: ${avail}" "${DEBUGLEVEL}" + if [[ -n "${avail}" ]] ; then + : + else + let status="${status} + 1" + fi + fi + return "${status}" +} + +# Configure the database on the server. +function createDatabase +{ + local status=0 + + if [ "${status}" -ne 0 ]; then + : + # Ensure that the server is running + elif ! kill -0 "${FDBSERVERID}" + then + log "FDB server process: (${FDBSERVERID}) is not running" + let status="${status} + 1" + + # Display user message + elif ! displayMessage "Creating database" + then + log 'Failed to display user message' + let status="${status} + 1" + elif ! echo "Client log:" &> "${LOGDIR}/fdbclient.log" + then + log 'Failed to create fdbclient.log' + let status="${status} + 1" + elif ! getStatus + then + log 'Failed to get status' + let status="${status} + 1" + + # Configure the database. + else + "${BINDIR}/fdbcli" -C "${FDBCONF}" --exec 'configure new single memory; status' --timeout "${CONFIGUREWAIT}" --log --log-dir "${LOGDIR}" &>> "${LOGDIR}/fdbclient.log" + + if ! displayMessage "Checking if config succeeded" + then + log 'Failed to display user message.' + fi + + iteration=0 + while [[ "${iteration}" -lt "${SERVERCHECKS}" ]] && ! verifyAvailable + do + log "Database not created (iteration ${iteration})." + let iteration="${iteration} + 1" + done + + if ! verifyAvailable + then + log "Failed to create database via cli" + getStatus + cat "${LOGDIR}/fdbclient.log" + log "Ignoring -- moving on" + #let status="${status} + 1" + fi + fi + + return ${status} +} + +# Begin the local cluster from scratch. +function startCluster +{ + local status=0 + + if [ "${status}" -ne 0 ]; then + : + elif ! createDirectories + then + log "Could not create directories." + let status="${status} + 1" + elif ! createClusterFile + then + log "Could not create cluster file." + let status="${status} + 1" + elif ! startFdbServer + then + log "Could not start FDB server." + let status="${status} + 1" + elif ! createDatabase + then + log "Could not create database." + let status="${status} + 1" + fi + + return ${status} +} diff --git a/contrib/Joshua/scripts/valgrindTest.sh b/contrib/Joshua/scripts/valgrindTest.sh new file mode 100755 index 0000000000..5409429691 --- /dev/null +++ b/contrib/Joshua/scripts/valgrindTest.sh @@ -0,0 +1,3 @@ +#!/bin/sh +OLDBINDIR="${OLDBINDIR:-/app/deploy/global_data/oldBinaries}" +mono bin/TestHarness.exe joshua-run "${OLDBINDIR}" true diff --git a/contrib/Joshua/scripts/valgrindTimeout.sh b/contrib/Joshua/scripts/valgrindTimeout.sh new file mode 100755 index 0000000000..b9d9e7ebad --- /dev/null +++ b/contrib/Joshua/scripts/valgrindTimeout.sh @@ -0,0 +1,6 @@ +#!/bin/bash -u +for file in `find . -name 'trace*.xml'` ; do + for valgrindFile in `find . -name 'valgrind*.xml'` ; do + mono ./bin/TestHarness.exe summarize "${file}" summary.xml "${valgrindFile}" JoshuaTimeout true + done +done diff --git a/contrib/TestHarness/CMakeLists.txt b/contrib/TestHarness/CMakeLists.txt new file mode 100644 index 0000000000..4eecd82e04 --- /dev/null +++ b/contrib/TestHarness/CMakeLists.txt @@ -0,0 +1,17 @@ +set(SRCS + ${CMAKE_CURRENT_BINARY_DIR}/Program.cs + Properties/AssemblyInfo.cs) + +set(TEST_HARNESS_REFERENCES + "-r:System,System.Core,System.Xml.Linq,System.Data.DataSetExtensions,Microsoft.CSharp,System.Data,System.Xml,System.Runtime.Serialization,${TraceLogHelperDll}") + +set(out_file ${CMAKE_BINARY_DIR}/packages/bin/TestHarness.exe) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Program.cs.cmake ${CMAKE_CURRENT_BINARY_DIR}/Program.cs) + +add_custom_command(OUTPUT ${out_file} + COMMAND ${MCS_EXECUTABLE} ARGS ${TEST_HARNESS_REFERENCES} ${SRCS} "-target:exe" "-out:${out_file}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${SRCS} TraceLogHelper + COMMENT "Compile TestHarness" VERBATIM) +add_custom_target(TestHarness DEPENDS ${out_file}) diff --git a/contrib/TestHarness/Program.cs.cmake b/contrib/TestHarness/Program.cs.cmake new file mode 100644 index 0000000000..69fdd9bb36 --- /dev/null +++ b/contrib/TestHarness/Program.cs.cmake @@ -0,0 +1,1588 @@ +/* + * Program.cs + * + * This source file is part of the FoundationDB open source project + * + * Copyright 2013-2020 Apple Inc. and the FoundationDB project authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Xml.Linq; +using System.IO; +using System.Diagnostics; +using System.ComponentModel; +using System.Runtime.InteropServices; +using System.Xml; +using System.Runtime.Serialization.Json; + +namespace SummarizeTest +{ + static class Program + { + static Random random; + const int killSeconds = 60 * 30; + const int maxWarnings = 10; + const int maxStderrBytes = 1000; + const double unseedRatio = 0.05; + const double buggifyOnRatio = 0.8; + static string BINARY = "fdbserver" + (IsRunningOnMono() ? "" : ".exe"); + static string PLUGIN = "FDBLibTLS." + (IsRunningOnMono() ? "so" : "dll"); + static string OS_NAME = IsRunningOnMono() ? "linux" : "win"; + + static int Main(string[] args) + { + bool traceToStdout = false; + try + { + byte[] seed = new byte[4]; + new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(seed); + random = new Random(new BinaryReader(new MemoryStream(seed)).ReadInt32()); + + if (args.Length < 1) + return UsageMessage(); + + if (args[0] == "summarize") + { + if (args.Length < 3) + return UsageMessage(); + string valgrindFileName = args.Length >= 4 ? args[3] : null; + string externalError = args.Length >= 5 ? args[4] : ""; + traceToStdout = args.Length == 6 && args[5] == "true"; + + int unseed; + bool retryableError; + //SOMEDAY: This only works if a run generated just one trace file. We should change the summarize command to take multiple trace files + return Summarize(new string[]{ args[1] }, args[2], null, null, null, null, null, null, valgrindFileName, -1, out unseed, out retryableError, true, + traceToStdout: traceToStdout, externalError: externalError); + } + else if (args[0] == "remote") + { + if (args.Length < 6) + return UsageMessage(); + + return Remote(args[1], args[2], double.Parse(args[3]), int.Parse(args[4]), args[5], args.Length == 7 ? args[6] : "default"); + } + else if (args[0] == "run") + { + try + { + if (args.Length < 6) + return UsageMessage(); + + string runDir = null; + if(args[1] != "temp") runDir = args[1]; + + bool useValgind = args.Length > 6 && args[6].ToLower() == "true"; + int maxTries = (args.Length > 7) ? int.Parse(args[7]) : 3; + return Run(args[2], args[3], args[4], args[5], null, runDir, null, useValgind, maxTries); + } + catch(Exception e) + { + var xout = new XElement("TestHarnessError", + new XAttribute("Severity", (int)Magnesium.Severity.SevError), + new XAttribute("ErrorMessage", e.Message)); + + AppendXmlMessageToSummary(args[5], xout); + throw; + } + } + else if (args[0] == "replay") + { + if (args.Length != 6) + return UsageMessage(); + + string runDir = null; + if (args[1] != "temp") runDir = args[1]; + + return Replay(args[2], args[3], args[4], args[5], runDir); + } + else if (args[0] == "auto") + { + if (args.Length < 4) + return UsageMessage(); + + string runDir = null; + if (args[1] != "temp") runDir = args[1]; + + string cacheDir = Path.Combine(runDir, "test_harness_cache"); + bool useValgrind = args.Length > 4 && args[4].ToLower() == "true"; + int maxTries = (args.Length > 5) ? int.Parse(args[5]) : 3; + + return Auto(args[2], Path.Combine(runDir, "runs"), args[3], cacheDir, useValgrind, maxTries); + } + else if (args[0] == "extract-errors") + { + if (args.Length != 3) + return UsageMessage(); + + return ExtractErrors(args[1], args[2]); + } + else if (args[0] == "joshua-run") + { + traceToStdout = true; + + try + { + string oldBinaryFolder = (args.Length > 1) ? args[1] : Path.Combine("/opt", "joshua", "global_data", "oldBinaries"); + bool useValgrind = args.Length > 2 && args[2].ToLower() == "true"; + int maxTries = (args.Length > 3) ? int.Parse(args[3]) : 3; + return Run(Path.Combine("bin", BINARY), "", "tests", "summary.xml", "error.xml", "tmp", oldBinaryFolder, useValgrind, maxTries, true, Path.Combine("/app", "deploy", "runtime", ".tls_5_1", PLUGIN)); + } + catch(Exception e) + { + var xout = new XElement("TestHarnessError", + new XAttribute("Severity", (int)Magnesium.Severity.SevError), + new XAttribute("ErrorMessage", e.ToString())); + + AppendXmlMessageToSummary("summary.xml", xout, true); + throw; + } + } + else if (args[0] == "version") + { + return VersionInfo(); + } + + return UsageMessage(); + } + catch (Exception e) + { + if (!traceToStdout) + { + Console.WriteLine("Error:"); + Console.WriteLine(e.ToString()); + } + + return 100; + } + } + + static T Choice(this Random random, IList items) + { + return items[ random.Next(items.Count) ]; + } + + static bool IsRunningOnMono() + { + return Type.GetType("Mono.Runtime") != null; + } + + static int Replay(string fdbserverName, string tlsPluginFile, string inputSummaryFileName, string outputSummaryFileName, string runDir) + { + using (var summaryFileIn = System.IO.File.Open(inputSummaryFileName, + System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite | System.IO.FileShare.Delete)) + { + foreach (var test in Magnesium.XmlParser.Parse(summaryFileIn, inputSummaryFileName).OfType()) + { + if (test is Magnesium.Test) continue; // Only process the test plans + int unseed; + bool retryableError; + RunTest(fdbserverName, tlsPluginFile, outputSummaryFileName, null, test.randomSeed, test.Buggify, test.TestFile, runDir, test.TestUID, -1, out unseed, out retryableError, true, false); + } + } + return 0; + } + + // Ver format - x.x.x (eg, 5.0.1, 4.2.11) + // Returns true is ver1 is greater than or equal to ver2 + static bool versionGreaterThanOrEqual(string ver1, string ver2) + { + string[] tokens1 = ver1.Split('.'); + string[] tokens2 = ver2.Split('.'); + if (tokens1.Length != tokens2.Length || tokens2.Length != 3) + { + throw new ArgumentException("Invalid Version Format Version1: " + ver1 + " Version2: " + ver2); + } + int[] version1 = Array.ConvertAll(tokens1, int.Parse); + int[] version2 = Array.ConvertAll(tokens2, int.Parse); + return ((System.Collections.IStructuralComparable)version1).CompareTo(version2, System.Collections.Generic.Comparer.Default) >= 0; + } + + static bool versionLessThan(string ver1, string ver2) { + return !versionGreaterThanOrEqual(ver1, ver2); + } + + static string getFdbserverVersion(string fdbserverName) { + using (var process = new System.Diagnostics.Process()) + { + process.StartInfo.UseShellExecute = false; + process.StartInfo.RedirectStandardOutput = true; + process.StartInfo.FileName = fdbserverName; + process.StartInfo.Arguments = "--version"; + process.StartInfo.RedirectStandardError = true; + + process.Start(); + var output = process.StandardOutput.ReadToEnd(); + // If the process finished successfully, we call the parameterless WaitForExit to ensure that output buffers get flushed + process.WaitForExit(); + + var match = Regex.Match(output, @"v(\d+\.\d+\.\d+)"); + if (match.Groups.Count < 1) return ""; + return match.Groups[1].Value; + } + } + + static int Run(string fdbserverName, string tlsPluginFile, string testFolder, string summaryFileName, string errorFileName, string runDir, string oldBinaryFolder, bool useValgrind, int maxTries, bool traceToStdout = false, string tlsPluginFile_5_1 = "") + { + int seed = random.Next(1000000000); + bool buggify = random.NextDouble() < buggifyOnRatio; + string testFile = null; + string testDir = ""; + string oldServerName = ""; + + if (Directory.Exists(testFolder)) + { + int poolSize = 0; + if( Directory.Exists(Path.Combine(testFolder, "rare")) ) poolSize += 1; + if( Directory.Exists(Path.Combine(testFolder, "slow")) ) poolSize += 5; + if( Directory.Exists(Path.Combine(testFolder, "fast")) ) poolSize += 14; + if( Directory.Exists(Path.Combine(testFolder, "restarting")) ) poolSize += 1; + + if( poolSize == 0 ) { + Console.WriteLine("Passed folder ({0}) did not have a fast, slow, rare, or restarting sub-folder", testFolder); + return 1; + } + int selection = random.Next(poolSize); + int selectionWindow = 0; + + if( Directory.Exists(Path.Combine(testFolder, "rare")) ) selectionWindow += 1; + if (selection < selectionWindow) + testDir = Path.Combine(testFolder, "rare"); + else + { + if (Directory.Exists(Path.Combine(testFolder, "restarting"))) selectionWindow += 1; + if (selection < selectionWindow) + testDir = Path.Combine(testFolder, "restarting"); + else + { + if (Directory.Exists(Path.Combine(testFolder, "slow"))) selectionWindow += 5; + if (selection < selectionWindow) + testDir = Path.Combine(testFolder, "slow"); + else + testDir = Path.Combine(testFolder, "fast"); + } + } + string[] files = Directory.GetFiles(testDir, "*", SearchOption.AllDirectories); + string[] uniqueFiles; + if (testDir.EndsWith("restarting")) + { + ISet uniqueFileSet = new HashSet(); + foreach(string file in files) { + uniqueFileSet.Add(file.Substring(0, file.LastIndexOf("-"))); // all restarting tests end with -1.txt or -2.txt + } + uniqueFiles = uniqueFileSet.ToArray(); + testFile = random.Choice(uniqueFiles); + // The on-disk format changed in 4.0.0, and 5.x can't load files from 3.x. + string oldBinaryVersionLowerBound = "4.0.0"; + string lastFolderName = Path.GetFileName(Path.GetDirectoryName(testFile)); + if (lastFolderName.Contains("from_") || lastFolderName.Contains("to_")) // Only perform upgrade/downgrade tests from certain versions + { + oldBinaryVersionLowerBound = lastFolderName.Split('_').Last(); + } + string oldBinaryVersionUpperBound = getFdbserverVersion(fdbserverName); + if (versionGreaterThanOrEqual("4.0.0", oldBinaryVersionUpperBound)) { + // If the binary under test is from 3.x, then allow upgrade tests from 3.x binaries. + oldBinaryVersionLowerBound = "0.0.0"; + } + string[] currentBinary = { fdbserverName }; + IEnumerable oldBinaries = Array.FindAll( + Directory.GetFiles(oldBinaryFolder), + x => versionGreaterThanOrEqual(Path.GetFileName(x).Split('-').Last(), oldBinaryVersionLowerBound) + && versionLessThan(Path.GetFileName(x).Split('-').Last(), oldBinaryVersionUpperBound)); + oldBinaries = oldBinaries.Concat(currentBinary); + oldServerName = random.Choice(oldBinaries.ToList()); + } + else + { + uniqueFiles = Directory.GetFiles(testDir); + testFile = random.Choice(uniqueFiles); + } + } + else if (File.Exists(testFolder)) + testFile = testFolder; + else + { + Console.WriteLine("Passed path ({0}) was not a folder or file", testFolder); + return 1; + } + + int result = 0; + bool unseedCheck = random.NextDouble() < unseedRatio; + for (int i = 0; i < maxTries; ++i) + { + bool logOnRetryableError = i == maxTries - 1; + bool retryableError = false; + + if (testDir.EndsWith("restarting")) + { + bool isDowngrade = Path.GetFileName(Path.GetDirectoryName(testFile)).Contains("to_"); + string firstServerName = isDowngrade ? fdbserverName : oldServerName; + string secondServerName = isDowngrade ? oldServerName : fdbserverName; + int expectedUnseed = -1; + int unseed; + string uid = Guid.NewGuid().ToString(); + bool useNewPlugin = (oldServerName == fdbserverName) || versionGreaterThanOrEqual(oldServerName.Split('-').Last(), "5.2.0"); + bool useToml = File.Exists(testFile + "-1.toml"); + string testFile1 = useToml ? testFile + "-1.toml" : testFile + "-1.txt"; + result = RunTest(firstServerName, useNewPlugin ? tlsPluginFile : tlsPluginFile_5_1, summaryFileName, errorFileName, seed, buggify, testFile1, runDir, uid, expectedUnseed, out unseed, out retryableError, logOnRetryableError, useValgrind, false, true, oldServerName, traceToStdout); + if (result == 0) + { + string testFile2 = useToml ? testFile + "-2.toml" : testFile + "-2.txt"; + result = RunTest(secondServerName, tlsPluginFile, summaryFileName, errorFileName, seed+1, buggify, testFile2, runDir, uid, expectedUnseed, out unseed, out retryableError, logOnRetryableError, useValgrind, true, false, oldServerName, traceToStdout); + } + } + else + { + int expectedUnseed = -1; + if (!useValgrind && unseedCheck) + { + result = RunTest(fdbserverName, tlsPluginFile, null, null, seed, buggify, testFile, runDir, Guid.NewGuid().ToString(), -1, out expectedUnseed, out retryableError, logOnRetryableError, false, false, false, "", traceToStdout); + } + + if (!retryableError) + { + int unseed; + result = RunTest(fdbserverName, tlsPluginFile, summaryFileName, errorFileName, seed, buggify, testFile, runDir, Guid.NewGuid().ToString(), expectedUnseed, out unseed, out retryableError, logOnRetryableError, useValgrind, false, false, "", traceToStdout); + } + } + + if (!retryableError) + { + return result; + } + } + + return result; + } + + private static int RunTest(string fdbserverName, string tlsPluginFile, string summaryFileName, string errorFileName, int seed, + bool buggify, string testFile, string runDir, string uid, int expectedUnseed, out int unseed, out bool retryableError, bool logOnRetryableError, bool useValgrind, bool restarting = false, + bool willRestart = false, string oldBinaryName = "", bool traceToStdout = false) + { + unseed = -1; + + retryableError = false; + string tempPath = Path.Combine(runDir != null ? Path.GetFullPath(runDir) : Path.GetTempPath(), uid); + string oldDir = Directory.GetCurrentDirectory(); + + try + { + fdbserverName = Path.GetFullPath(fdbserverName); + tlsPluginFile = (tlsPluginFile.Length > 0) ? Path.GetFullPath(tlsPluginFile) : ""; + testFile = Path.GetFullPath(testFile); + var ok = 0; + + if (summaryFileName != null) + summaryFileName = Path.GetFullPath(summaryFileName); + + Directory.CreateDirectory(tempPath); + Directory.SetCurrentDirectory(tempPath); + + if (!restarting) LogTestPlan(summaryFileName, testFile, seed, buggify, expectedUnseed != -1, uid, oldBinaryName); + + string valgrindOutputFile = null; + using (var process = new System.Diagnostics.Process()) + { + ErrorOutputListener errorListener = new ErrorOutputListener(); + process.StartInfo.UseShellExecute = false; + string tlsPluginArg = ""; + if (tlsPluginFile.Length > 0) { + process.StartInfo.EnvironmentVariables["FDB_TLS_PLUGIN"] = tlsPluginFile; + tlsPluginArg = "--tls_plugin=" + tlsPluginFile; + } + process.StartInfo.RedirectStandardOutput = true; + var args = ""; + if (willRestart && oldBinaryName.EndsWith("alpha6")) + { + args = string.Format("-Rs 1000000000 -r simulation {0} -s {1} -f \"{2}\" -b {3} {4} --crash", + IsRunningOnMono() ? "" : "-q", seed, testFile, buggify ? "on" : "off", tlsPluginArg); + } + else + { + args = string.Format("-Rs 1GB -r simulation {0} -s {1} -f \"{2}\" -b {3} {4} --crash", + IsRunningOnMono() ? "" : "-q", seed, testFile, buggify ? "on" : "off", tlsPluginArg); + } + if (restarting) args = args + " --restarting"; + if (useValgrind && !willRestart) + { + valgrindOutputFile = string.Format("valgrind-{0}.xml", seed); + process.StartInfo.FileName = "valgrind"; + // Add extra debug directory, if environment variables is defined + string valgrindDbgDir = System.Environment.GetEnvironmentVariable("FDB_VALGRIND_DBGPATH"); + process.StartInfo.Arguments = (string.IsNullOrEmpty(valgrindDbgDir)) ? "" : string.Format("--extra-debuginfo-path={0} ", valgrindDbgDir); + + process.StartInfo.Arguments += + string.Format("--xml=yes --xml-file={0} -q {1} {2}", valgrindOutputFile, fdbserverName, args); + } + else + { + process.StartInfo.FileName = fdbserverName; + process.StartInfo.Arguments = args; + } + process.StartInfo.RedirectStandardError = true; + process.ErrorDataReceived += new DataReceivedEventHandler(errorListener.handleData); + + if (!traceToStdout) + { + Console.WriteLine("Executing {0} {1} in {2} (buggify: {3}, valgrind: {4})", + process.StartInfo.FileName, process.StartInfo.Arguments, tempPath, + buggify ? "on" : "off", + useValgrind ? "on" : "off"); + } + + process.Start(); + + // SOMEDAY: Do we want to actually do anything with standard output or error? + // Using standarderror requires async read, see http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx + //process.StandardOutput.ReadToEnd(); + OutputCopier copier = new OutputCopier(process.StandardOutput); + Thread consoleThread = new Thread(new ThreadStart(copier.copyOutput)); + consoleThread.Start(); + + MemoryChecker memChecker = new MemoryChecker(process); + Thread memCheckThread = new Thread(new ThreadStart(memChecker.monitorMemory)); + memCheckThread.Start(); + + process.BeginErrorReadLine(); + + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + + var ms = 1000 * killSeconds; + if (useValgrind) + ms *= 20; + bool killed = !process.WaitForExit(ms); // Wait "killSeconds" seconds here + + stopwatch.Stop(); + + if (!killed) + process.WaitForExit(); // If the process finished successfully, we call the parameterless WaitForExit to ensure that output buffers get flushed + else + { + // It seems that WaitForExit sometimes returns false well before the timeout has elapsed + // We won't report that as an error, but just in case the process didn't actually finish we attempt to + // kill it here + if (killed && ms - stopwatch.ElapsedMilliseconds > 10000) + killed = false; + + if (!traceToStdout) + { + Console.WriteLine("Warning: Killing process after {0} seconds...", killSeconds); + } + + try + { + process.Kill(); + } + catch (Exception e) + { + if (!traceToStdout) + { + Console.WriteLine("Warning: Process.Kill returned {0}", e); + } + } + + int waitSeconds = 60 * 2; + process.WaitForExit(1000 * waitSeconds); + if (!process.HasExited) + { + if(!traceToStdout) + { + Console.WriteLine("Warning: Unable to kill process after {0} seconds...", waitSeconds); + } + + var xout = new XElement("UnableToKillProcess", + new XAttribute("Severity", (int)Magnesium.Severity.SevWarnAlways)); + + AppendXmlMessageToSummary(summaryFileName, xout, traceToStdout, testFile, seed, buggify, expectedUnseed != -1, oldBinaryName); + return 104; + } + } + if (!traceToStdout) + { + Console.WriteLine("Exit code is {0}", process.ExitCode); + } + memCheckThread.Join(); + consoleThread.Join(); + + var traceFiles = Directory.GetFiles(tempPath, "trace*.*").Where(s => s.EndsWith(".xml") || s.EndsWith(".json")).ToArray(); + if (traceFiles.Length == 0) + { + if (!traceToStdout) + { + Console.WriteLine("Warning: No trace file was generated, summary will not be affected."); + } + + var xout = new XElement((useValgrind ? "NoTraceFileGeneratedLibPos" : "NoTraceFileGenerated"), + new XAttribute("Severity", (int)Magnesium.Severity.SevWarnAlways), + new XAttribute("Plugin", tlsPluginFile), + new XAttribute("MachineName", System.Environment.MachineName)); + + AppendXmlMessageToSummary(summaryFileName, xout, traceToStdout, testFile, seed, buggify, expectedUnseed != -1, oldBinaryName); + ok = useValgrind ? 0 : 103; + } + else + { + var result = Summarize(traceFiles, summaryFileName, errorFileName, killed, errorListener.Errors, + process.ExitCode, memChecker.MaxMem, uid, + valgrindOutputFile == null ? null : Path.Combine(tempPath, valgrindOutputFile), + expectedUnseed, out unseed, out retryableError, logOnRetryableError, willRestart, restarting, oldBinaryName, traceToStdout); + + if (result != 0) + { + ok = result; + } + } + + if (willRestart) foreach (var f in traceFiles) File.Delete(f); + + process.Close(); + } + if (!traceToStdout) + { + Console.WriteLine("Done (unseed {0})", unseed); + } + + return ok; + } + catch (Exception e) + { + if (!traceToStdout) + { + Console.WriteLine("Error in Run:"); + Console.WriteLine(e); + } + + var xout = new XElement("TestHarnessRunError", + new XAttribute("Severity", (int)Magnesium.Severity.SevError), + new XAttribute("ErrorMessage", e.Message)); + + AppendXmlMessageToSummary(summaryFileName, xout, traceToStdout, testFile, seed, buggify, expectedUnseed != -1, oldBinaryName); + return 101; + } + finally + { + Directory.SetCurrentDirectory(oldDir); + if (!willRestart) Directory.Delete(tempPath, true); + } + } + + class OutputCopier + { + private StreamReader reader; + + public OutputCopier(StreamReader streamReader) + { + this.reader = streamReader; + } + + public void copyOutput() + { + //Console.WriteLine(" Beginning console copy..."); + while (!reader.EndOfStream) + { + reader.ReadLine(); + //Console.WriteLine(" : " + s); + } + } + } + + private class ErrorOutputListener + { + public List Errors { get; set; } + int maxErrorLength; + int maxErrors; + + public ErrorOutputListener(int maxErrorLength = 100, int maxErrors = 10) + { + Errors = new List(); + this.maxErrorLength = maxErrorLength; + this.maxErrors = maxErrors; + } + + public bool hasError = false; + public void handleData(object sendingProcess, DataReceivedEventArgs errLine) + { + if(!String.IsNullOrEmpty(errLine.Data)) + { + hasError = true; + if(Errors.Count < maxErrors) + Errors.Add(errLine.Data.Substring(0, Math.Min(maxErrorLength, errLine.Data.Length))); + } + } + } + + class MemoryChecker + { + //private System.Diagnostics.Process process; + private long maxMem; + private Process process; + + public long MaxMem + { + get { return maxMem; } + set { maxMem = value; } + } + + public MemoryChecker(System.Diagnostics.Process process) + { + this.process = process; + this.maxMem = 0; + } + + public void monitorMemory() + { + while (true) + { + try + { + process.Refresh(); + if (process.HasExited) + return; + long mem = process.PrivateMemorySize64; + MaxMem = Math.Max(MaxMem, mem); + //Console.WriteLine(string.Format("Process used {0} bytes", MaxMem)); + Thread.Sleep(1000); + } + catch + { + return; + } + } + } + } + + static void LogTestPlan(string summaryFileName, string testFileName, int randomSeed, bool buggify, bool testDeterminism, string uid, string oldBinary="") + { + var xout = new XElement("TestPlan", + new XAttribute("TestUID", uid), + new XAttribute("RandomSeed", randomSeed), + new XAttribute("TestFile", testFileName), + new XAttribute("BuggifyEnabled", buggify ? "1" : "0"), + new XAttribute("DeterminismCheck", testDeterminism ? "1" : "0"), + new XAttribute("OldBinary", Path.GetFileName(oldBinary))); + AppendToSummary(summaryFileName, xout); + } + + // Parses the valgrind XML file and returns a list of "what" tags for each error. + // All errors for which the "kind" tag starts with "Leak" are ignored + static string[] ParseValgrindOutput(string valgrindOutputFileName, bool traceToStdout) + { + if (!traceToStdout) + { + Console.WriteLine("Reading vXML file: " + valgrindOutputFileName); + } + + ISet whats = new HashSet(); + XElement xdoc = XDocument.Load(valgrindOutputFileName).Element("valgrindoutput"); + foreach(var elem in xdoc.Elements()) { + if (elem.Name != "error") + continue; + string kind = elem.Element("kind").Value; + if(kind.StartsWith("Leak")) + continue; + whats.Add(elem.Element("what").Value); + } + return whats.ToArray(); + } + + delegate IEnumerable parseDelegate(System.IO.Stream stream, string file, + bool keepOriginalElement = false, double startTime = -1, double endTime = Double.MaxValue, + double samplingFactor = 1.0); + + static int Summarize(string[] traceFiles, string summaryFileName, + string errorFileName, bool? killed, List outputErrors, int? exitCode, long? peakMemory, + string uid, string valgrindOutputFileName, int expectedUnseed, out int unseed, out bool retryableError, bool logOnRetryableError, + bool willRestart = false, bool restarted = false, string oldBinaryName = "", bool traceToStdout = false, string externalError = "") + { + unseed = -1; + retryableError = false; + List errorList = new List(); + var xout = new XElement("Test"); + if (uid != null) + xout.Add(new XAttribute("TestUID", uid)); + bool ok = false; + string testFile = "Unknown"; + int testsPassed = 0, testCount = -1, warnings = 0, errors = 0; + bool testBeginFound = false, testEndFound = false, error = false; + string firstRetryableError = ""; + int stderrSeverity = (int)Magnesium.Severity.SevError; + + Dictionary, Magnesium.Severity> severityMap = new Dictionary, Magnesium.Severity>(); + Dictionary, bool> codeCoverage = new Dictionary, bool>(); + + foreach (var traceFileName in traceFiles) + { + if(!traceToStdout) { + Console.WriteLine("Summarizing {0}", traceFileName); + } + using (var traceFile = System.IO.File.Open(traceFileName, + System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite | System.IO.FileShare.Delete)) + { + try + { + parseDelegate parse; + if (traceFileName.EndsWith(".json")) + parse = Magnesium.JsonParser.Parse; + else + parse = Magnesium.XmlParser.Parse; + foreach (var ev in parse(traceFile, traceFileName)) + { + Magnesium.Severity newSeverity; + if (severityMap.TryGetValue(new KeyValuePair(ev.Type, ev.Severity), out newSeverity)) + ev.Severity = newSeverity; + if (ev.Severity >= Magnesium.Severity.SevWarnAlways && ev.DDetails.ContainsKey("ErrorIsInjectedFault")) + ev.Severity = Magnesium.Severity.SevWarn; + + if (ev.Type == "ProgramStart" && !testBeginFound + // Just in case the first ProgramStart seen is a Simulated one, ignore it + && (!ev.DDetails.ContainsKey("Simulated") || ev.Details.Simulated != "1")) + { + xout.Add( + new XAttribute("RandomSeed", ev.Details.RandomSeed), + new XAttribute("SourceVersion", ev.Details.SourceVersion), + new XAttribute("Time", ev.Details.ActualTime), + new XAttribute("BuggifyEnabled", ev.Details.BuggifyEnabled), + new XAttribute("DeterminismCheck", expectedUnseed != -1 ? "1" : "0"), + new XAttribute("OldBinary", Path.GetFileName(oldBinaryName))); + testBeginFound = true; + } + if (ev.Type == "Simulation") + { + xout.Add( + new XAttribute("TestFile", ev.Details.TestFile)); + testFile = ev.Details.TestFile.Substring(ev.Details.TestFile.IndexOf("tests")); + } + if (ev.Type == "ActualRun") + { + xout.Add( + new XAttribute("TestFile", ev.Details.RunID)); + } + if (ev.Type == "ElapsedTime" && !testEndFound) + { + testEndFound = true; + unseed = int.Parse(ev.Details.RandomUnseed); + if (expectedUnseed != -1 && expectedUnseed != unseed) + { + Magnesium.Severity severity; + if (!severityMap.TryGetValue(new KeyValuePair("UnseedMismatch", Magnesium.Severity.SevError), out severity)) + severity = Magnesium.Severity.SevError; + + if (severity >= Magnesium.Severity.SevWarnAlways) + { + xout.Add(new XElement("UnseedMismatch", + new XAttribute("Unseed", unseed), + new XAttribute("ExpectedUnseed", expectedUnseed), + new XAttribute("Severity", (int)severity))); + if ( severity == Magnesium.Severity.SevError ) { + error = true; + errorList.Add("UnseedMismatch"); + } + } + } + xout.Add( + new XAttribute("SimElapsedTime", ev.Details.SimTime), + new XAttribute("RealElapsedTime", ev.Details.RealTime), + new XAttribute("RandomUnseed", ev.Details.RandomUnseed)); + } + if (ev.Severity == Magnesium.Severity.SevWarnAlways) + { + if (warnings < maxWarnings) + { + xout.Add(new XElement(ev.Type, + new XAttribute("Severity", (int)ev.Severity), + ev.DDetails + //.Where(kv => true) + .Select(kv => new XAttribute(kv.Key, kv.Value)))); + } + warnings++; + } + if (ev.Severity >= Magnesium.Severity.SevError) + { + string errorString = ev.FormatTestError(true); + if (errorString.Contains("platform_error")) + { + if (!retryableError) + { + firstRetryableError = errorString; + } + retryableError = true; + } + if (errors < maxWarnings) + { + xout.Add(new XElement(ev.Type, + new XAttribute("Severity", (int)ev.Severity), + ev.DDetails + //.Where(kv => true) + .Select(kv => new XAttribute(kv.Key, kv.Value)))); + errorList.Add(errorString); + } + errors++; + error = true; + } + if (ev.Type == "CodeCoverage" && !willRestart) + { + bool covered = true; + if(ev.DDetails.ContainsKey("Covered")) + { + covered = int.Parse(ev.Details.Covered) != 0; + } + + var key = new Tuple(ev.Details.File, ev.Details.Line); + if (covered || !codeCoverage.ContainsKey(key)) + { + codeCoverage[key] = covered; + } + } + if (ev.Type == "FaultInjected" || (ev.Type == "BuggifySection" && ev.Details.Activated == "1")) + { + xout.Add(new XElement(ev.Type, new XAttribute("File", ev.Details.File), new XAttribute("Line", ev.Details.Line))); + } + if (ev.Type == "TestsExpectedToPass") + testCount = int.Parse(ev.Details.Count); + if (ev.Type == "TestResults" && ev.Details.Passed == "1") + testsPassed++; + if (ev.Type == "RemapEventSeverity") + severityMap[new KeyValuePair(ev.Details.TargetEvent, (Magnesium.Severity)int.Parse(ev.Details.OriginalSeverity))] = (Magnesium.Severity)int.Parse(ev.Details.NewSeverity); + if (ev.Type == "StderrSeverity") + stderrSeverity = int.Parse(ev.Details.NewSeverity); + } + + } + catch (Exception e) + { + if (!traceToStdout) + { + Console.WriteLine("Error summarizing {0}: {1}", traceFileName, e); + } + + error = true; + xout.Add(new XElement("SummarizationError", + new XAttribute("Severity", (int)Magnesium.Severity.SevError), + new XAttribute("ErrorMessage", e.Message))); + errorList.Add("SummarizationError " + e.Message); + break; + } + } + } + + if (externalError.Length > 0) { + xout.Add(new XElement(externalError, new XAttribute("Severity", (int)Magnesium.Severity.SevError))); + } + + foreach(var kv in codeCoverage) + { + var element = new XElement("CodeCoverage", new XAttribute("File", kv.Key.Item1), new XAttribute("Line", kv.Key.Item2)); + if(!kv.Value) + { + element.Add(new XAttribute("Covered", "0")); + } + + xout.Add(element); + } + + if (warnings > maxWarnings) + { + //error = true; + xout.Add(new XElement("WarningLimitExceeded", + new XAttribute("Severity", (int)Magnesium.Severity.SevWarnAlways), + new XAttribute("WarningCount", warnings))); + } + if (errors > maxWarnings) + { + error = true; + xout.Add(new XElement("ErrorLimitExceeded", + new XAttribute("Severity", (int)Magnesium.Severity.SevError), + new XAttribute("ErrorCount", errors))); + errorList.Add("ErrorLimitExceeded"); + } + if (killed == true) + { + if (!retryableError) + { + firstRetryableError = "ExternalTimeout"; + } + + retryableError = true; + error = true; + xout.Add(new XElement("ExternalTimeout", new XAttribute("Severity", (int)Magnesium.Severity.SevError))); + } + if (outputErrors != null) + { + int stderrBytes = 0; + foreach (string err in outputErrors) + { + if (stderrSeverity == (int)Magnesium.Severity.SevError) + { + error = true; + } + + int remainingBytes = maxStderrBytes - stderrBytes; + if (remainingBytes > 0) + { + string outErr = (err.Length > remainingBytes) ? err.Substring(remainingBytes) + "..." : err; + + xout.Add(new XElement("StdErrOutput", + new XAttribute("Severity", stderrSeverity), + new XAttribute("Output", outErr))); + } + + stderrBytes += err.Length; + } + + if (stderrBytes > maxStderrBytes) + { + xout.Add(new XElement("StdErrOutputTruncated", + new XAttribute("Severity", stderrSeverity), + new XAttribute("BytesRemaining", stderrBytes - maxStderrBytes))); + } + } + if (exitCode.HasValue && exitCode != 0) + { + error = true; + xout.Add(new XElement("ExitCode", new XAttribute("Code", exitCode.Value), new XAttribute("Severity", (int)Magnesium.Severity.SevError))); + errorList.Add(string.Format("ExitCode 0x{0:x}", exitCode.Value)); + } + if (!testEndFound && !willRestart) + { + // We didn't terminate the test, but it didn't reach the end? + error = true; + xout.Add(new XElement("TestUnexpectedlyNotFinished"), new XAttribute("Severity", (int)Magnesium.Severity.SevError)); + errorList.Add("TestUnexpectedlyNotFinished"); + } + ok = testsPassed == testCount && testsPassed > 0 && !error; + xout.Add( + new XAttribute("Passed", testsPassed), + new XAttribute("Failed", testCount - testsPassed)); + if (peakMemory.HasValue) + xout.Add(new XAttribute("PeakMemory", peakMemory.Value)); + + if (valgrindOutputFileName != null && valgrindOutputFileName.Length > 0) + { + try + { + // If there are any errors reported "ok" will be set to false + var whats = ParseValgrindOutput(valgrindOutputFileName, traceToStdout); + foreach (var what in whats) + { + xout.Add(new XElement("ValgrindError", + new XAttribute("Severity", (int)Magnesium.Severity.SevError), + new XAttribute("What", what))); + ok = false; + error = true; + } + } + catch (Exception e) + { + if (!traceToStdout) + { + Console.WriteLine(e); + } + + error = true; + xout.Add(new XElement("ValgrindParseError", + new XAttribute("Severity", (int)Magnesium.Severity.SevError), + new XAttribute("ErrorMessage", e.Message))); + errorList.Add("Failed to parse valgrind output: " + e.Message); + } + } + + if (retryableError && !logOnRetryableError) + { + xout = new XElement("Test", xout.Attributes()); + xout.Add(new XElement("RetryingError", + new XAttribute("Severity", (int)Magnesium.Severity.SevWarnAlways), + new XAttribute("What", firstRetryableError))); + } + else + { + xout.Add(new XAttribute("OK", ok || willRestart)); + } + + AppendToSummary(summaryFileName, xout, traceToStdout); + + if ((!retryableError || logOnRetryableError) && errorFileName != null && (errorList.Count > 0 || !ok) && !willRestart) + { + var errorText = string.Join("\n\t", errorList + .Concat((!ok && errorList.Count == 0) ? new string[] { "Failed with no explanation" } : new string[] { }) + .Distinct() + .ToArray()); + AppendToFile(errorFileName, string.Format("Test {0} failed with:\n\t{1}\n", testFile, errorText)); + } + if (!error) { + return 0; + } + else { + return 102; + } + } + + static int ExtractErrors(string summaryFileName, string errorSummaryFileName) + { + Console.WriteLine("Extracting from {0}", summaryFileName); + List xout = new List(); + var coverage = new Dictionary,Tuple>(); + using (var traceFile = System.IO.File.Open(summaryFileName, + System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite | System.IO.FileShare.Delete)) + { + try + { + var events = Magnesium.XmlParser.Parse(traceFile, summaryFileName, true); + events = Magnesium.TraceLogUtil.IdentifyFailedTestPlans(events); + foreach (var ev in events) + { + Magnesium.Test t = ev as Magnesium.Test; + if (t != null) + { + foreach (var tev in t.events) + { + if (tev.Type == "CodeCoverage" || tev.Type == "FaultInjected") + { + var keyTuple = Tuple.Create(tev.Details.File, int.Parse(tev.Details.Line)); + if (coverage.ContainsKey(keyTuple)) + { + var old = coverage[keyTuple]; + coverage[keyTuple] = Tuple.Create(old.Item1 + 1, old.Item2 + (t.ok ? 0 : 1)); + } + else + { + coverage[keyTuple] = Tuple.Create(1, (t.ok ? 0 : 1)); + } + } + } + if (!t.ok) + { + if (t.original != null) + { + foreach (var c in t.original.Elements("CodeCoverage")) + c.Remove(); + foreach (var f in t.original.Elements("FaultInjected")) + f.Remove(); + + xout.Add(t.original); + } + else + { + xout.Add(new XElement("Test", + new XAttribute("Type", t.Type), + new XAttribute("Time", t.Time), + new XAttribute("Machine", t.Machine), + new XAttribute("TestUID", t.TestUID), + new XAttribute("TestFile", t.TestFile), + new XAttribute("randomSeed", t.randomSeed), + new XAttribute("Buggify", t.Buggify), + new XAttribute("DeterminismCheck", t.DeterminismCheck), + new XAttribute("OldBinary", t.OldBinary), + new XElement("TestNotSummarized", + new XAttribute("Severity", (int)Magnesium.Severity.SevWarnAlways) + ) + ) + ); + } + } + } + } + } + catch (Exception e) + { + Console.WriteLine("Error summarizing {0}: {1}", summaryFileName, e); + xout.Add(new XElement("SummarizationError", + new XAttribute("Severity", (int)Magnesium.Severity.SevError), + new XAttribute("ErrorMessage", e.Message))); + //failedTests.Add("SummarizationError " + e.Message); + } + } + + foreach (var e in coverage) + { + xout.Add(new XElement("Event", + new XAttribute("Type", "CoverageSummary"), + new XAttribute("Time", 0), + new XAttribute("Machine", ""), + new XAttribute("File", e.Key.Item1), + new XAttribute("Line", e.Key.Item2), + new XAttribute("Covered", e.Value.Item1), + new XAttribute("Failed", e.Value.Item2))); + } + + AppendToErrorSummary(errorSummaryFileName, xout); + return 0; + } + + private static void AppendToErrorSummary(string summaryFileName, List elements) + { + if (summaryFileName == null) + return; + takeLock(summaryFileName); + try { + foreach (XElement e in elements) + AppendToSummary(summaryFileName, e, false, false); + } + finally + { + releaseLock(summaryFileName); + } + } + + private static void AppendToSummary(string summaryFileName, XElement xout, bool traceToStdout = false, bool shouldLock = true) + { + bool useXml = true; + if (summaryFileName != null && summaryFileName.EndsWith(".json")) { + useXml = false; + } + + if (traceToStdout) + { + if (useXml) { + using (var wr = System.Xml.XmlWriter.Create(Console.OpenStandardOutput(), new System.Xml.XmlWriterSettings() { OmitXmlDeclaration = true, Encoding = new System.Text.UTF8Encoding(false) })) + xout.WriteTo(wr); + } else { + using (var wr = System.Runtime.Serialization.Json.JsonReaderWriterFactory.CreateJsonWriter(Console.OpenStandardOutput())) + xout.WriteTo(wr); + } + Console.WriteLine(); + return; + } + + if (summaryFileName == null) + return; + if (shouldLock) + takeLock(summaryFileName); + try + { + using (var f = System.IO.File.Open(summaryFileName, System.IO.FileMode.Append, System.IO.FileAccess.Write)) + { + if (f.Length == 0) + { + byte[] bytes = Encoding.UTF8.GetBytes(""); + f.Write(bytes, 0, bytes.Length); + } + if (useXml) { + using (var wr = System.Xml.XmlWriter.Create(f, new System.Xml.XmlWriterSettings() { OmitXmlDeclaration = true })) + xout.Save(wr); + } else { + using (var wr = System.Runtime.Serialization.Json.JsonReaderWriterFactory.CreateJsonWriter(f)) + xout.WriteTo(wr); + } + var endl = Encoding.UTF8.GetBytes(Environment.NewLine); + f.Write(endl, 0, endl.Length); + } + } + finally + { + if (shouldLock) + releaseLock(summaryFileName); + } + } + + private static void AppendXmlMessageToSummary(string summaryFileName, XElement xout, bool traceToStdout = false, string testFile = null, + int? seed = null, bool? buggify = null, bool? determinismCheck = null, string oldBinaryName = null) + { + var test = new XElement("Test", xout); + if(testFile != null) + test.Add(new XAttribute("TestFile", testFile)); + if(seed != null) + test.Add(new XAttribute("RandomSeed", seed)); + if(buggify != null) + test.Add(new XAttribute("BuggifyEnabled", buggify.Value ? "1" : "0")); + if(determinismCheck != null) + test.Add(new XAttribute("DeterminismCheck", determinismCheck.Value ? "1" : "0")); + if(oldBinaryName != null) + test.Add(new XAttribute("OldBinary", Path.GetFileName(oldBinaryName))); + + test.Add(xout); + AppendToSummary(summaryFileName, test, traceToStdout); + } + + private static void AppendToFile(string fileName, string content) + { + if (fileName == null) + return; + takeLock(fileName); + try + { + using (var f = System.IO.File.Open(fileName, System.IO.FileMode.Append, System.IO.FileAccess.Write)) + { + var endl = Encoding.UTF8.GetBytes(content); + f.Write(endl, 0, endl.Length); + } + } + finally + { + releaseLock(fileName); + } + } + + static int Remote(string queue, string fdbRoot, double addHours, int testCount, string testTypes, string userScope) + { + queue = Path.GetFullPath(queue); + fdbRoot = Path.GetFullPath(fdbRoot); + var output = Path.Combine(queue, "archive"); + var now = DateTime.Now; + string date = string.Format("{0}-{1:00}-{2:00}-{3:00}-{4:00}", + now.Year, now.Month, now.Day, now.Hour, now.Minute); + + if (!Directory.Exists(queue)) + Directory.CreateDirectory(queue); + + int maxCount = 0; + foreach (var f in Directory.GetFiles(queue, String.Format("{0}-*.xml", date))) + { + var count = Int32.Parse(f.Split('-')[5]); + maxCount = Math.Max(maxCount, count); + } + maxCount++; + + var suffix = String.Format("{0}-{1}-{2}", Environment.UserName, userScope, OS_NAME); + foreach (var f in Directory.GetFiles(queue, "*" + suffix + ".xml")) + File.Delete(f); + + string label = String.Format("{0}-{1}-{2}", date, maxCount, suffix); + + var testStaging = Path.Combine(output, label); + Directory.CreateDirectory(testStaging); + File.Create(Path.Combine(testStaging, "errors.txt")); + + var release = Path.Combine(fdbRoot, "bin"); + if(!IsRunningOnMono()) + release = Path.Combine(release, "Release"); + + File.Copy(Path.Combine(release, BINARY), Path.Combine(testStaging, BINARY)); + File.Copy(Path.Combine(fdbRoot, "tls-plugins", PLUGIN), Path.Combine(testStaging, PLUGIN)); + + if (IsRunningOnMono()) + File.Copy(Path.Combine(release, BINARY + ".debug"), Path.Combine(testStaging, BINARY + ".debug")); + + //using (var f = System.IO.File.Open( + // Path.Combine(testStaging, "summary.xml"), + // System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, System.IO.FileShare.Delete)) + //{ + // byte[] bytes = Encoding.UTF8.GetBytes(""); + // f.Write(bytes, 0, bytes.Length); + //} + + var coverageFiles = Directory.GetFiles(release, "coverage*.xml"); + foreach (var coverage in coverageFiles) + File.Copy(coverage, Path.Combine(testStaging, Path.GetFileName(coverage))); + + Directory.CreateDirectory(Path.Combine(testStaging, "tests")); + + if (testTypes == "fast" || testTypes == "all") + CopyAll(new DirectoryInfo(Path.Combine(fdbRoot, "tests", "fast")), new DirectoryInfo(Path.Combine(testStaging, "tests", "fast"))); + if (testTypes == "restarting" || testTypes == "all") + { + CopyAll(new DirectoryInfo(Path.Combine(fdbRoot, "tests", "restarting")), new DirectoryInfo(Path.Combine(testStaging, "tests", "restarting"))); + //CopyAll(new DirectoryInfo(Path.Combine(fdbRoot, "tests", "oldBinaries")), new DirectoryInfo(Path.Combine(testStaging, "tests", "oldBinaries"))); + } + if (testTypes == "all") + { + CopyAll(new DirectoryInfo(Path.Combine(fdbRoot, "tests", "slow")), new DirectoryInfo(Path.Combine(testStaging, "tests", "slow"))); + CopyAll(new DirectoryInfo(Path.Combine(fdbRoot, "tests", "rare")), new DirectoryInfo(Path.Combine(testStaging, "tests", "rare"))); + } + + + if (testTypes != "fast" && testTypes != "all" && testTypes != "restarting") + { + FileInfo file = new FileInfo(testTypes); + Directory.CreateDirectory(Path.Combine(testStaging, "tests", file.Directory.Name)); + file.CopyTo(Path.Combine(testStaging, "tests", file.Directory.Name, file.Name), true); + } + + var e = + new XElement("TestDefinition", + new XElement("Duration", + new XAttribute("Hours", addHours)), + new XElement("TestCount", testCount)); + new XDocument(e).Save(Path.Combine(queue, label + ".xml")); + File.Copy(Path.Combine(queue, label + ".xml"), Path.Combine(testStaging, label + ".xml")); + + var summaryFile = Path.Combine(testStaging, "summary.xml"); + Console.WriteLine(label); + + if (!IsRunningOnMono()) + { + using (var mProcess = new System.Diagnostics.Process()) + { + mProcess.StartInfo.UseShellExecute = false; + mProcess.StartInfo.RedirectStandardOutput = true; + mProcess.StartInfo.FileName = "Magnesium.exe"; + mProcess.StartInfo.Arguments = "Summary " + summaryFile; + mProcess.Start(); + } + } + + return 0; + } + + public static void CopyAll(DirectoryInfo source, DirectoryInfo target, Func predicate = null) + { + // Check if the target directory exists, if not, create it. + if (!Directory.Exists(target.FullName)) + Directory.CreateDirectory(target.FullName); + + // Copy each file into it's new directory. + foreach (FileInfo fi in source.GetFiles()) + if (predicate == null || predicate(fi)) + fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true); + + // Copy each subdirectory using recursion. + foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) + CopyAll(diSourceSubDir, target.CreateSubdirectory(diSourceSubDir.Name), predicate); + } + + static int Auto(string queueDirectory, string runDir, string shareDir, string cacheDir, bool useValgrind, int maxTries) + { + try + { + queueDirectory = Path.GetFullPath(queueDirectory); + while (true) + { + Test test = getTest(queueDirectory, runDir, shareDir, cacheDir); + Console.WriteLine("Running test {0}", test.label); + + // run test + test.run(useValgrind, maxTries); + } + } + catch (Exception e) + { + Console.WriteLine("Error: {0}", e); + return 100; + } + } + + class Test + { + public DateTime? testEnd; + public string queueDirectory; + public string label; + public string runDir; + public string inputDir; + public string outputDir; + public string oldBinaryDir; + public int testCount; + + public Test(string queueDirectory, string label, string runDir, string shareDir, string cacheDir) + { + this.queueDirectory = queueDirectory; + this.label = label; + this.runDir = runDir; + var specFile = Path.Combine(queueDirectory, label + ".xml"); + var testDef = XDocument.Load(specFile).Element("TestDefinition"); + var testDuration = double.Parse(testDef.Element("Duration").Attribute("Hours").Value); + var testBegin = File.GetCreationTime(specFile); + testEnd = testDuration < 0 ? (DateTime?)null : testBegin.AddHours(testDuration); + + testCount = int.Parse(testDef.Element("TestCount").Value); + outputDir = Path.Combine(queueDirectory, "archive", label); + Directory.CreateDirectory(outputDir); + + string oldBinarySourceDir = Path.Combine(shareDir, "oldBinaries"); + + if (cacheDir != null) + { + inputDir = Path.Combine(cacheDir, "archive", label); + Directory.CreateDirectory(Path.Combine(cacheDir, "archive")); + + if (!Directory.Exists(inputDir)) + { + takeLock(inputDir); + if (!Directory.Exists(inputDir)) + { + string tmpDir = Path.Combine(cacheDir, "archive.part", label + "." + Path.GetRandomFileName() + ".part"); + Directory.CreateDirectory(tmpDir); + CopyAll(new DirectoryInfo(outputDir), new DirectoryInfo(tmpDir), (FileInfo file) => + file.Name != "fdbserver.debug" && + !file.Name.StartsWith("summary-") && + file.Name != "errors.txt" + ); + Directory.Move(tmpDir, inputDir); + } + releaseLock(inputDir); + } + + oldBinaryDir = Path.Combine(cacheDir, "oldBinaries"); + + Directory.CreateDirectory(oldBinaryDir); + foreach (FileInfo fi in new DirectoryInfo(oldBinarySourceDir).GetFiles()) + { + var targetName = Path.Combine(oldBinaryDir, fi.Name); + if (!File.Exists(targetName) || fi.LastWriteTimeUtc != File.GetLastWriteTimeUtc(targetName)) + { + fi.CopyTo(targetName, true); + File.SetLastWriteTimeUtc(targetName, fi.LastWriteTimeUtc); + } + } + + foreach (FileInfo fi in new DirectoryInfo(oldBinaryDir).GetFiles()) + { + var targetName = Path.Combine(oldBinarySourceDir, fi.Name); + if (!File.Exists(targetName)) + fi.Delete(); + } + } + else + { + inputDir = outputDir; + oldBinaryDir = oldBinarySourceDir; + } + //Console.WriteLine("TestEnd {0}, now {1}, duration {2}, done {3}", testEnd, DateTime.Now, testDuration, done()); + } + public bool done() + { + return testEnd.HasValue && System.DateTime.Now > testEnd.Value; + } + public void run(bool useValgrind, int maxTries) + { + Run(Path.Combine(inputDir, BINARY), + Path.Combine(inputDir, PLUGIN), + Path.Combine(inputDir, "tests"), + Path.Combine(outputDir, "summary-" + Environment.MachineName + ".xml"), + Path.Combine(outputDir, "errors.txt"), + runDir, + oldBinaryDir, + useValgrind, + maxTries); + } + + public void finalize() + { + try + { + Console.WriteLine("Deleting: {0}", Path.Combine(queueDirectory, label + ".xml")); + File.Delete(Path.Combine(queueDirectory, label + ".xml")); + } + catch (Exception e) + { + Console.WriteLine("Error deleting queue folder: {0}", e.Message); + } + } + } + + static Test getTest(string parent, string runDir, string shareDir, string cacheDir) + { + while (true) + { + var testFiles = Directory.GetFiles(parent, String.Format("*{0}.xml", OS_NAME)); + // (if no tests, wait, try again) + if (testFiles.Length != 0) + { + /*try + {*/ + var testFile = testFiles[random.Next(testFiles.Length)]; + var test = new Test(parent, Path.GetFileNameWithoutExtension(testFile), runDir, shareDir, cacheDir); + if ((test.testCount < 0 || UpdateTestTotals(Path.Combine(test.outputDir, "testCount"), test.testCount)) && !test.done()) + return test; + else + test.finalize(); + /*} + catch (Exception) + { + // retry opening a test + }*/ + } + System.Threading.Thread.Sleep(1000); + } + } + + static void takeLock(string targetFile) + { + // Console.WriteLine("Attempting to take lock on {0}", targetFile); + string lockFile = targetFile + ".lock"; + while (true) + { + try + { + using (var f = System.IO.File.Open(lockFile, System.IO.FileMode.CreateNew)) + { + return; + } + } + catch (System.IO.IOException e) + { + Console.WriteLine("Waiting for file lock: {0}", e.Message); + System.Threading.Thread.Sleep(250); + } + } + } + + static void releaseLock(string targetFile) + { + File.Delete(targetFile + ".lock"); + } + + private static bool UpdateTestTotals(string countFileName, int desiredTestCount) + { + takeLock(countFileName); + try + { + using (var f = System.IO.File.Open(countFileName, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite)) + { + int currentCount = 0; + byte[] b; + + if (f.Length != 0) + { + b = new byte[f.Length]; + f.Read(b, 0, b.Length); + currentCount = int.Parse(Encoding.UTF8.GetString(b)); + } + + if (currentCount >= desiredTestCount) + return false; + + f.SetLength(0); + b = Encoding.UTF8.GetBytes(String.Format("{0}", currentCount + 1)); + f.Write(b, 0, b.Length); + + return true; + } + } + finally + { + releaseLock(countFileName); + } + } + + private static int VersionInfo() + { + Console.WriteLine("Version: 1.02"); + + Console.WriteLine("FDB Project Ver: " + "${CMAKE_PROJECT_VERSION}"); + Console.WriteLine("FDB Version: " + "${CMAKE_PROJECT_VERSION_MAJOR}" + "." + "${CMAKE_PROJECT_VERSION_MINOR}"); + Console.WriteLine("Source Version: " + "${CURRENT_GIT_VERSION}"); + return 1; + } + + private static int UsageMessage() + { + Console.WriteLine("Usage:"); + Console.WriteLine(" TestHarness run [temp/runDir] [fdbserver[.exe]] [TLSplugin] [testfolder] [summary.xml] "); + Console.WriteLine(" TestHarness summarize [trace.xml] [summary.xml] "); + Console.WriteLine(" TestHarness replay [temp/runDir] [fdbserver[.exe]] [TLSplugin] [summary-in.xml] [summary-out.xml]"); + Console.WriteLine(" TestHarness auto [temp/runDir] [directory] [shareDir] "); + Console.WriteLine(" TestHarness remote [queue folder] [root foundation folder] [duration in hours] [amount of tests] [all/fast/] [scope]"); + Console.WriteLine(" TestHarness extract-errors [summary-file] [error-summary-file]"); + Console.WriteLine(" TestHarness joshua-run "); + VersionInfo(); + return 1; + } + } +} diff --git a/contrib/TestHarness/Properties/AssemblyInfo.cs b/contrib/TestHarness/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..aa153aca11 --- /dev/null +++ b/contrib/TestHarness/Properties/AssemblyInfo.cs @@ -0,0 +1,56 @@ +/* + * AssemblyInfo.cs + * + * This source file is part of the FoundationDB open source project + * + * Copyright 2013-2020 Apple Inc. and the FoundationDB project authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TestHarness")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Apple Inc.")] +[assembly: AssemblyProduct("TestHarness")] +[assembly: AssemblyCopyright("Copyright © Apple Inc. 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("92d9df90-6d48-4558-bb25-d878ea69b4bd")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/contrib/TestHarness/TestHarness.csproj b/contrib/TestHarness/TestHarness.csproj new file mode 100644 index 0000000000..73937e67bb --- /dev/null +++ b/contrib/TestHarness/TestHarness.csproj @@ -0,0 +1,62 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {6A6B7D20-EB7E-4768-BDE2-21FE0C32F17A} + Exe + Properties + TestHarness + TestHarness + v4.0 + Client + 512 + $(SolutionDir)bin\$(Configuration)\ + $(SystemDrive)\temp\msvcfdb\$(Configuration)\TestHarness\ + + + true + DEBUG;TRACE + full + AnyCPU + prompt + true + + + TRACE + true + pdbonly + AnyCPU + prompt + true + + + + + + + + + + + + + + + + + {1FA45F13-1015-403C-9115-CEFFDD522B20} + TraceLogHelper + + + + + diff --git a/contrib/TraceLogHelper/CMakeLists.txt b/contrib/TraceLogHelper/CMakeLists.txt new file mode 100644 index 0000000000..f60cda56a4 --- /dev/null +++ b/contrib/TraceLogHelper/CMakeLists.txt @@ -0,0 +1,20 @@ +set(SRCS + Event.cs + JsonParser.cs + Properties/AssemblyInfo.cs + TraceLogUtil.cs + XmlParser.cs) + +set(TRACE_LOG_HELPER_REFERENCES + "-r:System,System.Core,System.Runtime.Serialization,System.Xml.Linq,System.Data.DataSetExtensions,Microsoft.CSharp,System.Data,System.Xml") + + +set(out_file ${CMAKE_BINARY_DIR}/packages/bin/TraceLogHelper.dll) + +add_custom_command(OUTPUT ${out_file} + COMMAND ${MCS_EXECUTABLE} ARGS ${TRACE_LOG_HELPER_REFERENCES} ${SRCS} "-target:library" "-out:${out_file}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${SRCS} + COMMENT "Compile TraceLogHelper" VERBATIM) +add_custom_target(TraceLogHelper DEPENDS ${out_file}) +set(TraceLogHelperDll "${out_file}" PARENT_SCOPE) diff --git a/contrib/TraceLogHelper/Event.cs b/contrib/TraceLogHelper/Event.cs new file mode 100644 index 0000000000..66c9d1ad67 --- /dev/null +++ b/contrib/TraceLogHelper/Event.cs @@ -0,0 +1,263 @@ +/* + * Event.cs + * + * This source file is part of the FoundationDB open source project + * + * Copyright 2013-2020 Apple Inc. and the FoundationDB project authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Dynamic; + +namespace Magnesium +{ + public enum Severity + { + SevDebug=5, + SevInfo=10, + SevWarn=20, + SevWarnAlways=30, + SevError=40, + }; + + public class Event + { + public double Time { get; set; } + public Severity Severity { get; set; } + public string Type { get; set; } + public string Machine { get; set; } + public string ID { get; set; } + public string WorkerDesc { get { return Machine + " " + ID; } } + public string TraceFile { get; set; } + public System.Xml.Linq.XElement original { get; set; } + static MyExpando emptyDetails = new MyExpando(new Dictionary()); + MyExpando _Details = emptyDetails; + public dynamic Details { get{ return _Details; } } + public IDictionary DDetails { get { return _Details._members; } + set { + _Details = new MyExpando(value); + //foreach(var v in value) + // _Details.SetMember(v.Key, v.Value); + } + } + + public Event ShallowCopy() + { + return (Event)MemberwiseClone(); + } + + class MyExpando : DynamicObject + { + public MyExpando(IDictionary init) + { + _members = init; + } + + public IDictionary _members = + new Dictionary(); + + /// + /// When a new property is set, + /// add the property name and value to the dictionary + /// + public override bool TrySetMember + (SetMemberBinder binder, Object value) + { + if (!_members.ContainsKey(binder.Name)) + _members.Add(binder.Name, value); + else + _members[binder.Name] = value; + + return true; + } + + public bool SetMember(string name, Object value) + { + if (!_members.ContainsKey(name)) + _members.Add(name, value); + else + _members[name] = value; + + return true; + } + + /// + /// When user accesses something, return the value if we have it + /// + public override bool TryGetMember + (GetMemberBinder binder, out Object result) + { + if (_members.ContainsKey(binder.Name)) + { + result = _members[binder.Name]; + return true; + } + else + { + return base.TryGetMember(binder, out result); + } + } + + /// + /// If a property value is a delegate, invoke it + /// + public override bool TryInvokeMember + (InvokeMemberBinder binder, Object[] args, out Object result) + { + if (_members.ContainsKey(binder.Name) + && _members[binder.Name] is Delegate) + { + result = (_members[binder.Name] as Delegate).DynamicInvoke(args); + return true; + } + else + { + return base.TryInvokeMember(binder, args, out result); + } + } + + + /// + /// Return all dynamic member names + /// + /// + public override IEnumerable GetDynamicMemberNames() + { + return _members.Keys; + } + } + + public string FormatTestError(bool includeDetails) + { + string s = Type; + if (Type == "InternalError") + s = string.Format("{0} {1} {2}", Type, Details.File, Details.Line); + else if (Type == "TestFailure") + s = string.Format("{0} {1}", Type, Details.Reason); + else if (Type == "ValgrindError") + s = string.Format("{0} {1}", Type, Details.What); + else if (Type == "ExitCode") + s = string.Format("{0} 0x{1:x}", Type, int.Parse(Details.Code)); + else if (Type == "StdErrOutput") + s = string.Format("{0}: {1}", Type, Details.Output); + else if (Type == "BTreeIntegrityCheck") + s = string.Format("{0}: {1}", Type, Details.ErrorDetail); + if (DDetails.ContainsKey("Error")) + s += " " + Details.Error; + if (DDetails.ContainsKey("WinErrorCode")) + s += " " + Details.WinErrorCode; + if (DDetails.ContainsKey("LinuxErrorCode")) + s += " " + Details.LinuxErrorCode; + if (DDetails.ContainsKey("Status")) + s += " Status=" + Details.Status; + if (DDetails.ContainsKey("In")) + s += " In " + Details.In; + if (DDetails.ContainsKey("SQLiteError")) + s += string.Format(" SQLiteError={0}({1})", Details.SQLiteError, Details.SQLiteErrorCode); + if (DDetails.ContainsKey("Details") && includeDetails) + s += ": " + Details.Details; + + return s; + } + + }; + + public class TestPlan : Event + { + public string TestUID; + public string TestFile; + public int randomSeed; + public bool Buggify; + public bool DeterminismCheck; + public string OldBinary; + + }; + + public class Test : TestPlan + { + public string SourceVersion; + public double SimElapsedTime; + public double RealElapsedTime; + public bool ok; + public int passed, failed; + public int randomUnseed; + public long peakMemUsage; + + public Event[] events; // Summarized events during the test + }; + + public struct AreaGraphPoint + { + public double X { get; set; } + public double Y { get; set; } + }; + + public struct LineGraphPoint + { + public double X { get; set; } + public double Y { get; set; } + public object Category { get; set; } + }; + + public class Interval + { + public double Begin { get; set; } + public double End { get; set; } + public string Category { get; set; } + public string Color { get; set; } + public string Detail { get; set; } + public object Object { get; set; } + }; + + public class MachineRole : Interval + { + public string Machine { get; set; } + public string Role { get; set; } + }; + + public class Location + { + public string Name; + public int Y; + }; + + //Specifies the type of LocationTime being used + public enum LocationTimeOp + { + //Designates a location in the code at a particular time + Normal = 0, + + //Designates that this LocationTime maps one event ID to another + MapId + }; + + //Struct which houses a location in the code and a time which that location was hit + //The ID signifies the particular pass through the code + //Some of these objects act as special markers used to connect one ID to another + public struct LocationTime + { + public int id; + public double Time; + public Location Loc; + + public LocationTimeOp locationTimeOp; + + //If locationTimeOp == MapId, then this will hold the id of the event that should come after the id specified in the id field + public int childId; + }; +} \ No newline at end of file diff --git a/contrib/TraceLogHelper/JsonParser.cs b/contrib/TraceLogHelper/JsonParser.cs new file mode 100644 index 0000000000..9d7272a37f --- /dev/null +++ b/contrib/TraceLogHelper/JsonParser.cs @@ -0,0 +1,93 @@ +/* + * JsonParser.cs + * + * This source file is part of the FoundationDB open source project + * + * Copyright 2013-2020 Apple Inc. and the FoundationDB project authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.Serialization.Json; +using System.Text; +using System.Xml; +using System.Xml.XPath; +using System.Xml.Linq; + +namespace Magnesium +{ + public static class JsonParser + { + static Random r = new Random(); + + public static IEnumerable Parse(System.IO.Stream stream, string file, + bool keepOriginalElement = false, double startTime = -1, double endTime = Double.MaxValue, + double samplingFactor = 1.0) + { + using (var reader = new System.IO.StreamReader(stream)) + { + string line; + while((line = reader.ReadLine()) != null) + { + XElement root = XElement.Load(JsonReaderWriterFactory.CreateJsonReader(new MemoryStream(Encoding.UTF8.GetBytes(line)), new XmlDictionaryReaderQuotas())); + Event ev = null; + try + { + ev = ParseEvent(root, file, keepOriginalElement, startTime, endTime, samplingFactor); + } + catch (Exception e) + { + throw new Exception(string.Format("Failed to parse JSON {0}", root), e); + } + if (ev != null) yield return ev; + } + } + } + + private static Event ParseEvent(XElement xEvent, string file, bool keepOriginalElement, double startTime, double endTime, double samplingFactor) + { + if (samplingFactor != 1.0 && r.NextDouble() > samplingFactor) + return null; + + XElement trackLatestElement = xEvent.XPathSelectElement("//TrackLatestType"); + bool rolledEvent = trackLatestElement != null && trackLatestElement.Value.Equals("Rolled"); + String timeElement = (rolledEvent) ? "OriginalTime" : "Time"; + double eventTime = double.Parse(xEvent.XPathSelectElement("//" + timeElement).Value); + + if (eventTime < startTime || eventTime > endTime) + return null; + + return new Event { + Severity = (Severity)int.Parse(xEvent.XPathSelectElement("//Severity").ValueOrDefault("40")), + Type = string.Intern(xEvent.XPathSelectElement("//Type").Value), + Time = eventTime, + Machine = string.Intern(xEvent.XPathSelectElement("//Machine").Value), + ID = string.Intern(xEvent.XPathSelectElement("//ID").ValueOrDefault("0")), + TraceFile = file, + DDetails = xEvent.Elements() + .Where(a=>a.Name != "Type" && a.Name != "Time" && a.Name != "Machine" && a.Name != "ID" && a.Name != "Severity" && (!rolledEvent || a.Name != "OriginalTime")) + .ToDictionary(a=>string.Intern(a.Name.LocalName), a=>(object)a.Value), + original = keepOriginalElement ? xEvent : null + }; + } + + private static string ValueOrDefault( this XElement attr, string def ) { + if (attr == null) return def; + else return attr.Value; + } + } +} diff --git a/contrib/TraceLogHelper/Properties/AssemblyInfo.cs b/contrib/TraceLogHelper/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..e467ef9b7a --- /dev/null +++ b/contrib/TraceLogHelper/Properties/AssemblyInfo.cs @@ -0,0 +1,56 @@ +/* + * AssemblyInfo.cs + * + * This source file is part of the FoundationDB open source project + * + * Copyright 2013-2020 Apple Inc. and the FoundationDB project authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TraceLogHelper")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Apple Inc.")] +[assembly: AssemblyProduct("TraceLogHelper")] +[assembly: AssemblyCopyright("Copyright © Apple Inc. 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("ec8f2fdc-25fe-4958-b807-c30bd1da341b")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/contrib/TraceLogHelper/TraceLogHelper.csproj b/contrib/TraceLogHelper/TraceLogHelper.csproj new file mode 100644 index 0000000000..084a44733d --- /dev/null +++ b/contrib/TraceLogHelper/TraceLogHelper.csproj @@ -0,0 +1,58 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {1FA45F13-1015-403C-9115-CEFFDD522B20} + Library + Properties + TraceLogHelper + TraceLogHelper + v4.0 + 512 + + + true + full + false + ..\bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/contrib/TraceLogHelper/TraceLogUtil.cs b/contrib/TraceLogHelper/TraceLogUtil.cs new file mode 100644 index 0000000000..4e8dc69f2b --- /dev/null +++ b/contrib/TraceLogHelper/TraceLogUtil.cs @@ -0,0 +1,79 @@ +/* + * TraceLogUtil.cs + * + * This source file is part of the FoundationDB open source project + * + * Copyright 2013-2020 Apple Inc. and the FoundationDB project authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Magnesium +{ + public static class TraceLogUtil + { + public static IEnumerable IdentifyFailedTestPlans(IEnumerable events) + { + var failedPlans = new Dictionary(); + foreach (var ev in events) + { + var tp = ev as TestPlan; + if (tp == null || tp.TestUID == "") + { + yield return ev; + continue; + } + var t = tp as Test; + if (t == null) + { + if (!failedPlans.ContainsKey(tp.TestUID + tp.TraceFile)) + { + failedPlans.Add(tp.TestUID + tp.TraceFile, tp); + } + } + else + { + failedPlans.Remove(tp.TestUID + tp.TraceFile); + if ((tp.TraceFile != null) && tp.TraceFile.EndsWith("-2.txt")) failedPlans.Remove(tp.TestUID + tp.TraceFile.Split('-')[0] + "-1.txt"); + yield return ev; + } + } + foreach (var p in failedPlans.Values) + yield return new Test + { + Type = "FailedTestPlan", + Time = p.Time, + Machine = p.Machine, + TestUID = p.TestUID, + TestFile = p.TestFile, + randomSeed = p.randomSeed, + Buggify = p.Buggify, + DeterminismCheck = p.DeterminismCheck, + OldBinary = p.OldBinary, + events = new Event[] { + new Event { + Severity = Severity.SevWarnAlways, + Type = "TestNotSummarized", + Time = p.Time, + Machine = p.Machine + } + } + }; + } + } +} diff --git a/contrib/TraceLogHelper/XmlParser.cs b/contrib/TraceLogHelper/XmlParser.cs new file mode 100644 index 0000000000..3728c58c3b --- /dev/null +++ b/contrib/TraceLogHelper/XmlParser.cs @@ -0,0 +1,194 @@ +/* + * XmlParser.cs + * + * This source file is part of the FoundationDB open source project + * + * Copyright 2013-2020 Apple Inc. and the FoundationDB project authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Linq; + +namespace Magnesium +{ + public static class XmlParser + { + static Random r = new Random(); + + public static IEnumerable Parse(System.IO.Stream stream, string file, + bool keepOriginalElement = false, double startTime = -1, double endTime = Double.MaxValue, + double samplingFactor = 1.0) + { + using (var reader = XmlReader.Create(stream)) + { + reader.ReadToDescendant("Trace"); + reader.Read(); + foreach (var xev in StreamElements(reader)) + { + Event ev = null; + try + { + if (xev.Name == "Event") + ev = ParseEvent(xev, file, keepOriginalElement, startTime, endTime, samplingFactor); + else if (xev.Name == "Test") + ev = ParseTest(xev, file, keepOriginalElement); + else if (xev.Name == "TestPlan") + ev = ParseTestPlan(xev, file, keepOriginalElement); + } + catch (Exception e) + { + throw new Exception(string.Format("Failed to parse XML {0}", xev), e); + } + if (ev != null) yield return ev; + } + } + } + + private static Event ParseEvent(XElement xEvent, string file, bool keepOriginalElement, double startTime, double endTime, double samplingFactor) + { + if (samplingFactor != 1.0 && r.NextDouble() > samplingFactor) + return null; + + XAttribute trackLatestAttribute = xEvent.Attribute("TrackLatestType"); + bool rolledEvent = trackLatestAttribute != null && trackLatestAttribute.Value.Equals("Rolled"); + String timeAttribute = (rolledEvent) ? "OriginalTime" : "Time"; + double eventTime = double.Parse(xEvent.Attribute(timeAttribute).Value); + + if (eventTime < startTime || eventTime > endTime) + return null; + + return new Event { + Severity = (Severity)int.Parse(xEvent.Attribute("Severity").ValueOrDefault("40")), + Type = string.Intern(xEvent.Attribute("Type").Value), + Time = eventTime, + Machine = string.Intern(xEvent.Attribute("Machine").Value), + ID = string.Intern(xEvent.Attribute("ID").ValueOrDefault("0")), + TraceFile = file, + DDetails = xEvent.Attributes() + .Where(a=>a.Name != "Type" && a.Name != "Time" && a.Name != "Machine" && a.Name != "ID" && a.Name != "Severity" && (!rolledEvent || a.Name != "OriginalTime")) + .ToDictionary(a=>string.Intern(a.Name.LocalName), a=>(object)a.Value), + original = keepOriginalElement ? xEvent : null, + }; + } + + private static string ValueOrDefault( this XAttribute attr, string def ) { + if (attr == null) return def; + else return attr.Value; + } + + private static TestPlan ParseTestPlan(XElement xTP, string file, bool keepOriginalElement) + { + var time = double.Parse(xTP.Attribute("Time").ValueOrDefault("0")); + var machine = xTP.Attribute("Machine").ValueOrDefault(""); + return new TestPlan + { + TraceFile = file, + Type = "TestPlan", + Time = time, + Machine = machine, + TestUID = xTP.Attribute("TestUID").ValueOrDefault(""), + TestFile = xTP.Attribute("TestFile").ValueOrDefault(""), + randomSeed = int.Parse(xTP.Attribute("RandomSeed").ValueOrDefault("0")), + Buggify = xTP.Attribute("BuggifyEnabled").ValueOrDefault("1") != "0", + DeterminismCheck = xTP.Attribute("DeterminismCheck").ValueOrDefault("1") != "0", + OldBinary = xTP.Attribute("OldBinary").ValueOrDefault(""), + original = keepOriginalElement ? xTP : null, + }; + } + + private static Test ParseTest(XElement xTest, string file, bool keepOriginalElement) + { + var time = double.Parse(xTest.Attribute("Time").ValueOrDefault("0")); + var machine = xTest.Attribute("Machine").ValueOrDefault(""); + return new Test + { + TraceFile = file, + Type = "Test", + Time = time, + Machine = machine, + TestUID = xTest.Attribute("TestUID").ValueOrDefault(""), + TestFile = xTest.Attribute("TestFile").ValueOrDefault(""), + SourceVersion = xTest.Attribute("SourceVersion").ValueOrDefault(""), + ok = bool.Parse(xTest.Attribute("OK").ValueOrDefault("false")), + randomSeed = int.Parse(xTest.Attribute("RandomSeed").ValueOrDefault("0")), + randomUnseed = int.Parse(xTest.Attribute("RandomUnseed").ValueOrDefault("0")), + SimElapsedTime = double.Parse(xTest.Attribute("SimElapsedTime").ValueOrDefault("0")), + RealElapsedTime = double.Parse(xTest.Attribute("RealElapsedTime").ValueOrDefault("0")), + passed = int.Parse(xTest.Attribute("Passed").ValueOrDefault("0")), + failed = int.Parse(xTest.Attribute("Failed").ValueOrDefault("0")), + peakMemUsage = long.Parse(xTest.Attribute("PeakMemory").ValueOrDefault("0")), + Buggify = xTest.Attribute("BuggifyEnabled").ValueOrDefault("1") != "0", + DeterminismCheck = xTest.Attribute("DeterminismCheck").ValueOrDefault("1") != "0", + OldBinary = xTest.Attribute("OldBinary").ValueOrDefault(""), + original = keepOriginalElement ? xTest : null, + events = xTest.Elements().Select(e => + new Event { + Severity = (Severity)int.Parse(e.Attribute("Severity").ValueOrDefault("0")), + Type = e.Name.LocalName, + Time = time, + Machine = machine, + DDetails = e.Attributes() + .Where(a => a.Name != "Type" && a.Name != "Time" && a.Name != "Machine" && a.Name != "Severity") + .ToDictionary(a => a.Name.LocalName, a => (object)a.Value) + }).ToArray() + }; + } + + private static T Try(Func action, Func onError, Func isEOF) + { + try + { + return action(); + } + catch (Exception e) + { + if (isEOF()) + return onError(e); + else + throw e; + } + } + + private static IEnumerable StreamElements(this XmlReader reader) + { + while (!reader.EOF) + { + if (reader.NodeType == XmlNodeType.Element) + { + XElement node = null; + try + { + node = XElement.ReadFrom(reader) as XElement; + } + catch (Exception) { break; } + if (node != null) + yield return node; + } + else + { + try + { + reader.Read(); + } + catch (Exception) { break; } + } + } + } + } +} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 4890a96f95..a1ed2feb8e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -7,6 +7,8 @@ set(TEST_KEEP_LOGS "FAILED" CACHE STRING "Which logs to keep (NONE, FAILED, ALL) set(TEST_KEEP_SIMDIR "NONE" CACHE STRING "Which simfdb directories to keep (NONE, FAILED, ALL)") set(TEST_AGGREGATE_TRACES "NONE" CACHE STRING "Create aggregated trace files (NONE, FAILED, ALL)") set(TEST_LOG_FORMAT "xml" CACHE STRING "Format for test trace files (xml, json)") +set(TEST_INCLUDE ".*" CACHE STRING "Include only tests that match the given regex") +set(TEST_EXCLUDE ".^" CACHE STRING "Exclude all tests matching the given regex") # for the restart test we optimally want to use the last stable fdbserver # to test upgrades @@ -219,6 +221,12 @@ if(WITH_PYTHON) add_fdb_test(TEST_FILES status/single_process_too_many_config_params.txt) verify_testing() + if (NOT OPEN_FOR_IDE AND NOT WIN32) + create_correctness_package() + if (USE_VALGRIND) + create_valgrind_correctness_package() + endif() + endif() else() message(WARNING "Python not found, won't configure ctest") endif() From 83506cda87d4ab40e3b2e5be746e3e231d3f459c Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Fri, 15 Jan 2021 15:00:48 -0800 Subject: [PATCH 174/317] Log SevError instead of SevWarnAlways when all replicas of some data are lost. --- fdbserver/DataDistribution.actor.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index ff03a15263..4ff6ad4490 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -3181,7 +3181,7 @@ ACTOR Future zeroServerLeftLogger_impl(DDTeamCollection* self, ReferencegetShardMetrics.getReply(GetMetricsRequest(shard)))); - TraceEvent(SevWarnAlways, "DDShardLost", self->distributorId) + TraceEvent(SevError, "DDShardLost", self->distributorId) .detail("ServerTeamID", team->getTeamID()) .detail("ShardBegin", shard.begin) .detail("ShardEnd", shard.end); @@ -3194,7 +3194,7 @@ ACTOR Future zeroServerLeftLogger_impl(DDTeamCollection* self, ReferencedistributorId) + TraceEvent(SevError, "DDZeroServerLeftInTeam", self->distributorId) .detail("Team", team->getDesc()) .detail("TotalBytesLost", bytesLost); @@ -3409,11 +3409,13 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea } if (logTeamEvents) { int dataLoss = team->getPriority() == SERVER_KNOBS->PRIORITY_TEAM_0_LEFT; - Severity severity = dataLoss ? SevWarnAlways : SevInfo; + Severity severity = dataLoss ? SevError : SevInfo; TraceEvent(severity, "ServerTeamPriorityChange", self->distributorId) .detail("Priority", team->getPriority()) .detail("Info", team->getDesc()) - .detail("ZeroHealthyServerTeams", self->zeroHealthyTeams->get()); + .detail("ZeroHealthyServerTeams", self->zeroHealthyTeams->get()) + .detail("Hint", severity == SevError ? "No replicas remain of some data" + : "This team's priority changed"); if (team->getPriority() == SERVER_KNOBS->PRIORITY_TEAM_0_LEFT) { // 0 servers left in this team, data might be lost. zeroServerLeftLogger = zeroServerLeftLogger_impl(self, team); From a5d6c9687519e23ac39e041efd745ec8bcb072b9 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Sat, 16 Jan 2021 01:04:28 +0000 Subject: [PATCH 175/317] Fix heap use after free See https://github.com/apple/foundationdb/blob/master/flow/README.md#arenas for an explanation of how *Ref types are supposed to work --- fdbserver/storageserver.actor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 3b771bf3a8..2ef506b69e 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -316,7 +316,7 @@ public: class CurrentRunningFetchKeys { std::unordered_map startTimeMap; - std::unordered_map keyRangeMap; + std::unordered_map keyRangeMap; static const StringRef emptyString; static const KeyRangeRef emptyKeyRange; @@ -331,7 +331,7 @@ public: keyRangeMap.erase(id); } - std::pair longestTime() const { + std::pair longestTime() const { if (numRunning() == 0) { return {-1, emptyKeyRange}; } From 6da78b1b193caf2d82278c36ba66c1aa55b42a68 Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Fri, 15 Jan 2021 19:29:14 -0800 Subject: [PATCH 176/317] Rewrote how injected faults are handled in SQLite to be more reliable and work with an upcoming write throttling feature in AsyncFileCached. --- fdbserver/CMakeLists.txt | 1 + fdbserver/KeyValueStoreSQLite.actor.cpp | 21 ++++++- fdbserver/VFSAsync.cpp | 81 ++++++++++++++----------- fdbserver/VFSAsync.h | 78 ++++++++++++++++++++++++ fdbserver/sqlite/sqlite3.amalgamation.c | 8 +++ fdbserver/sqlite/sqlite3.h | 3 + 6 files changed, 154 insertions(+), 38 deletions(-) create mode 100644 fdbserver/VFSAsync.h diff --git a/fdbserver/CMakeLists.txt b/fdbserver/CMakeLists.txt index 89463f7a96..3da6dc552a 100644 --- a/fdbserver/CMakeLists.txt +++ b/fdbserver/CMakeLists.txt @@ -96,6 +96,7 @@ set(FDBSERVER_SRCS TLogInterface.h TLogServer.actor.cpp VersionedBTree.actor.cpp + VFSAsync.h VFSAsync.cpp WaitFailure.actor.cpp WaitFailure.h diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index e2e40f4658..d1c298778b 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -32,6 +32,7 @@ extern "C" { u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*); } #include "flow/ThreadPrimitives.h" +#include "fdbserver/VFSAsync.h" #include "fdbserver/template_fdb.h" #include "fdbrpc/simulator.h" #include "flow/actorcompiler.h" // This must be the last #include. @@ -222,6 +223,7 @@ struct SQLiteDB : NonCopyable { bool page_checksums; bool fragment_values; PageChecksumCodec *pPagerCodec; // we do NOT own this pointer, db does. + VFSAsyncFile *vfsDB, *vfsWAL; void beginTransaction(bool write) { checkError("BtreeBeginTrans", sqlite3BtreeBeginTrans(btree, write)); @@ -236,7 +238,7 @@ struct SQLiteDB : NonCopyable { void open(bool writable); void createFromScratch(); - SQLiteDB( std::string filename, bool page_checksums, bool fragment_values): filename(filename), db(NULL), btree(NULL), table(-1), freetable(-1), haveMutex(false), page_checksums(page_checksums), fragment_values(fragment_values) {} + SQLiteDB( std::string filename, bool page_checksums, bool fragment_values): filename(filename), db(NULL), btree(NULL), table(-1), freetable(-1), haveMutex(false), page_checksums(page_checksums), fragment_values(fragment_values), vfsDB(nullptr), vfsWAL(nullptr) {} ~SQLiteDB() { if (db) { @@ -260,14 +262,24 @@ struct SQLiteDB : NonCopyable { } } + bool consumeInjectedErrors() { + // Both of these consumeInjectedError() calls must be made, If this was written as one expression + // then if the first one returned true the second call would be skipped. + bool dbErr = (vfsDB != nullptr && vfsDB->consumeInjectedError()); + bool walErr = (vfsWAL != nullptr && vfsWAL->consumeInjectedError()); + return dbErr || walErr; + } + void checkError( const char* context, int rc ) { //if (deterministicRandom()->random01() < .001) rc = SQLITE_INTERRUPT; if (rc) { // Our exceptions don't propagate through sqlite, so we don't know for sure if the error that caused this was // an injected fault. Assume that if fault injection is happening, this is an injected fault. Error err = io_error(); - if (g_network->isSimulated() && (g_simulator.getCurrentProcess()->fault_injection_p1 || g_simulator.getCurrentProcess()->machine->machineProcess->fault_injection_p1 || g_simulator.getCurrentProcess()->rebooting)) + + if (g_network->isSimulated() && (consumeInjectedErrors())) { err = err.asInjectedFault(); + } if (db) db->errCode = rc; @@ -1378,6 +1390,11 @@ void SQLiteDB::open(bool writable) { int result = sqlite3_open_v2(apath.c_str(), &db, (writable ? SQLITE_OPEN_READWRITE : SQLITE_OPEN_READONLY), NULL); checkError("open", result); + vfsDB = (VFSAsyncFile *)sqlite3_get_vfs_db(db); + ASSERT(vfsDB != nullptr); + vfsWAL = (VFSAsyncFile *)sqlite3_get_vfs_wal(db); + ASSERT(vfsWAL != nullptr); + int chunkSize; if( !g_network->isSimulated() ) { chunkSize = 4096 * SERVER_KNOBS->SQLITE_CHUNK_SIZE_PAGES; diff --git a/fdbserver/VFSAsync.cpp b/fdbserver/VFSAsync.cpp index 3d53aaccfb..b50ced0e97 100644 --- a/fdbserver/VFSAsync.cpp +++ b/fdbserver/VFSAsync.cpp @@ -46,6 +46,8 @@ #include #endif +#include "fdbserver/VFSAsync.h" + /* ** The maximum pathname length supported by this VFS. */ @@ -58,35 +60,11 @@ #define EXCLUSIVE_LOCK 4 const uint32_t RESERVED_COUNT = 1U<<29; -/* -** When using this VFS, the sqlite3_file* handles that SQLite uses are -** actually pointers to instances of type VFSAsyncFile. -*/ -typedef struct VFSAsyncFile VFSAsyncFile; -struct VFSAsyncFile { - sqlite3_file base; /* Base class. Must be first. */ - int flags; - std::string filename; - Reference file; +VFSAsyncFile::VFSAsyncFile(std::string const& filename, int flags) +: filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0), errorInjected(false) { + filename_lockCount_openCount[filename].second++; +} - uint32_t * const pLockCount; // +1 for each SHARED_LOCK, or 1+X_COUNT for lock level X - int lockLevel; // NO_LOCK, SHARED_LOCK, RESERVED_LOCK, PENDING_LOCK, or EXCLUSIVE_LOCK - - struct SharedMemoryInfo *sharedMemory; - int sharedMemorySharedLocks; - int sharedMemoryExclusiveLocks; - - int debug_zcrefs, debug_zcreads, debug_reads; - - int chunkSize; - - VFSAsyncFile(std::string const& filename, int flags) : filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0) { - filename_lockCount_openCount[filename].second++; - } - ~VFSAsyncFile(); - - static std::map> filename_lockCount_openCount; -}; std::map> VFSAsyncFile::filename_lockCount_openCount; static int asyncClose(sqlite3_file *pFile){ @@ -112,7 +90,10 @@ static int asyncRead(sqlite3_file *pFile, void *zBuf, int iAmt, sqlite_int64 iOf return SQLITE_IOERR_SHORT_READ; } return SQLITE_OK; - } catch (Error& ) { + } catch (Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR_READ; } } @@ -123,7 +104,10 @@ static int asyncReleaseZeroCopy(sqlite3_file* pFile, void* data, int iAmt, sqlit try{ --p->debug_zcrefs; p->file->releaseZeroCopy( data, iAmt, iOfst ); - } catch (Error& ) { + } catch (Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR; } return SQLITE_OK; @@ -145,7 +129,10 @@ static int asyncReadZeroCopy(sqlite3_file *pFile, void **data, int iAmt, sqlite_ } ++p->debug_zcreads; return SQLITE_OK; - } catch (Error& ) { + } catch (Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR_READ; } } @@ -162,7 +149,10 @@ static int asyncReadZeroCopy(sqlite3_file *pFile, void **data, int iAmt, sqlite_ return SQLITE_IOERR_SHORT_READ; } return SQLITE_OK; - } catch (Error& ) { + } catch (Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR_READ; } } @@ -178,7 +168,10 @@ static int asyncWrite(sqlite3_file *pFile, const void *zBuf, int iAmt, sqlite_in try { waitFor( p->file->write( zBuf, iAmt, iOfst ) ); return SQLITE_OK; - } catch(Error& ) { + } catch(Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR_WRITE; } } @@ -194,7 +187,10 @@ static int asyncTruncate(sqlite3_file *pFile, sqlite_int64 size){ try { waitFor( p->file->truncate( size ) ); return SQLITE_OK; - } catch(Error& ) { + } catch(Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR_TRUNCATE; } } @@ -204,7 +200,11 @@ static int asyncSync(sqlite3_file *pFile, int flags){ try { waitFor( p->file->sync() ); return SQLITE_OK; - } catch (Error& e) { + } catch (Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } + TraceEvent("VFSSyncError") .error(e) .detail("Filename", p->filename) @@ -223,7 +223,10 @@ static int VFSAsyncFileSize(sqlite3_file *pFile, sqlite_int64 *pSize){ try { *pSize = waitForAndGet( p->file->size() ); return SQLITE_OK; - } catch (Error& ) { + } catch (Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR_FSTAT; } } @@ -648,6 +651,9 @@ static int asyncFullPathname( memcpy(zPathOut, s.c_str(), s.size()+1); return SQLITE_OK; } catch (Error& e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pVfs)->errorInjected = true; + } TraceEvent(SevError,"VFSAsyncFullPathnameError").error(e).detail("PathIn", (std::string)zPath); return SQLITE_IOERR; } catch(...) { @@ -716,6 +722,9 @@ static int asyncSleep(sqlite3_vfs *pVfs, int microseconds){ waitFor( g_network->delay( microseconds*1e-6, TaskPriority::DefaultDelay ) || simCancel ); return microseconds; } catch( Error &e ) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pVfs)->errorInjected = true; + } TraceEvent(SevError, "AsyncSleepError").error(e,true); return 0; } diff --git a/fdbserver/VFSAsync.h b/fdbserver/VFSAsync.h new file mode 100644 index 0000000000..debf317eef --- /dev/null +++ b/fdbserver/VFSAsync.h @@ -0,0 +1,78 @@ +/* + * VFSAsync.h + * + * This source file is part of the FoundationDB open source project + * + * Copyright 2013-2018 Apple Inc. and the FoundationDB project authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "sqlite/sqlite3.h" +#include +#include +#include "fdbrpc/IAsyncFile.h" +#include "fdbserver/CoroFlow.h" + +//#include +//#include + +//#ifdef WIN32 +//#include +//#endif + +#ifdef __unixish__ +//#include +//#include +//#include +//#include +//#include +//#include +//#include +//#include +#endif + +/* +** When using this VFS, the sqlite3_file* handles that SQLite uses are +** actually pointers to instances of type VFSAsyncFile. +*/ +typedef struct VFSAsyncFile VFSAsyncFile; +struct VFSAsyncFile { + sqlite3_file base; /* Base class. Must be first. */ + int flags; + std::string filename; + Reference file; + bool errorInjected; + + bool consumeInjectedError() { + bool e = errorInjected; + errorInjected = false; + return e; + } + + uint32_t * const pLockCount; // +1 for each SHARED_LOCK, or 1+X_COUNT for lock level X + int lockLevel; // NO_LOCK, SHARED_LOCK, RESERVED_LOCK, PENDING_LOCK, or EXCLUSIVE_LOCK + + struct SharedMemoryInfo *sharedMemory; + int sharedMemorySharedLocks; + int sharedMemoryExclusiveLocks; + + int debug_zcrefs, debug_zcreads, debug_reads; + + int chunkSize; + + VFSAsyncFile(std::string const& filename, int flags); + ~VFSAsyncFile(); + + static std::map> filename_lockCount_openCount; +}; diff --git a/fdbserver/sqlite/sqlite3.amalgamation.c b/fdbserver/sqlite/sqlite3.amalgamation.c index adbad64ea1..e2863ffae8 100644 --- a/fdbserver/sqlite/sqlite3.amalgamation.c +++ b/fdbserver/sqlite/sqlite3.amalgamation.c @@ -93791,6 +93791,14 @@ SQLITE_API int sqlite3_open_v2( return openDatabase(filename, ppDb, flags, zVfs); } +SQLITE_API void * sqlite3_get_vfs_db(sqlite3 *pDb) { + return pDb->aDb[0].pBt->pBt->pPager->pWal->pDbFd; +} + +SQLITE_API void * sqlite3_get_vfs_wal(sqlite3 *pDb) { + return pDb->aDb[0].pBt->pBt->pPager->pWal->pWalFd; +} + #ifndef SQLITE_OMIT_UTF16 /* ** Open a new database handle. diff --git a/fdbserver/sqlite/sqlite3.h b/fdbserver/sqlite/sqlite3.h index fc33edfd73..d3d62419f0 100755 --- a/fdbserver/sqlite/sqlite3.h +++ b/fdbserver/sqlite/sqlite3.h @@ -2411,6 +2411,9 @@ SQLITE_API int sqlite3_open_v2( const char *zVfs /* Name of VFS module to use */ ); +SQLITE_API void * sqlite3_get_vfs_db(sqlite3 *pDb); +SQLITE_API void * sqlite3_get_vfs_wal(sqlite3 *pDb); + /* ** CAPI3REF: Error Codes And Messages ** From 8df6874417d440ee68ffe7bfb52e3508c8a6b0f4 Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Fri, 15 Jan 2021 21:13:31 -0800 Subject: [PATCH 177/317] Bug fixes: Check for null pager and wal pointers, and initialize vfsWAL after SQLite has opened the WAL. --- fdbserver/KeyValueStoreSQLite.actor.cpp | 5 +++-- fdbserver/sqlite/sqlite3.amalgamation.c | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index d1c298778b..6fe00eb5c6 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -1392,8 +1392,6 @@ void SQLiteDB::open(bool writable) { vfsDB = (VFSAsyncFile *)sqlite3_get_vfs_db(db); ASSERT(vfsDB != nullptr); - vfsWAL = (VFSAsyncFile *)sqlite3_get_vfs_wal(db); - ASSERT(vfsWAL != nullptr); int chunkSize; if( !g_network->isSimulated() ) { @@ -1421,6 +1419,9 @@ void SQLiteDB::open(bool writable) { ASSERT( false ); } + vfsWAL = (VFSAsyncFile *)sqlite3_get_vfs_wal(db); + ASSERT(vfsWAL != nullptr); + if (writable) { Statement(*this, "PRAGMA synchronous = NORMAL").execute(); // OFF, NORMAL, FULL Statement(*this, "PRAGMA wal_autocheckpoint = -1").nextRow(); diff --git a/fdbserver/sqlite/sqlite3.amalgamation.c b/fdbserver/sqlite/sqlite3.amalgamation.c index e2863ffae8..ff6cc2dafe 100644 --- a/fdbserver/sqlite/sqlite3.amalgamation.c +++ b/fdbserver/sqlite/sqlite3.amalgamation.c @@ -93792,11 +93792,13 @@ SQLITE_API int sqlite3_open_v2( } SQLITE_API void * sqlite3_get_vfs_db(sqlite3 *pDb) { - return pDb->aDb[0].pBt->pBt->pPager->pWal->pDbFd; + Pager *pPager = sqlite3BtreePager(pDb->aDb[0].pBt); + return (pPager != NULL) ? pPager->fd : NULL; } SQLITE_API void * sqlite3_get_vfs_wal(sqlite3 *pDb) { - return pDb->aDb[0].pBt->pBt->pPager->pWal->pWalFd; + Pager *pPager = sqlite3BtreePager(pDb->aDb[0].pBt); + return ((pPager != NULL) && (pPager->pWal != NULL)) ? pPager->pWal->pWalFd : NULL; } #ifndef SQLITE_OMIT_UTF16 From f1adafaf8c68ed70e7f5073d0c9a3eb8862bddd9 Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Sat, 16 Jan 2021 05:04:30 -0800 Subject: [PATCH 178/317] Refactored how injected fault state is managed to make debugging injected fault handling easier. Moved injected error tracking for open() into an INetwork global since it should be unique per simulated process. Fixed bug where injected error in WAL file was not recognized as injected because it occurred before SQLiteDB's vfsWAL pointer was initialized. Simplified logic in SQLiteDB. Added comments. --- fdbserver/KeyValueStoreSQLite.actor.cpp | 31 +++++++++++----------- fdbserver/VFSAsync.cpp | 23 +++++++++-------- fdbserver/VFSAsync.h | 34 ++++++++++++++++++++++--- flow/network.h | 3 ++- 4 files changed, 62 insertions(+), 29 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 6fe00eb5c6..b2db31aa18 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -223,7 +223,6 @@ struct SQLiteDB : NonCopyable { bool page_checksums; bool fragment_values; PageChecksumCodec *pPagerCodec; // we do NOT own this pointer, db does. - VFSAsyncFile *vfsDB, *vfsWAL; void beginTransaction(bool write) { checkError("BtreeBeginTrans", sqlite3BtreeBeginTrans(btree, write)); @@ -238,7 +237,7 @@ struct SQLiteDB : NonCopyable { void open(bool writable); void createFromScratch(); - SQLiteDB( std::string filename, bool page_checksums, bool fragment_values): filename(filename), db(NULL), btree(NULL), table(-1), freetable(-1), haveMutex(false), page_checksums(page_checksums), fragment_values(fragment_values), vfsDB(nullptr), vfsWAL(nullptr) {} + SQLiteDB( std::string filename, bool page_checksums, bool fragment_values): filename(filename), db(NULL), btree(NULL), table(-1), freetable(-1), haveMutex(false), page_checksums(page_checksums), fragment_values(fragment_values) {} ~SQLiteDB() { if (db) { @@ -262,12 +261,20 @@ struct SQLiteDB : NonCopyable { } } - bool consumeInjectedErrors() { - // Both of these consumeInjectedError() calls must be made, If this was written as one expression - // then if the first one returned true the second call would be skipped. - bool dbErr = (vfsDB != nullptr && vfsDB->consumeInjectedError()); - bool walErr = (vfsWAL != nullptr && vfsWAL->consumeInjectedError()); - return dbErr || walErr; + // Consume and return the first of any injected errors detected by the VFSAsyncFile class. + bool consumeInjectedErrors(bool isOpen) { + // Get pointers to the VFSAsyncFile instances that SQLite is using to access its DB and WAL files + // in order to check if either of them have encountered an injected fault. + // + // These could be made into members, but this code is only run when an error occurs and only in simulation. + VFSAsyncFile *vfsDB = (VFSAsyncFile *)sqlite3_get_vfs_db(db); + VFSAsyncFile *vfsWAL = (VFSAsyncFile *)sqlite3_get_vfs_wal(db); + + // Return the first error found, leave the others unconsumed. + // Consume the open error last to prevent an injected open error from hiding a non-injected IO op error. + return (vfsDB != nullptr && vfsDB->consumeInjectedError()) + || (vfsWAL != nullptr && vfsWAL->consumeInjectedError()) + || (isOpen && VFSAsyncFile::consumeInjectedOpenError()); } void checkError( const char* context, int rc ) { @@ -277,7 +284,7 @@ struct SQLiteDB : NonCopyable { // an injected fault. Assume that if fault injection is happening, this is an injected fault. Error err = io_error(); - if (g_network->isSimulated() && (consumeInjectedErrors())) { + if (g_network->isSimulated() && consumeInjectedErrors(strcmp(context, "open") == 0)) { err = err.asInjectedFault(); } @@ -1390,9 +1397,6 @@ void SQLiteDB::open(bool writable) { int result = sqlite3_open_v2(apath.c_str(), &db, (writable ? SQLITE_OPEN_READWRITE : SQLITE_OPEN_READONLY), NULL); checkError("open", result); - vfsDB = (VFSAsyncFile *)sqlite3_get_vfs_db(db); - ASSERT(vfsDB != nullptr); - int chunkSize; if( !g_network->isSimulated() ) { chunkSize = 4096 * SERVER_KNOBS->SQLITE_CHUNK_SIZE_PAGES; @@ -1419,9 +1423,6 @@ void SQLiteDB::open(bool writable) { ASSERT( false ); } - vfsWAL = (VFSAsyncFile *)sqlite3_get_vfs_wal(db); - ASSERT(vfsWAL != nullptr); - if (writable) { Statement(*this, "PRAGMA synchronous = NORMAL").execute(); // OFF, NORMAL, FULL Statement(*this, "PRAGMA wal_autocheckpoint = -1").nextRow(); diff --git a/fdbserver/VFSAsync.cpp b/fdbserver/VFSAsync.cpp index b50ced0e97..9bde2dbc01 100644 --- a/fdbserver/VFSAsync.cpp +++ b/fdbserver/VFSAsync.cpp @@ -61,7 +61,7 @@ const uint32_t RESERVED_COUNT = 1U<<29; VFSAsyncFile::VFSAsyncFile(std::string const& filename, int flags) -: filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0), errorInjected(false) { +: filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0), injectedError(false) { filename_lockCount_openCount[filename].second++; } @@ -92,7 +92,7 @@ static int asyncRead(sqlite3_file *pFile, void *zBuf, int iAmt, sqlite_int64 iOf return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } return SQLITE_IOERR_READ; } @@ -106,7 +106,7 @@ static int asyncReleaseZeroCopy(sqlite3_file* pFile, void* data, int iAmt, sqlit p->file->releaseZeroCopy( data, iAmt, iOfst ); } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } return SQLITE_IOERR; } @@ -131,7 +131,7 @@ static int asyncReadZeroCopy(sqlite3_file *pFile, void **data, int iAmt, sqlite_ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } return SQLITE_IOERR_READ; } @@ -170,7 +170,7 @@ static int asyncWrite(sqlite3_file *pFile, const void *zBuf, int iAmt, sqlite_in return SQLITE_OK; } catch(Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } return SQLITE_IOERR_WRITE; } @@ -189,7 +189,7 @@ static int asyncTruncate(sqlite3_file *pFile, sqlite_int64 size){ return SQLITE_OK; } catch(Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } return SQLITE_IOERR_TRUNCATE; } @@ -202,7 +202,7 @@ static int asyncSync(sqlite3_file *pFile, int flags){ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } TraceEvent("VFSSyncError") @@ -225,7 +225,7 @@ static int VFSAsyncFileSize(sqlite3_file *pFile, sqlite_int64 *pSize){ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } return SQLITE_IOERR_FSTAT; } @@ -547,6 +547,9 @@ static int asyncOpen( .detail("Sqlite3File", DEBUG_DETERMINISM ? 0 : (int64_t)pFile) .detail("IAsyncFile", DEBUG_DETERMINISM ? 0 : (int64_t)p->file.getPtr());*/ } catch (Error& e) { + if(e.isInjectedFault()) { + VFSAsyncFile::setOpenError(); + } TraceEvent("SQLiteOpenFail").error(e).detail("Filename", p->filename); p->~VFSAsyncFile(); return SQLITE_CANTOPEN; @@ -652,7 +655,7 @@ static int asyncFullPathname( return SQLITE_OK; } catch (Error& e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pVfs)->errorInjected = true; + ((VFSAsyncFile *)pVfs)->setInjectedError(); } TraceEvent(SevError,"VFSAsyncFullPathnameError").error(e).detail("PathIn", (std::string)zPath); return SQLITE_IOERR; @@ -723,7 +726,7 @@ static int asyncSleep(sqlite3_vfs *pVfs, int microseconds){ return microseconds; } catch( Error &e ) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pVfs)->errorInjected = true; + ((VFSAsyncFile *)pVfs)->setInjectedError(); } TraceEvent(SevError, "AsyncSleepError").error(e,true); return 0; diff --git a/fdbserver/VFSAsync.h b/fdbserver/VFSAsync.h index debf317eef..b67292b9f2 100644 --- a/fdbserver/VFSAsync.h +++ b/fdbserver/VFSAsync.h @@ -52,11 +52,39 @@ struct VFSAsyncFile { int flags; std::string filename; Reference file; - bool errorInjected; + bool injectedError; + + // Method to set the injectedError flag to indicate that an injected error has been caught. + // Mostly useful for debugging injected fault handling. + void setInjectedError() { + //TraceEvent(SevInfo, "VFSSetInjectedFault").backtrace().detail("This", (void *)this); + injectedError = true; + } bool consumeInjectedError() { - bool e = errorInjected; - errorInjected = false; + bool e = injectedError; + injectedError = false; + return e; + } + + // Static methods for capturing an injected open error and consuming it to convert SQLite + // errors into Error instances with isInjectedFault() set. + // + // Uses a g_network global so that injected errors on one simulated process do not mask + // non-injected errors on another. + static void setOpenError() { + g_network->setGlobal(INetwork::enSQLiteOpenError, (flowGlobalType)true); + } + + static void clearOpenError() { + g_network->setGlobal(INetwork::enSQLiteOpenError, (flowGlobalType)false); + } + + static bool consumeInjectedOpenError() { + bool e = (bool)g_network->global(INetwork::enSQLiteOpenError); + if(e) { + clearOpenError(); + } return e; } diff --git a/flow/network.h b/flow/network.h index 37a8391042..157d851a63 100644 --- a/flow/network.h +++ b/flow/network.h @@ -451,7 +451,8 @@ public: enASIOTimedOut = 9, enBlobCredentialFiles = 10, enNetworkAddressesFunc = 11, - enClientFailureMonitor = 12 + enClientFailureMonitor = 12, + enSQLiteOpenError = 13 }; virtual void longTaskCheck( const char* name ) {} From 11927f6fff6f7c79ca564c749073c47e9c24a4b9 Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Sun, 17 Jan 2021 04:17:13 -0800 Subject: [PATCH 179/317] Another refactor of SQLite injected error handling to address failures of the previous attempt. Some code cleanup. Added documentation of injected error handling works and why. --- fdbserver/KeyValueStoreSQLite.actor.cpp | 19 +----- fdbserver/VFSAsync.cpp | 24 ++++---- fdbserver/VFSAsync.h | 82 ++++++++++--------------- fdbserver/sqlite/sqlite3.amalgamation.c | 10 --- fdbserver/sqlite/sqlite3.h | 3 - flow/network.h | 2 +- 6 files changed, 48 insertions(+), 92 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index b2db31aa18..179b0b3b44 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -261,30 +261,13 @@ struct SQLiteDB : NonCopyable { } } - // Consume and return the first of any injected errors detected by the VFSAsyncFile class. - bool consumeInjectedErrors(bool isOpen) { - // Get pointers to the VFSAsyncFile instances that SQLite is using to access its DB and WAL files - // in order to check if either of them have encountered an injected fault. - // - // These could be made into members, but this code is only run when an error occurs and only in simulation. - VFSAsyncFile *vfsDB = (VFSAsyncFile *)sqlite3_get_vfs_db(db); - VFSAsyncFile *vfsWAL = (VFSAsyncFile *)sqlite3_get_vfs_wal(db); - - // Return the first error found, leave the others unconsumed. - // Consume the open error last to prevent an injected open error from hiding a non-injected IO op error. - return (vfsDB != nullptr && vfsDB->consumeInjectedError()) - || (vfsWAL != nullptr && vfsWAL->consumeInjectedError()) - || (isOpen && VFSAsyncFile::consumeInjectedOpenError()); - } - void checkError( const char* context, int rc ) { //if (deterministicRandom()->random01() < .001) rc = SQLITE_INTERRUPT; if (rc) { // Our exceptions don't propagate through sqlite, so we don't know for sure if the error that caused this was // an injected fault. Assume that if fault injection is happening, this is an injected fault. Error err = io_error(); - - if (g_network->isSimulated() && consumeInjectedErrors(strcmp(context, "open") == 0)) { + if (g_network->isSimulated() && VFSAsyncFile::checkInjectedError()) { err = err.asInjectedFault(); } diff --git a/fdbserver/VFSAsync.cpp b/fdbserver/VFSAsync.cpp index 9bde2dbc01..174bd425c4 100644 --- a/fdbserver/VFSAsync.cpp +++ b/fdbserver/VFSAsync.cpp @@ -61,7 +61,7 @@ const uint32_t RESERVED_COUNT = 1U<<29; VFSAsyncFile::VFSAsyncFile(std::string const& filename, int flags) -: filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0), injectedError(false) { +: filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0) { filename_lockCount_openCount[filename].second++; } @@ -92,7 +92,7 @@ static int asyncRead(sqlite3_file *pFile, void *zBuf, int iAmt, sqlite_int64 iOf return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR_READ); } return SQLITE_IOERR_READ; } @@ -106,7 +106,7 @@ static int asyncReleaseZeroCopy(sqlite3_file* pFile, void* data, int iAmt, sqlit p->file->releaseZeroCopy( data, iAmt, iOfst ); } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR); } return SQLITE_IOERR; } @@ -131,7 +131,7 @@ static int asyncReadZeroCopy(sqlite3_file *pFile, void **data, int iAmt, sqlite_ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR_READ); } return SQLITE_IOERR_READ; } @@ -151,7 +151,7 @@ static int asyncReadZeroCopy(sqlite3_file *pFile, void **data, int iAmt, sqlite_ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + VFSAsyncFile::setInjectedError(SQLITE_IOERR_READ); } return SQLITE_IOERR_READ; } @@ -170,7 +170,7 @@ static int asyncWrite(sqlite3_file *pFile, const void *zBuf, int iAmt, sqlite_in return SQLITE_OK; } catch(Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR_WRITE); } return SQLITE_IOERR_WRITE; } @@ -189,7 +189,7 @@ static int asyncTruncate(sqlite3_file *pFile, sqlite_int64 size){ return SQLITE_OK; } catch(Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR_TRUNCATE); } return SQLITE_IOERR_TRUNCATE; } @@ -202,7 +202,7 @@ static int asyncSync(sqlite3_file *pFile, int flags){ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR_FSYNC); } TraceEvent("VFSSyncError") @@ -225,7 +225,7 @@ static int VFSAsyncFileSize(sqlite3_file *pFile, sqlite_int64 *pSize){ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR_FSTAT); } return SQLITE_IOERR_FSTAT; } @@ -548,7 +548,7 @@ static int asyncOpen( .detail("IAsyncFile", DEBUG_DETERMINISM ? 0 : (int64_t)p->file.getPtr());*/ } catch (Error& e) { if(e.isInjectedFault()) { - VFSAsyncFile::setOpenError(); + VFSAsyncFile::setInjectedError(SQLITE_CANTOPEN); } TraceEvent("SQLiteOpenFail").error(e).detail("Filename", p->filename); p->~VFSAsyncFile(); @@ -655,7 +655,7 @@ static int asyncFullPathname( return SQLITE_OK; } catch (Error& e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pVfs)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR); } TraceEvent(SevError,"VFSAsyncFullPathnameError").error(e).detail("PathIn", (std::string)zPath); return SQLITE_IOERR; @@ -726,7 +726,7 @@ static int asyncSleep(sqlite3_vfs *pVfs, int microseconds){ return microseconds; } catch( Error &e ) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pVfs)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_ERROR); } TraceEvent(SevError, "AsyncSleepError").error(e,true); return 0; diff --git a/fdbserver/VFSAsync.h b/fdbserver/VFSAsync.h index b67292b9f2..4b1a0ea9f1 100644 --- a/fdbserver/VFSAsync.h +++ b/fdbserver/VFSAsync.h @@ -22,25 +22,6 @@ #include #include #include "fdbrpc/IAsyncFile.h" -#include "fdbserver/CoroFlow.h" - -//#include -//#include - -//#ifdef WIN32 -//#include -//#endif - -#ifdef __unixish__ -//#include -//#include -//#include -//#include -//#include -//#include -//#include -//#include -#endif /* ** When using this VFS, the sqlite3_file* handles that SQLite uses are @@ -52,39 +33,44 @@ struct VFSAsyncFile { int flags; std::string filename; Reference file; - bool injectedError; - // Method to set the injectedError flag to indicate that an injected error has been caught. - // Mostly useful for debugging injected fault handling. - void setInjectedError() { - //TraceEvent(SevInfo, "VFSSetInjectedFault").backtrace().detail("This", (void *)this); - injectedError = true; - } - - bool consumeInjectedError() { - bool e = injectedError; - injectedError = false; - return e; - } - - // Static methods for capturing an injected open error and consuming it to convert SQLite - // errors into Error instances with isInjectedFault() set. + // The functions setInjectedError() and checkInjectedError() use an INetwork global to store the last + // return code from VFSAsyncFile method resulting from catching an injected Error exception. This allows + // callers of the SQLite API to determine if an error code returned appears to be due to an injected + // error in simulation. // - // Uses a g_network global so that injected errors on one simulated process do not mask - // non-injected errors on another. - static void setOpenError() { - g_network->setGlobal(INetwork::enSQLiteOpenError, (flowGlobalType)true); + // This scheme is not perfect, as it is possible for non-injected errors to occur after injected errors + // and be incorrectly recognized as injected. This problem already existed, however, as the previous scheme + // assumed that any SQLite error that occurred after any injected error in the simulated process was + // itself injected. + // + // Unfortunately, there is no easy or reliable way to plumb the injectedness of an error though the return + // path of VFSAsyncFile -> SQLite -> SQLite API calls made by KeyValueStoreSQLite. + // + // An attempt was made to store injected errors in VFSAsyncFile instances and expose a SQLiteDB's file + // instances via the SQLite API. This failed, however, because sometimes files are opened, encounter an + // error, and are closed within the lifetime of one SQLite API call so the caller never has an opportunity + // to access the VFSAsyncFile object or its injected error state. + // + // An attempt was also made to match SQLite API return codes to VFSAsyncFile injected error return codes on + // a 1:1 basis, only flagging a code as rejected if it matches the last injected error code and only once. + // This would have been more accurate (though coincidences could occur). This scheme also failed, however, + // because sometimes errors from SQLite APIs are temporarily ignored, relying on a subsequent API call to error, + // however this error could be different and would not have been produced directly by VFSAsyncFile. + // + static void setInjectedError(int64_t rc) { + g_network->setGlobal(INetwork::enSQLiteInjectedError, (flowGlobalType)rc); + TraceEvent("VFSSetInjectedError").detail("ErrorCode", rc).detail("NetworkPtr", (void *)g_network).backtrace(); } - static void clearOpenError() { - g_network->setGlobal(INetwork::enSQLiteOpenError, (flowGlobalType)false); - } - - static bool consumeInjectedOpenError() { - bool e = (bool)g_network->global(INetwork::enSQLiteOpenError); - if(e) { - clearOpenError(); - } + static bool checkInjectedError() { + // Error code is only checked for non-zero because the SQLite API error code after an injected error + // may not match the error code returned by VFSAsyncFile when the inject error occurred. + bool e = g_network->global(INetwork::enSQLiteInjectedError) != (flowGlobalType)0; + TraceEvent("VFSCheckInjectedError") + .detail("Found", e) + .detail("ErrorCode", (int64_t)g_network->global(INetwork::enSQLiteInjectedError)) + .backtrace(); return e; } diff --git a/fdbserver/sqlite/sqlite3.amalgamation.c b/fdbserver/sqlite/sqlite3.amalgamation.c index ff6cc2dafe..adbad64ea1 100644 --- a/fdbserver/sqlite/sqlite3.amalgamation.c +++ b/fdbserver/sqlite/sqlite3.amalgamation.c @@ -93791,16 +93791,6 @@ SQLITE_API int sqlite3_open_v2( return openDatabase(filename, ppDb, flags, zVfs); } -SQLITE_API void * sqlite3_get_vfs_db(sqlite3 *pDb) { - Pager *pPager = sqlite3BtreePager(pDb->aDb[0].pBt); - return (pPager != NULL) ? pPager->fd : NULL; -} - -SQLITE_API void * sqlite3_get_vfs_wal(sqlite3 *pDb) { - Pager *pPager = sqlite3BtreePager(pDb->aDb[0].pBt); - return ((pPager != NULL) && (pPager->pWal != NULL)) ? pPager->pWal->pWalFd : NULL; -} - #ifndef SQLITE_OMIT_UTF16 /* ** Open a new database handle. diff --git a/fdbserver/sqlite/sqlite3.h b/fdbserver/sqlite/sqlite3.h index d3d62419f0..fc33edfd73 100755 --- a/fdbserver/sqlite/sqlite3.h +++ b/fdbserver/sqlite/sqlite3.h @@ -2411,9 +2411,6 @@ SQLITE_API int sqlite3_open_v2( const char *zVfs /* Name of VFS module to use */ ); -SQLITE_API void * sqlite3_get_vfs_db(sqlite3 *pDb); -SQLITE_API void * sqlite3_get_vfs_wal(sqlite3 *pDb); - /* ** CAPI3REF: Error Codes And Messages ** diff --git a/flow/network.h b/flow/network.h index 157d851a63..3f98e44fa0 100644 --- a/flow/network.h +++ b/flow/network.h @@ -452,7 +452,7 @@ public: enBlobCredentialFiles = 10, enNetworkAddressesFunc = 11, enClientFailureMonitor = 12, - enSQLiteOpenError = 13 + enSQLiteInjectedError = 13 }; virtual void longTaskCheck( const char* name ) {} From 45f064c420e267a3ab284173a41d7ac197244eba Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Tue, 19 Jan 2021 16:49:48 +0000 Subject: [PATCH 180/317] Take keyRange by const reference --- fdbserver/storageserver.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 2ef506b69e..467decfd58 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -321,7 +321,7 @@ public: static const StringRef emptyString; static const KeyRangeRef emptyKeyRange; public: - void recordStart(const UID id, const KeyRange keyRange) { + void recordStart(const UID id, const KeyRange& keyRange) { startTimeMap[id] = now(); keyRangeMap[id] = keyRange; } From 5bc129a35f37e0b24fa9f02207e96553fbe83fdd Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Tue, 19 Jan 2021 13:33:15 -0800 Subject: [PATCH 181/317] Add a SevWarnAlways trace line to help debug a rare failure. --- fdbserver/storageserver.actor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 0f1fb7b6bc..2924fb090c 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -2360,6 +2360,7 @@ ACTOR Future fetchKeys( StorageServer *data, AddingShard* shard ) { if (debug_getRangeRetries >= 100) { data->cx->enableLocalityLoadBalance = false; // TODO: Add SevWarnAlways to say it was disabled. + TraceEvent(SevWarnAlways, "FKDisableLB"); } debug_getRangeRetries++; From 30962551d556e84a256b39113de110cb5ff8e0b0 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Tue, 19 Jan 2021 13:37:36 -0800 Subject: [PATCH 182/317] Also log when the LB is re-enabled. Attach the FetchKeysID. --- fdbserver/storageserver.actor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 2924fb090c..d421823e10 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -2360,7 +2360,7 @@ ACTOR Future fetchKeys( StorageServer *data, AddingShard* shard ) { if (debug_getRangeRetries >= 100) { data->cx->enableLocalityLoadBalance = false; // TODO: Add SevWarnAlways to say it was disabled. - TraceEvent(SevWarnAlways, "FKDisableLB"); + TraceEvent(SevWarnAlways, "FKDisableLB").detail("FKID", fetchKeysID); } debug_getRangeRetries++; @@ -2379,6 +2379,7 @@ ACTOR Future fetchKeys( StorageServer *data, AddingShard* shard ) { //FIXME: remove when we no longer support upgrades from 5.X data->cx->enableLocalityLoadBalance = true; + TraceEvent(SevWarnAlways, "FKReenableLB").detail("FKID", fetchKeysID); // We have completed the fetch and write of the data, now we wait for MVCC window to pass. // As we have finished this work, we will allow more work to start... From 4ddf3385a84c69c9b6262f5226d02cad153976c5 Mon Sep 17 00:00:00 2001 From: Kao Makino Date: Tue, 19 Jan 2021 17:13:27 -0800 Subject: [PATCH 183/317] Reserve the priority queue container --- flow/Knobs.cpp | 1 + flow/Knobs.h | 1 + flow/Net2.actor.cpp | 13 ++++++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index 28b7deb180..da722d2079 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -122,6 +122,7 @@ FlowKnobs::FlowKnobs(bool randomize, bool isSimulated) { init( SLOW_LOOP_SAMPLING_RATE, 0.1 ); init( TSC_YIELD_TIME, 1000000 ); init( CERT_FILE_MAX_SIZE, 5 * 1024 * 1024 ); + init( READY_QUEUE_RESERVED_SIZE, 8192 ); //Network init( PACKET_LIMIT, 100LL<<20 ); diff --git a/flow/Knobs.h b/flow/Knobs.h index 5dd746cc84..258ea28ea2 100644 --- a/flow/Knobs.h +++ b/flow/Knobs.h @@ -143,6 +143,7 @@ public: int64_t TSC_YIELD_TIME; int64_t REACTOR_FLAGS; int CERT_FILE_MAX_SIZE; + int READY_QUEUE_RESERVED_SIZE; //Network int64_t PACKET_LIMIT; diff --git a/flow/Net2.actor.cpp b/flow/Net2.actor.cpp index c77078dfcb..5ffa5f250b 100644 --- a/flow/Net2.actor.cpp +++ b/flow/Net2.actor.cpp @@ -111,6 +111,16 @@ struct OrderedTask { bool operator < (OrderedTask const& rhs) const { return priority < rhs.priority; } }; +template +class ReadyQueue : public std::priority_queue> +{ +public: + typedef typename std::priority_queue>::size_type size_type; + ReadyQueue(size_type capacity = 0) { reserve(capacity); }; + void reserve(size_type capacity) { this->c.reserve(capacity); } +}; + + thread_local INetwork* thread_network = 0; class Net2 sealed : public INetwork, public INetworkConnections { @@ -190,7 +200,7 @@ public: TaskPriority lastMinTaskID; - std::priority_queue> ready; + ReadyQueue ready; ThreadSafeQueue threadReady; struct DelayedTask : OrderedTask { @@ -843,6 +853,7 @@ Net2::Net2(const TLSConfig& tlsConfig, bool useThreadPool, bool useMetrics) reactor(this), stopped(false), tasksIssued(0), + ready(FLOW_KNOBS->READY_QUEUE_RESERVED_SIZE), // Until run() is called, yield() will always yield tsc_begin(0), tsc_end(0), taskBegin(0), currentTaskID(TaskPriority::DefaultYield), lastMinTaskID(TaskPriority::Zero), From 50f506f9a1af763591b68dc3731c98986eb63cee Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 20 Jan 2021 16:16:50 -0800 Subject: [PATCH 184/317] reduce read priority when durability lag is high --- fdbserver/Knobs.cpp | 6 ++++ fdbserver/Knobs.h | 11 +++++-- fdbserver/storageserver.actor.cpp | 50 ++++++++++++++++++++++++------- 3 files changed, 54 insertions(+), 13 deletions(-) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 8431be5149..89f30dec34 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -443,6 +443,12 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( STORAGE_DURABILITY_LAG_HARD_MAX, 2000e6 ); if( smallStorageTarget ) STORAGE_DURABILITY_LAG_HARD_MAX = 100e6; init( STORAGE_DURABILITY_LAG_SOFT_MAX, 200e6 ); if( smallStorageTarget ) STORAGE_DURABILITY_LAG_SOFT_MAX = 10e6; + //FIXME: Low priority reads are disabled by assigning very high knob values, reduce knobs for 7.0 + init( LOW_PRIORITY_STORAGE_QUEUE_BYTES_START, 775e8 ); if( smallStorageTarget ) LOW_PRIORITY_STORAGE_QUEUE_BYTES_START = 1750e3; + init( LOW_PRIORITY_STORAGE_QUEUE_BYTES_END, 760e6 ); if( smallStorageTarget ) LOW_PRIORITY_STORAGE_QUEUE_BYTES_END = 1500e3; + init( LOW_PRIORITY_DURABILITY_LAG_START, 275e8 ); if( smallStorageTarget ) LOW_PRIORITY_DURABILITY_LAG_START = 15e6; + init( LOW_PRIORITY_DURABILITY_LAG_END, 260e6 ); if( smallStorageTarget ) LOW_PRIORITY_DURABILITY_LAG_END = 10e6; + bool smallTlogTarget = randomize && BUGGIFY; init( TARGET_BYTES_PER_TLOG, 2400e6 ); if( smallTlogTarget ) TARGET_BYTES_PER_TLOG = 2000e3; init( SPRING_BYTES_TLOG, 400e6 ); if( smallTlogTarget ) SPRING_BYTES_TLOG = 200e3; diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 0a5168397d..4017948aed 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -379,6 +379,14 @@ public: int64_t SPRING_BYTES_STORAGE_SERVER; int64_t TARGET_BYTES_PER_STORAGE_SERVER_BATCH; int64_t SPRING_BYTES_STORAGE_SERVER_BATCH; + int64_t STORAGE_HARD_LIMIT_BYTES; + int64_t STORAGE_DURABILITY_LAG_HARD_MAX; + int64_t STORAGE_DURABILITY_LAG_SOFT_MAX; + + int64_t LOW_PRIORITY_STORAGE_QUEUE_BYTES_START; + int64_t LOW_PRIORITY_STORAGE_QUEUE_BYTES_END; + int64_t LOW_PRIORITY_DURABILITY_LAG_START; + int64_t LOW_PRIORITY_DURABILITY_LAG_END; int64_t TARGET_BYTES_PER_TLOG; int64_t SPRING_BYTES_TLOG; @@ -431,9 +439,6 @@ public: int FETCH_KEYS_PARALLELISM_BYTES; int FETCH_KEYS_LOWER_PRIORITY; int BUGGIFY_BLOCK_BYTES; - int64_t STORAGE_HARD_LIMIT_BYTES; - int64_t STORAGE_DURABILITY_LAG_HARD_MAX; - int64_t STORAGE_DURABILITY_LAG_SOFT_MAX; double STORAGE_DURABILITY_LAG_REJECT_THRESHOLD; double STORAGE_DURABILITY_LAG_MIN_RATE; int STORAGE_COMMIT_BYTES; diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 3b771bf3a8..2521fa6955 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -96,6 +96,16 @@ private: bool isClear; }; +ACTOR Future increasingPriorityDelay(Future change) { + choose { + when(wait(delay(0, TaskPriority::Low))){} + when(wait(change)) { + wait(delay(0, TaskPriority::DefaultEndpoint)); + } + } + return Void(); +} + struct AddingShard : NonCopyable { KeyRange keys; Future fetchClient; // holds FetchKeys() actor @@ -508,6 +518,7 @@ public: bool behind; bool versionBehind; + AsyncVar durabilityBehind; bool debug_inApplyUpdate; double debug_lastValidateTime; @@ -523,7 +534,7 @@ public: struct Counters { CounterCollection cc; - Counter allQueries, getKeyQueries, getValueQueries, getRangeQueries, finishedQueries, rowsQueried, bytesQueried, watchQueries, emptyQueries; + Counter allQueries, getKeyQueries, getValueQueries, getRangeQueries, finishedQueries, lowPriorityQueries, rowsQueried, bytesQueried, watchQueries, emptyQueries; Counter bytesInput, bytesDurable, bytesFetched, mutationBytes; // Like bytesInput but without MVCC accounting Counter sampledBytesCleared; @@ -543,6 +554,7 @@ public: getRangeQueries("GetRangeQueries", cc), allQueries("QueryQueue", cc), finishedQueries("FinishedQueries", cc), + lowPriorityQueries("LowPriorityQueries", cc), rowsQueried("RowsQueried", cc), bytesQueried("BytesQueried", cc), watchQueries("WatchQueries", cc), @@ -602,7 +614,7 @@ public: counters(this), tag(invalidTag), maxQueryQueue(0), thisServerID(ssi.id()), readQueueSizeMetric(LiteralStringRef("StorageServer.ReadQueueSize")), behind(false), versionBehind(false), byteSampleClears(false, LiteralStringRef("\xff\xff\xff")), noRecentUpdates(false), lastUpdate(now()), - poppedAllAfter(std::numeric_limits::max()), cpuUsage(0.0), diskUsage(0.0) { + poppedAllAfter(std::numeric_limits::max()), cpuUsage(0.0), diskUsage(0.0), durabilityBehind(false) { version.initMetric(LiteralStringRef("StorageServer.Version"), counters.cc.id); oldestVersion.initMetric(LiteralStringRef("StorageServer.OldestVersion"), counters.cc.id); durableVersion.initMetric(LiteralStringRef("StorageServer.DurableVersion"), counters.cc.id); @@ -683,6 +695,27 @@ public: (currentRate() < 1e-6 ? 1e6 : 1.0 / currentRate())); } + bool checkDurabilityBehind() { + if(durabilityBehind.get()) { + durabilityBehind.set( + version.get() - durableVersion.get() > SERVER_KNOBS->LOW_PRIORITY_DURABILITY_LAG_END || + queueSize() > SERVER_KNOBS->LOW_PRIORITY_STORAGE_QUEUE_BYTES_END); + } else { + durabilityBehind.set( + version.get() - durableVersion.get() > SERVER_KNOBS->LOW_PRIORITY_DURABILITY_LAG_START || + queueSize() > SERVER_KNOBS->LOW_PRIORITY_STORAGE_QUEUE_BYTES_START ); + } + return durabilityBehind.get(); + } + + Future getQueryDelay() { + if(checkDurabilityBehind()) { + counters.lowPriorityQueries++; + return increasingPriorityDelay(durabilityBehind.onChange()); + } + return delay(0, TaskPriority::DefaultEndpoint); + } + template using isLoadBalancedReply = std::is_base_of; @@ -894,7 +927,7 @@ ACTOR Future getValueQ( StorageServer* data, GetValueRequest req ) { // Active load balancing runs at a very high priority (to obtain accurate queue lengths) // so we need to downgrade here - wait( delay(0, TaskPriority::DefaultEndpoint) ); + wait( data->getQueryDelay() ); if( req.debugID.present() ) g_traceBatch.addEvent("GetValueDebug", req.debugID.get().first(), "getValueQ.DoRead"); //.detail("TaskID", g_network->getCurrentTask()); @@ -1396,14 +1429,11 @@ ACTOR Future getKeyValues( StorageServer* data, GetKeyValuesRequest req ) // Active load balancing runs at a very high priority (to obtain accurate queue lengths) // so we need to downgrade here - TaskPriority taskType = TaskPriority::DefaultEndpoint; if (SERVER_KNOBS->FETCH_KEYS_LOWER_PRIORITY && req.isFetchKeys) { - taskType = TaskPriority::FetchKeys; - // } else if (false) { - // // Placeholder for up-prioritizing fetches for important requests - // taskType = TaskPriority::DefaultDelay; + wait( delay(0, TaskPriority::FetchKeys) ); + } else { + wait( data->getQueryDelay() ); } - wait( delay(0, taskType) ); try { if( req.debugID.present() ) @@ -1523,7 +1553,7 @@ ACTOR Future getKey( StorageServer* data, GetKeyRequest req ) { // Active load balancing runs at a very high priority (to obtain accurate queue lengths) // so we need to downgrade here - wait( delay(0, TaskPriority::DefaultEndpoint) ); + wait( data->getQueryDelay() ); try { state Version version = wait( waitForVersion( data, req.version ) ); From 91653142892ac6f0332c8b39faad2d6c0a482271 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 20 Jan 2021 16:56:57 -0800 Subject: [PATCH 185/317] fixed compiler error --- fdbserver/storageserver.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 2521fa6955..d8ffeb6fac 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -710,7 +710,7 @@ public: Future getQueryDelay() { if(checkDurabilityBehind()) { - counters.lowPriorityQueries++; + ++counters.lowPriorityQueries; return increasingPriorityDelay(durabilityBehind.onChange()); } return delay(0, TaskPriority::DefaultEndpoint); From 58b4a9b907bf6f58dda1badef344a76509e1feac Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Thu, 21 Jan 2021 20:59:44 +0000 Subject: [PATCH 186/317] Resolve conflicts --- CMakeLists.txt | 6 - cmake/AddFdbTest.cmake | 25 - contrib/CMakeLists.txt | 3 - contrib/TestHarness/CMakeLists.txt | 4 - contrib/TestHarness/Program.cs.cmake | 1556 -------------------------- contrib/TraceLogHelper/JsonParser.cs | 8 - contrib/TraceLogHelper/XmlParser.cs | 4 - tests/CMakeLists.txt | 5 - 8 files changed, 1611 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ea0126815..81af95a68f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -167,12 +167,6 @@ add_subdirectory(tests) if(WITH_PYTHON) add_subdirectory(bindings) endif() -<<<<<<< HEAD -======= -add_subdirectory(fdbbackup) -add_subdirectory(contrib) -add_subdirectory(tests) ->>>>>>> upstream/release-6.2 if(WITH_DOCUMENTATION) add_subdirectory(documentation) endif() diff --git a/cmake/AddFdbTest.cmake b/cmake/AddFdbTest.cmake index 61c7721d04..1a831c5d0b 100644 --- a/cmake/AddFdbTest.cmake +++ b/cmake/AddFdbTest.cmake @@ -157,11 +157,7 @@ endif() # - OUT_DIR the directory where files will be staged # - CONTEXT the type of correctness package being built (e.g. 'valgrind correctness') function(stage_correctness_package) -<<<<<<< HEAD - set(oneValueArgs OUT_DIR CONTEXT) -======= set(oneValueArgs OUT_DIR CONTEXT OUT_FILES) ->>>>>>> upstream/release-6.2 cmake_parse_arguments(STAGE "" "${oneValueArgs}" "" "${ARGN}") file(MAKE_DIRECTORY ${STAGE_OUT_DIR}/bin) string(LENGTH "${CMAKE_SOURCE_DIR}/tests/" base_length) @@ -204,13 +200,10 @@ function(stage_correctness_package) endforeach() endforeach() list(APPEND package_files ${STAGE_OUT_DIR}/bin/fdbserver -<<<<<<< HEAD -======= ${STAGE_OUT_DIR}/bin/coverage.fdbserver.xml ${STAGE_OUT_DIR}/bin/coverage.fdbclient.xml ${STAGE_OUT_DIR}/bin/coverage.fdbrpc.xml ${STAGE_OUT_DIR}/bin/coverage.flow.xml ->>>>>>> upstream/release-6.2 ${STAGE_OUT_DIR}/bin/TestHarness.exe ${STAGE_OUT_DIR}/bin/TraceLogHelper.dll ${STAGE_OUT_DIR}/CMakeCache.txt @@ -219,37 +212,27 @@ function(stage_correctness_package) OUTPUT ${package_files} DEPENDS ${CMAKE_BINARY_DIR}/CMakeCache.txt ${CMAKE_BINARY_DIR}/packages/bin/fdbserver -<<<<<<< HEAD -======= ${CMAKE_BINARY_DIR}/bin/coverage.fdbserver.xml ${CMAKE_BINARY_DIR}/lib/coverage.fdbclient.xml ${CMAKE_BINARY_DIR}/lib/coverage.fdbrpc.xml ${CMAKE_BINARY_DIR}/lib/coverage.flow.xml ->>>>>>> upstream/release-6.2 ${CMAKE_BINARY_DIR}/packages/bin/TestHarness.exe ${CMAKE_BINARY_DIR}/packages/bin/TraceLogHelper.dll COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/CMakeCache.txt ${STAGE_OUT_DIR} COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/packages/bin/fdbserver -<<<<<<< HEAD -======= ${CMAKE_BINARY_DIR}/bin/coverage.fdbserver.xml ${CMAKE_BINARY_DIR}/lib/coverage.fdbclient.xml ${CMAKE_BINARY_DIR}/lib/coverage.fdbrpc.xml ${CMAKE_BINARY_DIR}/lib/coverage.flow.xml ->>>>>>> upstream/release-6.2 ${CMAKE_BINARY_DIR}/packages/bin/TestHarness.exe ${CMAKE_BINARY_DIR}/packages/bin/TraceLogHelper.dll ${STAGE_OUT_DIR}/bin COMMENT "Copying files for ${STAGE_CONTEXT} package" ) list(APPEND package_files ${test_files} ${external_files}) -<<<<<<< HEAD - set(package_files ${package_files} PARENT_SCOPE) -======= if(STAGE_OUT_FILES) set(${STAGE_OUT_FILES} ${package_files} PARENT_SCOPE) endif() ->>>>>>> upstream/release-6.2 endfunction() function(create_correctness_package) @@ -257,11 +240,7 @@ function(create_correctness_package) return() endif() set(out_dir "${CMAKE_BINARY_DIR}/correctness") -<<<<<<< HEAD - stage_correctness_package(OUT_DIR ${out_dir} CONTEXT "correctness") -======= stage_correctness_package(OUT_DIR ${out_dir} CONTEXT "correctness" OUT_FILES package_files) ->>>>>>> upstream/release-6.2 set(tar_file ${CMAKE_BINARY_DIR}/packages/correctness-${CMAKE_PROJECT_VERSION}.tar.gz) add_custom_command( OUTPUT ${tar_file} @@ -288,11 +267,7 @@ function(create_valgrind_correctness_package) endif() if(USE_VALGRIND) set(out_dir "${CMAKE_BINARY_DIR}/valgrind_correctness") -<<<<<<< HEAD - stage_correctness_package(OUT_DIR ${out_dir} CONTEXT "valgrind correctness") -======= stage_correctness_package(OUT_DIR ${out_dir} CONTEXT "valgrind correctness" OUT_FILES package_files) ->>>>>>> upstream/release-6.2 set(tar_file ${CMAKE_BINARY_DIR}/packages/valgrind-${CMAKE_PROJECT_VERSION}.tar.gz) add_custom_command( OUTPUT ${tar_file} diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index b874da5f7e..6bc891b854 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -1,8 +1,5 @@ if(NOT WIN32) -<<<<<<< HEAD add_subdirectory(monitoring) -======= ->>>>>>> upstream/release-6.2 add_subdirectory(TraceLogHelper) add_subdirectory(TestHarness) endif() diff --git a/contrib/TestHarness/CMakeLists.txt b/contrib/TestHarness/CMakeLists.txt index 77173d0a7f..4eecd82e04 100644 --- a/contrib/TestHarness/CMakeLists.txt +++ b/contrib/TestHarness/CMakeLists.txt @@ -3,11 +3,7 @@ set(SRCS Properties/AssemblyInfo.cs) set(TEST_HARNESS_REFERENCES -<<<<<<< HEAD - "-r:System,System.Core,System.Xml.Linq,System.Data.DataSetExtensions,Microsoft.CSharp,System.Data,System.Xml,${TraceLogHelperDll}") -======= "-r:System,System.Core,System.Xml.Linq,System.Data.DataSetExtensions,Microsoft.CSharp,System.Data,System.Xml,System.Runtime.Serialization,${TraceLogHelperDll}") ->>>>>>> upstream/release-6.2 set(out_file ${CMAKE_BINARY_DIR}/packages/bin/TestHarness.exe) diff --git a/contrib/TestHarness/Program.cs.cmake b/contrib/TestHarness/Program.cs.cmake index 2a9b9653e5..69fdd9bb36 100644 --- a/contrib/TestHarness/Program.cs.cmake +++ b/contrib/TestHarness/Program.cs.cmake @@ -1,1558 +1,3 @@ -<<<<<<< HEAD -/* - * Program.cs - * - * This source file is part of the FoundationDB open source project - * - * Copyright 2013-2020 Apple Inc. and the FoundationDB project authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using System.Xml.Linq; -using System.IO; -using System.Diagnostics; -using System.ComponentModel; -using System.Runtime.InteropServices; -using System.Xml; - -namespace SummarizeTest -{ - static class Program - { - static Random random; - const int killSeconds = 60 * 30; - const int maxWarnings = 10; - const int maxStderrBytes = 1000; - const double unseedRatio = 0.05; - const double buggifyOnRatio = 0.8; - static string BINARY = "fdbserver" + (IsRunningOnMono() ? "" : ".exe"); - static string PLUGIN = "FDBLibTLS." + (IsRunningOnMono() ? "so" : "dll"); - static string OS_NAME = IsRunningOnMono() ? "linux" : "win"; - - static int Main(string[] args) - { - bool traceToStdout = false; - try - { - byte[] seed = new byte[4]; - new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(seed); - random = new Random(new BinaryReader(new MemoryStream(seed)).ReadInt32()); - - if (args.Length < 1) - return UsageMessage(); - - if (args[0] == "summarize") - { - if (args.Length < 3) - return UsageMessage(); - string valgrindFileName = args.Length >= 4 ? args[3] : null; - string externalError = args.Length >= 5 ? args[4] : ""; - traceToStdout = args.Length == 6 && args[5] == "true"; - - int unseed; - bool retryableError; - //SOMEDAY: This only works if a run generated just one trace file. We should change the summarize command to take multiple trace files - return Summarize(new string[]{ args[1] }, args[2], null, null, null, null, null, null, valgrindFileName, -1, out unseed, out retryableError, true, - traceToStdout: traceToStdout, externalError: externalError); - } - else if (args[0] == "remote") - { - if (args.Length < 6) - return UsageMessage(); - - return Remote(args[1], args[2], double.Parse(args[3]), int.Parse(args[4]), args[5], args.Length == 7 ? args[6] : "default"); - } - else if (args[0] == "run") - { - try - { - if (args.Length < 6) - return UsageMessage(); - - string runDir = null; - if(args[1] != "temp") runDir = args[1]; - - bool useValgind = args.Length > 6 && args[6].ToLower() == "true"; - int maxTries = (args.Length > 7) ? int.Parse(args[7]) : 3; - return Run(args[2], args[3], args[4], args[5], null, runDir, null, useValgind, maxTries); - } - catch(Exception e) - { - var xout = new XElement("TestHarnessError", - new XAttribute("Severity", (int)Magnesium.Severity.SevError), - new XAttribute("ErrorMessage", e.Message)); - - AppendXmlMessageToSummary(args[5], xout); - throw; - } - } - else if (args[0] == "replay") - { - if (args.Length != 6) - return UsageMessage(); - - string runDir = null; - if (args[1] != "temp") runDir = args[1]; - - return Replay(args[2], args[3], args[4], args[5], runDir); - } - else if (args[0] == "auto") - { - if (args.Length < 4) - return UsageMessage(); - - string runDir = null; - if (args[1] != "temp") runDir = args[1]; - - string cacheDir = Path.Combine(runDir, "test_harness_cache"); - bool useValgrind = args.Length > 4 && args[4].ToLower() == "true"; - int maxTries = (args.Length > 5) ? int.Parse(args[5]) : 3; - - return Auto(args[2], Path.Combine(runDir, "runs"), args[3], cacheDir, useValgrind, maxTries); - } - else if (args[0] == "extract-errors") - { - if (args.Length != 3) - return UsageMessage(); - - return ExtractErrors(args[1], args[2]); - } - else if (args[0] == "joshua-run") - { - traceToStdout = true; - - try - { - string oldBinaryFolder = (args.Length > 1) ? args[1] : Path.Combine("/opt", "joshua", "global_data", "oldBinaries"); - bool useValgrind = args.Length > 2 && args[2].ToLower() == "true"; - int maxTries = (args.Length > 3) ? int.Parse(args[3]) : 3; - return Run(Path.Combine("bin", BINARY), "", "tests", "summary.xml", "error.xml", "tmp", oldBinaryFolder, useValgrind, maxTries, true, Path.Combine("/app", "deploy", "runtime", ".tls_5_1", PLUGIN)); - } - catch(Exception e) - { - var xout = new XElement("TestHarnessError", - new XAttribute("Severity", (int)Magnesium.Severity.SevError), - new XAttribute("ErrorMessage", e.ToString())); - - AppendXmlMessageToSummary("summary.xml", xout, true); - throw; - } - } - else if (args[0] == "version") - { - return VersionInfo(); - } - - return UsageMessage(); - } - catch (Exception e) - { - if (!traceToStdout) - { - Console.WriteLine("Error:"); - Console.WriteLine(e.ToString()); - } - - return 100; - } - } - - static T Choice(this Random random, IList items) - { - return items[ random.Next(items.Count) ]; - } - - static bool IsRunningOnMono() - { - return Type.GetType("Mono.Runtime") != null; - } - - static int Replay(string fdbserverName, string tlsPluginFile, string inputSummaryFileName, string outputSummaryFileName, string runDir) - { - using (var summaryFileIn = System.IO.File.Open(inputSummaryFileName, - System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite | System.IO.FileShare.Delete)) - { - foreach (var test in Magnesium.XmlParser.Parse(summaryFileIn, inputSummaryFileName).OfType()) - { - if (test is Magnesium.Test) continue; // Only process the test plans - int unseed; - bool retryableError; - RunTest(fdbserverName, tlsPluginFile, outputSummaryFileName, null, test.randomSeed, test.Buggify, test.TestFile, runDir, test.TestUID, -1, out unseed, out retryableError, true, false); - } - } - return 0; - } - - // Ver format - x.x.x (eg, 5.0.1, 4.2.11) - // Returns true is ver1 is greater than or equal to ver2 - static bool versionGreaterThanOrEqual(string ver1, string ver2) - { - string[] tokens1 = ver1.Split('.'); - string[] tokens2 = ver2.Split('.'); - if (tokens1.Length != tokens2.Length || tokens2.Length != 3) - { - throw new ArgumentException("Invalid Version Format Version1: " + ver1 + " Version2: " + ver2); - } - int[] version1 = Array.ConvertAll(tokens1, int.Parse); - int[] version2 = Array.ConvertAll(tokens2, int.Parse); - return ((System.Collections.IStructuralComparable)version1).CompareTo(version2, System.Collections.Generic.Comparer.Default) >= 0; - } - - static bool versionLessThan(string ver1, string ver2) { - return !versionGreaterThanOrEqual(ver1, ver2); - } - - static string getFdbserverVersion(string fdbserverName) { - using (var process = new System.Diagnostics.Process()) - { - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.FileName = fdbserverName; - process.StartInfo.Arguments = "--version"; - process.StartInfo.RedirectStandardError = true; - - process.Start(); - var output = process.StandardOutput.ReadToEnd(); - // If the process finished successfully, we call the parameterless WaitForExit to ensure that output buffers get flushed - process.WaitForExit(); - - var match = Regex.Match(output, @"v(\d+\.\d+\.\d+)"); - if (match.Groups.Count < 1) return ""; - return match.Groups[1].Value; - } - } - - static int Run(string fdbserverName, string tlsPluginFile, string testFolder, string summaryFileName, string errorFileName, string runDir, string oldBinaryFolder, bool useValgrind, int maxTries, bool traceToStdout = false, string tlsPluginFile_5_1 = "") - { - int seed = random.Next(1000000000); - bool buggify = random.NextDouble() < buggifyOnRatio; - string testFile = null; - string testDir = ""; - string oldServerName = ""; - - if (Directory.Exists(testFolder)) - { - int poolSize = 0; - if( Directory.Exists(Path.Combine(testFolder, "rare")) ) poolSize += 1; - if( Directory.Exists(Path.Combine(testFolder, "slow")) ) poolSize += 5; - if( Directory.Exists(Path.Combine(testFolder, "fast")) ) poolSize += 14; - if( Directory.Exists(Path.Combine(testFolder, "restarting")) ) poolSize += 1; - - if( poolSize == 0 ) { - Console.WriteLine("Passed folder ({0}) did not have a fast, slow, rare, or restarting sub-folder", testFolder); - return 1; - } - int selection = random.Next(poolSize); - int selectionWindow = 0; - - if( Directory.Exists(Path.Combine(testFolder, "rare")) ) selectionWindow += 1; - if (selection < selectionWindow) - testDir = Path.Combine(testFolder, "rare"); - else - { - if (Directory.Exists(Path.Combine(testFolder, "restarting"))) selectionWindow += 1; - if (selection < selectionWindow) - testDir = Path.Combine(testFolder, "restarting"); - else - { - if (Directory.Exists(Path.Combine(testFolder, "slow"))) selectionWindow += 5; - if (selection < selectionWindow) - testDir = Path.Combine(testFolder, "slow"); - else - testDir = Path.Combine(testFolder, "fast"); - } - } - string[] files = Directory.GetFiles(testDir, "*", SearchOption.AllDirectories); - string[] uniqueFiles; - if (testDir.EndsWith("restarting")) - { - ISet uniqueFileSet = new HashSet(); - foreach(string file in files) { - uniqueFileSet.Add(file.Substring(0, file.LastIndexOf("-"))); // all restarting tests end with -1.txt or -2.txt - } - uniqueFiles = uniqueFileSet.ToArray(); - testFile = random.Choice(uniqueFiles); - string oldBinaryVersionLowerBound = "0.0.0"; - string lastFolderName = Path.GetFileName(Path.GetDirectoryName(testFile)); - if (lastFolderName.Contains("from_") || lastFolderName.Contains("to_")) // Only perform upgrade/downgrade tests from certain versions - { - oldBinaryVersionLowerBound = lastFolderName.Split('_').Last(); - } - string oldBinaryVersionUpperBound = getFdbserverVersion(fdbserverName); - string[] currentBinary = { fdbserverName }; - IEnumerable oldBinaries = Array.FindAll( - Directory.GetFiles(oldBinaryFolder), - x => versionGreaterThanOrEqual(Path.GetFileName(x).Split('-').Last(), oldBinaryVersionLowerBound) - && versionLessThan(Path.GetFileName(x).Split('-').Last(), oldBinaryVersionUpperBound)); - oldBinaries = oldBinaries.Concat(currentBinary); - oldServerName = random.Choice(oldBinaries.ToList()); - } - else - { - uniqueFiles = Directory.GetFiles(testDir); - testFile = random.Choice(uniqueFiles); - } - } - else if (File.Exists(testFolder)) - testFile = testFolder; - else - { - Console.WriteLine("Passed path ({0}) was not a folder or file", testFolder); - return 1; - } - - int result = 0; - bool unseedCheck = random.NextDouble() < unseedRatio; - for (int i = 0; i < maxTries; ++i) - { - bool logOnRetryableError = i == maxTries - 1; - bool retryableError = false; - - if (testDir.EndsWith("restarting")) - { - bool isDowngrade = Path.GetFileName(Path.GetDirectoryName(testFile)).Contains("to_"); - string firstServerName = isDowngrade ? fdbserverName : oldServerName; - string secondServerName = isDowngrade ? oldServerName : fdbserverName; - int expectedUnseed = -1; - int unseed; - string uid = Guid.NewGuid().ToString(); - bool useNewPlugin = (oldServerName == fdbserverName) || versionGreaterThanOrEqual(oldServerName.Split('-').Last(), "5.2.0"); - result = RunTest(firstServerName, useNewPlugin ? tlsPluginFile : tlsPluginFile_5_1, summaryFileName, errorFileName, seed, buggify, testFile + "-1.txt", runDir, uid, expectedUnseed, out unseed, out retryableError, logOnRetryableError, useValgrind, false, true, oldServerName, traceToStdout); - if (result == 0) - { - result = RunTest(secondServerName, tlsPluginFile, summaryFileName, errorFileName, seed+1, buggify, testFile + "-2.txt", runDir, uid, expectedUnseed, out unseed, out retryableError, logOnRetryableError, useValgrind, true, false, oldServerName, traceToStdout); - } - } - else - { - int expectedUnseed = -1; - if (!useValgrind && unseedCheck) - { - result = RunTest(fdbserverName, tlsPluginFile, null, null, seed, buggify, testFile, runDir, Guid.NewGuid().ToString(), -1, out expectedUnseed, out retryableError, logOnRetryableError, false, false, false, "", traceToStdout); - } - - if (!retryableError) - { - int unseed; - result = RunTest(fdbserverName, tlsPluginFile, summaryFileName, errorFileName, seed, buggify, testFile, runDir, Guid.NewGuid().ToString(), expectedUnseed, out unseed, out retryableError, logOnRetryableError, useValgrind, false, false, "", traceToStdout); - } - } - - if (!retryableError) - { - return result; - } - } - - return result; - } - - private static int RunTest(string fdbserverName, string tlsPluginFile, string summaryFileName, string errorFileName, int seed, - bool buggify, string testFile, string runDir, string uid, int expectedUnseed, out int unseed, out bool retryableError, bool logOnRetryableError, bool useValgrind, bool restarting = false, - bool willRestart = false, string oldBinaryName = "", bool traceToStdout = false) - { - unseed = -1; - - retryableError = false; - string tempPath = Path.Combine(runDir != null ? Path.GetFullPath(runDir) : Path.GetTempPath(), uid); - string oldDir = Directory.GetCurrentDirectory(); - - try - { - fdbserverName = Path.GetFullPath(fdbserverName); - tlsPluginFile = (tlsPluginFile.Length > 0) ? Path.GetFullPath(tlsPluginFile) : ""; - testFile = Path.GetFullPath(testFile); - var ok = 0; - - if (summaryFileName != null) - summaryFileName = Path.GetFullPath(summaryFileName); - - Directory.CreateDirectory(tempPath); - Directory.SetCurrentDirectory(tempPath); - - if (!restarting) LogTestPlan(summaryFileName, testFile, seed, buggify, expectedUnseed != -1, uid, oldBinaryName); - - string valgrindOutputFile = null; - using (var process = new System.Diagnostics.Process()) - { - ErrorOutputListener errorListener = new ErrorOutputListener(); - process.StartInfo.UseShellExecute = false; - if (tlsPluginFile.Length > 0) { - process.StartInfo.EnvironmentVariables["FDB_TLS_PLUGIN"] = tlsPluginFile; - } - process.StartInfo.RedirectStandardOutput = true; - var args = ""; - if (willRestart && oldBinaryName.EndsWith("alpha6")) - { - args = string.Format("-Rs 1000000000 -r simulation {0} -s {1} -f \"{2}\" -b {3} --tls_plugin={4} --crash", - IsRunningOnMono() ? "" : "-q", seed, testFile, buggify ? "on" : "off", tlsPluginFile); - } - else - { - args = string.Format("-Rs 1GB -r simulation {0} -s {1} -f \"{2}\" -b {3} --tls_plugin={4} --crash", - IsRunningOnMono() ? "" : "-q", seed, testFile, buggify ? "on" : "off", tlsPluginFile); - } - if (restarting) args = args + " --restarting"; - if (useValgrind && !willRestart) - { - valgrindOutputFile = string.Format("valgrind-{0}.xml", seed); - process.StartInfo.FileName = "valgrind"; - // Add extra debug directory, if environment variables is defined - string valgrindDbgDir = System.Environment.GetEnvironmentVariable("FDB_VALGRIND_DBGPATH"); - process.StartInfo.Arguments = (string.IsNullOrEmpty(valgrindDbgDir)) ? "" : string.Format("--extra-debuginfo-path={0} ", valgrindDbgDir); - - process.StartInfo.Arguments += - string.Format("--xml=yes --xml-file={0} -q {1} {2}", valgrindOutputFile, fdbserverName, args); - } - else - { - process.StartInfo.FileName = fdbserverName; - process.StartInfo.Arguments = args; - } - process.StartInfo.RedirectStandardError = true; - process.ErrorDataReceived += new DataReceivedEventHandler(errorListener.handleData); - - if (!traceToStdout) - { - Console.WriteLine("Executing {0} {1} in {2} (buggify: {3}, valgrind: {4})", - process.StartInfo.FileName, process.StartInfo.Arguments, tempPath, - buggify ? "on" : "off", - useValgrind ? "on" : "off"); - } - - process.Start(); - - // SOMEDAY: Do we want to actually do anything with standard output or error? - // Using standarderror requires async read, see http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx - //process.StandardOutput.ReadToEnd(); - OutputCopier copier = new OutputCopier(process.StandardOutput); - Thread consoleThread = new Thread(new ThreadStart(copier.copyOutput)); - consoleThread.Start(); - - MemoryChecker memChecker = new MemoryChecker(process); - Thread memCheckThread = new Thread(new ThreadStart(memChecker.monitorMemory)); - memCheckThread.Start(); - - process.BeginErrorReadLine(); - - Stopwatch stopwatch = new Stopwatch(); - stopwatch.Start(); - - var ms = 1000 * killSeconds; - if (useValgrind) - ms *= 20; - bool killed = !process.WaitForExit(ms); // Wait "killSeconds" seconds here - - stopwatch.Stop(); - - if (!killed) - process.WaitForExit(); // If the process finished successfully, we call the parameterless WaitForExit to ensure that output buffers get flushed - else - { - // It seems that WaitForExit sometimes returns false well before the timeout has elapsed - // We won't report that as an error, but just in case the process didn't actually finish we attempt to - // kill it here - if (killed && ms - stopwatch.ElapsedMilliseconds > 10000) - killed = false; - - if (!traceToStdout) - { - Console.WriteLine("Warning: Killing process after {0} seconds...", killSeconds); - } - - try - { - process.Kill(); - } - catch (Exception e) - { - if (!traceToStdout) - { - Console.WriteLine("Warning: Process.Kill returned {0}", e); - } - } - - int waitSeconds = 60 * 2; - process.WaitForExit(1000 * waitSeconds); - if (!process.HasExited) - { - if(!traceToStdout) - { - Console.WriteLine("Warning: Unable to kill process after {0} seconds...", waitSeconds); - } - - var xout = new XElement("UnableToKillProcess", - new XAttribute("Severity", (int)Magnesium.Severity.SevWarnAlways)); - - AppendXmlMessageToSummary(summaryFileName, xout, traceToStdout, testFile, seed, buggify, expectedUnseed != -1, oldBinaryName); - return 104; - } - } - if (!traceToStdout) - { - Console.WriteLine("Exit code is {0}", process.ExitCode); - } - memCheckThread.Join(); - consoleThread.Join(); - - var traceFiles = Directory.GetFiles(tempPath, "trace*.xml"); - if (traceFiles.Length == 0) - { - if (!traceToStdout) - { - Console.WriteLine("Warning: No trace file was generated, summary will not be affected."); - } - - var xout = new XElement((useValgrind ? "NoTraceFileGeneratedLibPos" : "NoTraceFileGenerated"), - new XAttribute("Severity", (int)Magnesium.Severity.SevWarnAlways), - new XAttribute("Plugin", tlsPluginFile), - new XAttribute("MachineName", System.Environment.MachineName)); - - AppendXmlMessageToSummary(summaryFileName, xout, traceToStdout, testFile, seed, buggify, expectedUnseed != -1, oldBinaryName); - ok = useValgrind ? 0 : 103; - } - else - { - var result = Summarize(traceFiles, summaryFileName, errorFileName, killed, errorListener.Errors, - process.ExitCode, memChecker.MaxMem, uid, - valgrindOutputFile == null ? null : Path.Combine(tempPath, valgrindOutputFile), - expectedUnseed, out unseed, out retryableError, logOnRetryableError, willRestart, restarting, oldBinaryName, traceToStdout); - - if (result != 0) - { - ok = result; - } - } - - if (willRestart) foreach (var f in traceFiles) File.Delete(f); - - process.Close(); - } - if (!traceToStdout) - { - Console.WriteLine("Done (unseed {0})", unseed); - } - - return ok; - } - catch (Exception e) - { - if (!traceToStdout) - { - Console.WriteLine("Error in Run:"); - Console.WriteLine(e); - } - - var xout = new XElement("TestHarnessRunError", - new XAttribute("Severity", (int)Magnesium.Severity.SevError), - new XAttribute("ErrorMessage", e.Message)); - - AppendXmlMessageToSummary(summaryFileName, xout, traceToStdout, testFile, seed, buggify, expectedUnseed != -1, oldBinaryName); - return 101; - } - finally - { - Directory.SetCurrentDirectory(oldDir); - if (!willRestart) Directory.Delete(tempPath, true); - } - } - - class OutputCopier - { - private StreamReader reader; - - public OutputCopier(StreamReader streamReader) - { - this.reader = streamReader; - } - - public void copyOutput() - { - //Console.WriteLine(" Beginning console copy..."); - while (!reader.EndOfStream) - { - reader.ReadLine(); - //Console.WriteLine(" : " + s); - } - } - } - - private class ErrorOutputListener - { - public List Errors { get; set; } - int maxErrorLength; - int maxErrors; - - public ErrorOutputListener(int maxErrorLength = 100, int maxErrors = 10) - { - Errors = new List(); - this.maxErrorLength = maxErrorLength; - this.maxErrors = maxErrors; - } - - public bool hasError = false; - public void handleData(object sendingProcess, DataReceivedEventArgs errLine) - { - if(!String.IsNullOrEmpty(errLine.Data)) - { - hasError = true; - if(Errors.Count < maxErrors) - Errors.Add(errLine.Data.Substring(0, Math.Min(maxErrorLength, errLine.Data.Length))); - } - } - } - - class MemoryChecker - { - //private System.Diagnostics.Process process; - private long maxMem; - private Process process; - - public long MaxMem - { - get { return maxMem; } - set { maxMem = value; } - } - - public MemoryChecker(System.Diagnostics.Process process) - { - this.process = process; - this.maxMem = 0; - } - - public void monitorMemory() - { - while (true) - { - try - { - process.Refresh(); - if (process.HasExited) - return; - long mem = process.PrivateMemorySize64; - MaxMem = Math.Max(MaxMem, mem); - //Console.WriteLine(string.Format("Process used {0} bytes", MaxMem)); - Thread.Sleep(1000); - } - catch - { - return; - } - } - } - } - - static void LogTestPlan(string summaryFileName, string testFileName, int randomSeed, bool buggify, bool testDeterminism, string uid, string oldBinary="") - { - var xout = new XElement("TestPlan", - new XAttribute("TestUID", uid), - new XAttribute("RandomSeed", randomSeed), - new XAttribute("TestFile", testFileName), - new XAttribute("BuggifyEnabled", buggify ? "1" : "0"), - new XAttribute("DeterminismCheck", testDeterminism ? "1" : "0"), - new XAttribute("OldBinary", Path.GetFileName(oldBinary))); - AppendToSummary(summaryFileName, xout); - } - - // Parses the valgrind XML file and returns a list of "what" tags for each error. - // All errors for which the "kind" tag starts with "Leak" are ignored - static string[] ParseValgrindOutput(string valgrindOutputFileName, bool traceToStdout) - { - if (!traceToStdout) - { - Console.WriteLine("Reading vXML file: " + valgrindOutputFileName); - } - - ISet whats = new HashSet(); - XElement xdoc = XDocument.Load(valgrindOutputFileName).Element("valgrindoutput"); - foreach(var elem in xdoc.Elements()) { - if (elem.Name != "error") - continue; - string kind = elem.Element("kind").Value; - if(kind.StartsWith("Leak")) - continue; - whats.Add(elem.Element("what").Value); - } - return whats.ToArray(); - } - - static int Summarize(string[] traceFiles, string summaryFileName, - string errorFileName, bool? killed, List outputErrors, int? exitCode, long? peakMemory, - string uid, string valgrindOutputFileName, int expectedUnseed, out int unseed, out bool retryableError, bool logOnRetryableError, - bool willRestart = false, bool restarted = false, string oldBinaryName = "", bool traceToStdout = false, string externalError = "") - { - unseed = -1; - retryableError = false; - List errorList = new List(); - var xout = new XElement("Test"); - if (uid != null) - xout.Add(new XAttribute("TestUID", uid)); - bool ok = false; - string testFile = "Unknown"; - int testsPassed = 0, testCount = -1, warnings = 0, errors = 0; - bool testBeginFound = false, testEndFound = false, error = false; - string firstRetryableError = ""; - int stderrSeverity = (int)Magnesium.Severity.SevError; - - Dictionary, Magnesium.Severity> severityMap = new Dictionary, Magnesium.Severity>(); - Dictionary, bool> codeCoverage = new Dictionary, bool>(); - - foreach (var traceFileName in traceFiles) - { - if(!traceToStdout) { - Console.WriteLine("Summarizing {0}", traceFileName); - } - using (var traceFile = System.IO.File.Open(traceFileName, - System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite | System.IO.FileShare.Delete)) - { - try - { - foreach (var ev in Magnesium.XmlParser.Parse(traceFile, traceFileName)) - { - Magnesium.Severity newSeverity; - if (severityMap.TryGetValue(new KeyValuePair(ev.Type, ev.Severity), out newSeverity)) - ev.Severity = newSeverity; - if (ev.Severity >= Magnesium.Severity.SevWarnAlways && ev.DDetails.ContainsKey("ErrorIsInjectedFault")) - ev.Severity = Magnesium.Severity.SevWarn; - - if (ev.Type == "ProgramStart" && !testBeginFound - // Just in case the first ProgramStart seen is a Simulated one, ignore it - && (!ev.DDetails.ContainsKey("Simulated") || ev.Details.Simulated != "1")) - { - xout.Add( - new XAttribute("RandomSeed", ev.Details.RandomSeed), - new XAttribute("SourceVersion", ev.Details.SourceVersion), - new XAttribute("Time", ev.Details.ActualTime), - new XAttribute("BuggifyEnabled", ev.Details.BuggifyEnabled), - new XAttribute("DeterminismCheck", expectedUnseed != -1 ? "1" : "0"), - new XAttribute("OldBinary", Path.GetFileName(oldBinaryName))); - testBeginFound = true; - } - if (ev.Type == "Simulation") - { - xout.Add( - new XAttribute("TestFile", ev.Details.TestFile)); - testFile = ev.Details.TestFile.Substring(ev.Details.TestFile.IndexOf("tests")); - } - if (ev.Type == "ActualRun") - { - xout.Add( - new XAttribute("TestFile", ev.Details.RunID)); - } - if (ev.Type == "ElapsedTime" && !testEndFound) - { - testEndFound = true; - unseed = int.Parse(ev.Details.RandomUnseed); - if (expectedUnseed != -1 && expectedUnseed != unseed) - { - Magnesium.Severity severity; - if (!severityMap.TryGetValue(new KeyValuePair("UnseedMismatch", Magnesium.Severity.SevError), out severity)) - severity = Magnesium.Severity.SevError; - - if (severity >= Magnesium.Severity.SevWarnAlways) - { - xout.Add(new XElement("UnseedMismatch", - new XAttribute("Unseed", unseed), - new XAttribute("ExpectedUnseed", expectedUnseed), - new XAttribute("Severity", (int)severity))); - if ( severity == Magnesium.Severity.SevError ) { - error = true; - errorList.Add("UnseedMismatch"); - } - } - } - xout.Add( - new XAttribute("SimElapsedTime", ev.Details.SimTime), - new XAttribute("RealElapsedTime", ev.Details.RealTime), - new XAttribute("RandomUnseed", ev.Details.RandomUnseed)); - } - if (ev.Severity == Magnesium.Severity.SevWarnAlways) - { - if (warnings < maxWarnings) - { - xout.Add(new XElement(ev.Type, - new XAttribute("Severity", (int)ev.Severity), - ev.DDetails - //.Where(kv => true) - .Select(kv => new XAttribute(kv.Key, kv.Value)))); - } - warnings++; - } - if (ev.Severity >= Magnesium.Severity.SevError) - { - string errorString = ev.FormatTestError(true); - if (errorString.Contains("platform_error")) - { - if (!retryableError) - { - firstRetryableError = errorString; - } - retryableError = true; - } - if (errors < maxWarnings) - { - xout.Add(new XElement(ev.Type, - new XAttribute("Severity", (int)ev.Severity), - ev.DDetails - //.Where(kv => true) - .Select(kv => new XAttribute(kv.Key, kv.Value)))); - errorList.Add(errorString); - } - errors++; - error = true; - } - if (ev.Type == "CodeCoverage" && !willRestart) - { - bool covered = true; - if(ev.DDetails.ContainsKey("Covered")) - { - covered = int.Parse(ev.Details.Covered) != 0; - } - - var key = new Tuple(ev.Details.File, ev.Details.Line); - if (covered || !codeCoverage.ContainsKey(key)) - { - codeCoverage[key] = covered; - } - } - if (ev.Type == "FaultInjected" || (ev.Type == "BuggifySection" && ev.Details.Activated == "1")) - { - xout.Add(new XElement(ev.Type, new XAttribute("File", ev.Details.File), new XAttribute("Line", ev.Details.Line))); - } - if (ev.Type == "TestsExpectedToPass") - testCount = int.Parse(ev.Details.Count); - if (ev.Type == "TestResults" && ev.Details.Passed == "1") - testsPassed++; - if (ev.Type == "RemapEventSeverity") - severityMap[new KeyValuePair(ev.Details.TargetEvent, (Magnesium.Severity)int.Parse(ev.Details.OriginalSeverity))] = (Magnesium.Severity)int.Parse(ev.Details.NewSeverity); - if (ev.Type == "StderrSeverity") - stderrSeverity = int.Parse(ev.Details.NewSeverity); - } - - } - catch (Exception e) - { - if (!traceToStdout) - { - Console.WriteLine("Error summarizing {0}: {1}", traceFileName, e); - } - - error = true; - xout.Add(new XElement("SummarizationError", - new XAttribute("Severity", (int)Magnesium.Severity.SevError), - new XAttribute("ErrorMessage", e.Message))); - errorList.Add("SummarizationError " + e.Message); - break; - } - } - } - - if (externalError.Length > 0) { - xout.Add(new XElement(externalError, new XAttribute("Severity", (int)Magnesium.Severity.SevError))); - } - - foreach(var kv in codeCoverage) - { - var element = new XElement("CodeCoverage", new XAttribute("File", kv.Key.Item1), new XAttribute("Line", kv.Key.Item2)); - if(!kv.Value) - { - element.Add(new XAttribute("Covered", "0")); - } - - xout.Add(element); - } - - if (warnings > maxWarnings) - { - //error = true; - xout.Add(new XElement("WarningLimitExceeded", - new XAttribute("Severity", (int)Magnesium.Severity.SevWarnAlways), - new XAttribute("WarningCount", warnings))); - } - if (errors > maxWarnings) - { - error = true; - xout.Add(new XElement("ErrorLimitExceeded", - new XAttribute("Severity", (int)Magnesium.Severity.SevError), - new XAttribute("ErrorCount", errors))); - errorList.Add("ErrorLimitExceeded"); - } - if (killed == true) - { - if (!retryableError) - { - firstRetryableError = "ExternalTimeout"; - } - - retryableError = true; - error = true; - xout.Add(new XElement("ExternalTimeout", new XAttribute("Severity", (int)Magnesium.Severity.SevError))); - } - if (outputErrors != null) - { - int stderrBytes = 0; - foreach (string err in outputErrors) - { - if (stderrSeverity == (int)Magnesium.Severity.SevError) - { - error = true; - } - - int remainingBytes = maxStderrBytes - stderrBytes; - if (remainingBytes > 0) - { - string outErr = (err.Length > remainingBytes) ? err.Substring(remainingBytes) + "..." : err; - - xout.Add(new XElement("StdErrOutput", - new XAttribute("Severity", stderrSeverity), - new XAttribute("Output", outErr))); - } - - stderrBytes += err.Length; - } - - if (stderrBytes > maxStderrBytes) - { - xout.Add(new XElement("StdErrOutputTruncated", - new XAttribute("Severity", stderrSeverity), - new XAttribute("BytesRemaining", stderrBytes - maxStderrBytes))); - } - } - if (exitCode.HasValue && exitCode != 0) - { - error = true; - xout.Add(new XElement("ExitCode", new XAttribute("Code", exitCode.Value), new XAttribute("Severity", (int)Magnesium.Severity.SevError))); - errorList.Add(string.Format("ExitCode 0x{0:x}", exitCode.Value)); - } - if (!testEndFound && !willRestart) - { - // We didn't terminate the test, but it didn't reach the end? - error = true; - xout.Add(new XElement("TestUnexpectedlyNotFinished"), new XAttribute("Severity", (int)Magnesium.Severity.SevError)); - errorList.Add("TestUnexpectedlyNotFinished"); - } - ok = testsPassed == testCount && testsPassed > 0 && !error; - xout.Add( - new XAttribute("Passed", testsPassed), - new XAttribute("Failed", testCount - testsPassed)); - if (peakMemory.HasValue) - xout.Add(new XAttribute("PeakMemory", peakMemory.Value)); - - if (valgrindOutputFileName != null && valgrindOutputFileName.Length > 0) - { - try - { - // If there are any errors reported "ok" will be set to false - var whats = ParseValgrindOutput(valgrindOutputFileName, traceToStdout); - foreach (var what in whats) - { - xout.Add(new XElement("ValgrindError", - new XAttribute("Severity", (int)Magnesium.Severity.SevError), - new XAttribute("What", what))); - ok = false; - error = true; - } - } - catch (Exception e) - { - if (!traceToStdout) - { - Console.WriteLine(e); - } - - error = true; - xout.Add(new XElement("ValgrindParseError", - new XAttribute("Severity", (int)Magnesium.Severity.SevError), - new XAttribute("ErrorMessage", e.Message))); - errorList.Add("Failed to parse valgrind output: " + e.Message); - } - } - - if (retryableError && !logOnRetryableError) - { - xout = new XElement("Test", xout.Attributes()); - xout.Add(new XElement("RetryingError", - new XAttribute("Severity", (int)Magnesium.Severity.SevWarnAlways), - new XAttribute("What", firstRetryableError))); - } - else - { - xout.Add(new XAttribute("OK", ok || willRestart)); - } - - AppendToSummary(summaryFileName, xout, traceToStdout); - - if ((!retryableError || logOnRetryableError) && errorFileName != null && (errorList.Count > 0 || !ok) && !willRestart) - { - var errorText = string.Join("\n\t", errorList - .Concat((!ok && errorList.Count == 0) ? new string[] { "Failed with no explanation" } : new string[] { }) - .Distinct() - .ToArray()); - AppendToFile(errorFileName, string.Format("Test {0} failed with:\n\t{1}\n", testFile, errorText)); - } - if (!error) { - return 0; - } - else { - return 102; - } - } - - static int ExtractErrors(string summaryFileName, string errorSummaryFileName) - { - Console.WriteLine("Extracting from {0}", summaryFileName); - List xout = new List(); - var coverage = new Dictionary,Tuple>(); - using (var traceFile = System.IO.File.Open(summaryFileName, - System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite | System.IO.FileShare.Delete)) - { - try - { - var events = Magnesium.XmlParser.Parse(traceFile, summaryFileName, true); - events = Magnesium.TraceLogUtil.IdentifyFailedTestPlans(events); - foreach (var ev in events) - { - Magnesium.Test t = ev as Magnesium.Test; - if (t != null) - { - foreach (var tev in t.events) - { - if (tev.Type == "CodeCoverage" || tev.Type == "FaultInjected") - { - var keyTuple = Tuple.Create(tev.Details.File, int.Parse(tev.Details.Line)); - if (coverage.ContainsKey(keyTuple)) - { - var old = coverage[keyTuple]; - coverage[keyTuple] = Tuple.Create(old.Item1 + 1, old.Item2 + (t.ok ? 0 : 1)); - } - else - { - coverage[keyTuple] = Tuple.Create(1, (t.ok ? 0 : 1)); - } - } - } - if (!t.ok) - { - if (t.original != null) - { - foreach (var c in t.original.Elements("CodeCoverage")) - c.Remove(); - foreach (var f in t.original.Elements("FaultInjected")) - f.Remove(); - - xout.Add(t.original); - } - else - { - xout.Add(new XElement("Test", - new XAttribute("Type", t.Type), - new XAttribute("Time", t.Time), - new XAttribute("Machine", t.Machine), - new XAttribute("TestUID", t.TestUID), - new XAttribute("TestFile", t.TestFile), - new XAttribute("randomSeed", t.randomSeed), - new XAttribute("Buggify", t.Buggify), - new XAttribute("DeterminismCheck", t.DeterminismCheck), - new XAttribute("OldBinary", t.OldBinary), - new XElement("TestNotSummarized", - new XAttribute("Severity", (int)Magnesium.Severity.SevWarnAlways) - ) - ) - ); - } - } - } - } - } - catch (Exception e) - { - Console.WriteLine("Error summarizing {0}: {1}", summaryFileName, e); - xout.Add(new XElement("SummarizationError", - new XAttribute("Severity", (int)Magnesium.Severity.SevError), - new XAttribute("ErrorMessage", e.Message))); - //failedTests.Add("SummarizationError " + e.Message); - } - } - - foreach (var e in coverage) - { - xout.Add(new XElement("Event", - new XAttribute("Type", "CoverageSummary"), - new XAttribute("Time", 0), - new XAttribute("Machine", ""), - new XAttribute("File", e.Key.Item1), - new XAttribute("Line", e.Key.Item2), - new XAttribute("Covered", e.Value.Item1), - new XAttribute("Failed", e.Value.Item2))); - } - - AppendToErrorSummary(errorSummaryFileName, xout); - return 0; - } - - private static void AppendToErrorSummary(string summaryFileName, List elements) - { - if (summaryFileName == null) - return; - takeLock(summaryFileName); - try { - foreach (XElement e in elements) - AppendToSummary(summaryFileName, e, false, false); - } - finally - { - releaseLock(summaryFileName); - } - } - - private static void AppendToSummary(string summaryFileName, XElement xout, bool traceToStdout = false, bool shouldLock = true) - { - if (traceToStdout) - { - using (var wr = System.Xml.XmlWriter.Create(Console.OpenStandardOutput(), new System.Xml.XmlWriterSettings() { OmitXmlDeclaration = true, Encoding = new System.Text.UTF8Encoding(false) })) - xout.WriteTo(wr); - Console.WriteLine(); - return; - } - - if (summaryFileName == null) - return; - if (shouldLock) - takeLock(summaryFileName); - try - { - - using (var f = System.IO.File.Open(summaryFileName, System.IO.FileMode.Append, System.IO.FileAccess.Write)) - { - if (f.Length == 0) - { - byte[] bytes = Encoding.UTF8.GetBytes(""); - f.Write(bytes, 0, bytes.Length); - } - using (var wr = System.Xml.XmlWriter.Create(f, new System.Xml.XmlWriterSettings() { OmitXmlDeclaration = true })) - xout.Save(wr); - var endl = Encoding.UTF8.GetBytes(Environment.NewLine); - f.Write(endl, 0, endl.Length); - } - } - finally - { - if (shouldLock) - releaseLock(summaryFileName); - } - } - private static void AppendXmlMessageToSummary(string summaryFileName, XElement xout, bool traceToStdout = false, string testFile = null, - int? seed = null, bool? buggify = null, bool? determinismCheck = null, string oldBinaryName = null) - { - var test = new XElement("Test", xout); - if(testFile != null) - test.Add(new XAttribute("TestFile", testFile)); - if(seed != null) - test.Add(new XAttribute("RandomSeed", seed)); - if(buggify != null) - test.Add(new XAttribute("BuggifyEnabled", buggify.Value ? "1" : "0")); - if(determinismCheck != null) - test.Add(new XAttribute("DeterminismCheck", determinismCheck.Value ? "1" : "0")); - if(oldBinaryName != null) - test.Add(new XAttribute("OldBinary", Path.GetFileName(oldBinaryName))); - - test.Add(xout); - AppendToSummary(summaryFileName, test, traceToStdout); - } - - private static void AppendToFile(string fileName, string content) - { - if (fileName == null) - return; - takeLock(fileName); - try - { - using (var f = System.IO.File.Open(fileName, System.IO.FileMode.Append, System.IO.FileAccess.Write)) - { - var endl = Encoding.UTF8.GetBytes(content); - f.Write(endl, 0, endl.Length); - } - } - finally - { - releaseLock(fileName); - } - } - - static int Remote(string queue, string fdbRoot, double addHours, int testCount, string testTypes, string userScope) - { - queue = Path.GetFullPath(queue); - fdbRoot = Path.GetFullPath(fdbRoot); - var output = Path.Combine(queue, "archive"); - var now = DateTime.Now; - string date = string.Format("{0}-{1:00}-{2:00}-{3:00}-{4:00}", - now.Year, now.Month, now.Day, now.Hour, now.Minute); - - if (!Directory.Exists(queue)) - Directory.CreateDirectory(queue); - - int maxCount = 0; - foreach (var f in Directory.GetFiles(queue, String.Format("{0}-*.xml", date))) - { - var count = Int32.Parse(f.Split('-')[5]); - maxCount = Math.Max(maxCount, count); - } - maxCount++; - - var suffix = String.Format("{0}-{1}-{2}", Environment.UserName, userScope, OS_NAME); - foreach (var f in Directory.GetFiles(queue, "*" + suffix + ".xml")) - File.Delete(f); - - string label = String.Format("{0}-{1}-{2}", date, maxCount, suffix); - - var testStaging = Path.Combine(output, label); - Directory.CreateDirectory(testStaging); - File.Create(Path.Combine(testStaging, "errors.txt")); - - var release = Path.Combine(fdbRoot, "bin"); - if(!IsRunningOnMono()) - release = Path.Combine(release, "Release"); - - File.Copy(Path.Combine(release, BINARY), Path.Combine(testStaging, BINARY)); - File.Copy(Path.Combine(fdbRoot, "tls-plugins", PLUGIN), Path.Combine(testStaging, PLUGIN)); - - if (IsRunningOnMono()) - File.Copy(Path.Combine(release, BINARY + ".debug"), Path.Combine(testStaging, BINARY + ".debug")); - - //using (var f = System.IO.File.Open( - // Path.Combine(testStaging, "summary.xml"), - // System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, System.IO.FileShare.Delete)) - //{ - // byte[] bytes = Encoding.UTF8.GetBytes(""); - // f.Write(bytes, 0, bytes.Length); - //} - - var coverageFiles = Directory.GetFiles(release, "coverage*.xml"); - foreach (var coverage in coverageFiles) - File.Copy(coverage, Path.Combine(testStaging, Path.GetFileName(coverage))); - - Directory.CreateDirectory(Path.Combine(testStaging, "tests")); - - if (testTypes == "fast" || testTypes == "all") - CopyAll(new DirectoryInfo(Path.Combine(fdbRoot, "tests", "fast")), new DirectoryInfo(Path.Combine(testStaging, "tests", "fast"))); - if (testTypes == "restarting" || testTypes == "all") - { - CopyAll(new DirectoryInfo(Path.Combine(fdbRoot, "tests", "restarting")), new DirectoryInfo(Path.Combine(testStaging, "tests", "restarting"))); - //CopyAll(new DirectoryInfo(Path.Combine(fdbRoot, "tests", "oldBinaries")), new DirectoryInfo(Path.Combine(testStaging, "tests", "oldBinaries"))); - } - if (testTypes == "all") - { - CopyAll(new DirectoryInfo(Path.Combine(fdbRoot, "tests", "slow")), new DirectoryInfo(Path.Combine(testStaging, "tests", "slow"))); - CopyAll(new DirectoryInfo(Path.Combine(fdbRoot, "tests", "rare")), new DirectoryInfo(Path.Combine(testStaging, "tests", "rare"))); - } - - - if (testTypes != "fast" && testTypes != "all" && testTypes != "restarting") - { - FileInfo file = new FileInfo(testTypes); - Directory.CreateDirectory(Path.Combine(testStaging, "tests", file.Directory.Name)); - file.CopyTo(Path.Combine(testStaging, "tests", file.Directory.Name, file.Name), true); - } - - var e = - new XElement("TestDefinition", - new XElement("Duration", - new XAttribute("Hours", addHours)), - new XElement("TestCount", testCount)); - new XDocument(e).Save(Path.Combine(queue, label + ".xml")); - File.Copy(Path.Combine(queue, label + ".xml"), Path.Combine(testStaging, label + ".xml")); - - var summaryFile = Path.Combine(testStaging, "summary.xml"); - Console.WriteLine(label); - - if (!IsRunningOnMono()) - { - using (var mProcess = new System.Diagnostics.Process()) - { - mProcess.StartInfo.UseShellExecute = false; - mProcess.StartInfo.RedirectStandardOutput = true; - mProcess.StartInfo.FileName = "Magnesium.exe"; - mProcess.StartInfo.Arguments = "Summary " + summaryFile; - mProcess.Start(); - } - } - - return 0; - } - - public static void CopyAll(DirectoryInfo source, DirectoryInfo target, Func predicate = null) - { - // Check if the target directory exists, if not, create it. - if (!Directory.Exists(target.FullName)) - Directory.CreateDirectory(target.FullName); - - // Copy each file into it's new directory. - foreach (FileInfo fi in source.GetFiles()) - if (predicate == null || predicate(fi)) - fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true); - - // Copy each subdirectory using recursion. - foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) - CopyAll(diSourceSubDir, target.CreateSubdirectory(diSourceSubDir.Name), predicate); - } - - static int Auto(string queueDirectory, string runDir, string shareDir, string cacheDir, bool useValgrind, int maxTries) - { - try - { - queueDirectory = Path.GetFullPath(queueDirectory); - while (true) - { - Test test = getTest(queueDirectory, runDir, shareDir, cacheDir); - Console.WriteLine("Running test {0}", test.label); - - // run test - test.run(useValgrind, maxTries); - } - } - catch (Exception e) - { - Console.WriteLine("Error: {0}", e); - return 100; - } - } - - class Test - { - public DateTime? testEnd; - public string queueDirectory; - public string label; - public string runDir; - public string inputDir; - public string outputDir; - public string oldBinaryDir; - public int testCount; - - public Test(string queueDirectory, string label, string runDir, string shareDir, string cacheDir) - { - this.queueDirectory = queueDirectory; - this.label = label; - this.runDir = runDir; - var specFile = Path.Combine(queueDirectory, label + ".xml"); - var testDef = XDocument.Load(specFile).Element("TestDefinition"); - var testDuration = double.Parse(testDef.Element("Duration").Attribute("Hours").Value); - var testBegin = File.GetCreationTime(specFile); - testEnd = testDuration < 0 ? (DateTime?)null : testBegin.AddHours(testDuration); - - testCount = int.Parse(testDef.Element("TestCount").Value); - outputDir = Path.Combine(queueDirectory, "archive", label); - Directory.CreateDirectory(outputDir); - - string oldBinarySourceDir = Path.Combine(shareDir, "oldBinaries"); - - if (cacheDir != null) - { - inputDir = Path.Combine(cacheDir, "archive", label); - Directory.CreateDirectory(Path.Combine(cacheDir, "archive")); - - if (!Directory.Exists(inputDir)) - { - takeLock(inputDir); - if (!Directory.Exists(inputDir)) - { - string tmpDir = Path.Combine(cacheDir, "archive.part", label + "." + Path.GetRandomFileName() + ".part"); - Directory.CreateDirectory(tmpDir); - CopyAll(new DirectoryInfo(outputDir), new DirectoryInfo(tmpDir), (FileInfo file) => - file.Name != "fdbserver.debug" && - !file.Name.StartsWith("summary-") && - file.Name != "errors.txt" - ); - Directory.Move(tmpDir, inputDir); - } - releaseLock(inputDir); - } - - oldBinaryDir = Path.Combine(cacheDir, "oldBinaries"); - - Directory.CreateDirectory(oldBinaryDir); - foreach (FileInfo fi in new DirectoryInfo(oldBinarySourceDir).GetFiles()) - { - var targetName = Path.Combine(oldBinaryDir, fi.Name); - if (!File.Exists(targetName) || fi.LastWriteTimeUtc != File.GetLastWriteTimeUtc(targetName)) - { - fi.CopyTo(targetName, true); - File.SetLastWriteTimeUtc(targetName, fi.LastWriteTimeUtc); - } - } - - foreach (FileInfo fi in new DirectoryInfo(oldBinaryDir).GetFiles()) - { - var targetName = Path.Combine(oldBinarySourceDir, fi.Name); - if (!File.Exists(targetName)) - fi.Delete(); - } - } - else - { - inputDir = outputDir; - oldBinaryDir = oldBinarySourceDir; - } - //Console.WriteLine("TestEnd {0}, now {1}, duration {2}, done {3}", testEnd, DateTime.Now, testDuration, done()); - } - public bool done() - { - return testEnd.HasValue && System.DateTime.Now > testEnd.Value; - } - public void run(bool useValgrind, int maxTries) - { - Run(Path.Combine(inputDir, BINARY), - Path.Combine(inputDir, PLUGIN), - Path.Combine(inputDir, "tests"), - Path.Combine(outputDir, "summary-" + Environment.MachineName + ".xml"), - Path.Combine(outputDir, "errors.txt"), - runDir, - oldBinaryDir, - useValgrind, - maxTries); - } - - public void finalize() - { - try - { - Console.WriteLine("Deleting: {0}", Path.Combine(queueDirectory, label + ".xml")); - File.Delete(Path.Combine(queueDirectory, label + ".xml")); - } - catch (Exception e) - { - Console.WriteLine("Error deleting queue folder: {0}", e.Message); - } - } - } - - static Test getTest(string parent, string runDir, string shareDir, string cacheDir) - { - while (true) - { - var testFiles = Directory.GetFiles(parent, String.Format("*{0}.xml", OS_NAME)); - // (if no tests, wait, try again) - if (testFiles.Length != 0) - { - /*try - {*/ - var testFile = testFiles[random.Next(testFiles.Length)]; - var test = new Test(parent, Path.GetFileNameWithoutExtension(testFile), runDir, shareDir, cacheDir); - if ((test.testCount < 0 || UpdateTestTotals(Path.Combine(test.outputDir, "testCount"), test.testCount)) && !test.done()) - return test; - else - test.finalize(); - /*} - catch (Exception) - { - // retry opening a test - }*/ - } - System.Threading.Thread.Sleep(1000); - } - } - - static void takeLock(string targetFile) - { - // Console.WriteLine("Attempting to take lock on {0}", targetFile); - string lockFile = targetFile + ".lock"; - while (true) - { - try - { - using (var f = System.IO.File.Open(lockFile, System.IO.FileMode.CreateNew)) - { - return; - } - } - catch (System.IO.IOException e) - { - Console.WriteLine("Waiting for file lock: {0}", e.Message); - System.Threading.Thread.Sleep(250); - } - } - } - - static void releaseLock(string targetFile) - { - File.Delete(targetFile + ".lock"); - } - - private static bool UpdateTestTotals(string countFileName, int desiredTestCount) - { - takeLock(countFileName); - try - { - using (var f = System.IO.File.Open(countFileName, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite)) - { - int currentCount = 0; - byte[] b; - - if (f.Length != 0) - { - b = new byte[f.Length]; - f.Read(b, 0, b.Length); - currentCount = int.Parse(Encoding.UTF8.GetString(b)); - } - - if (currentCount >= desiredTestCount) - return false; - - f.SetLength(0); - b = Encoding.UTF8.GetBytes(String.Format("{0}", currentCount + 1)); - f.Write(b, 0, b.Length); - - return true; - } - } - finally - { - releaseLock(countFileName); - } - } - - private static int VersionInfo() - { - Console.WriteLine("Version: 1.02"); - - Console.WriteLine("FDB Project Ver: " + "${CMAKE_PROJECT_VERSION}"); - Console.WriteLine("FDB Version: " + "${CMAKE_PROJECT_VERSION_MAJOR}" + "." + "${CMAKE_PROJECT_VERSION_MINOR}"); - Console.WriteLine("Source Version: " + "${CURRENT_GIT_VERSION}"); - return 1; - } - - private static int UsageMessage() - { - Console.WriteLine("Usage:"); - Console.WriteLine(" TestHarness run [temp/runDir] [fdbserver[.exe]] [TLSplugin] [testfolder] [summary.xml] "); - Console.WriteLine(" TestHarness summarize [trace.xml] [summary.xml] "); - Console.WriteLine(" TestHarness replay [temp/runDir] [fdbserver[.exe]] [TLSplugin] [summary-in.xml] [summary-out.xml]"); - Console.WriteLine(" TestHarness auto [temp/runDir] [directory] [shareDir] "); - Console.WriteLine(" TestHarness remote [queue folder] [root foundation folder] [duration in hours] [amount of tests] [all/fast/] [scope]"); - Console.WriteLine(" TestHarness extract-errors [summary-file] [error-summary-file]"); - Console.WriteLine(" TestHarness joshua-run "); - VersionInfo(); - return 1; - } - } -} -======= /* * Program.cs * @@ -3141,4 +1586,3 @@ namespace SummarizeTest } } } ->>>>>>> upstream/release-6.2 diff --git a/contrib/TraceLogHelper/JsonParser.cs b/contrib/TraceLogHelper/JsonParser.cs index fb931b37e1..9d7272a37f 100644 --- a/contrib/TraceLogHelper/JsonParser.cs +++ b/contrib/TraceLogHelper/JsonParser.cs @@ -51,11 +51,7 @@ namespace Magnesium } catch (Exception e) { -<<<<<<< HEAD - throw new Exception(string.Format("Failed to parse {0}", root), e); -======= throw new Exception(string.Format("Failed to parse JSON {0}", root), e); ->>>>>>> upstream/release-6.2 } if (ev != null) yield return ev; } @@ -85,11 +81,7 @@ namespace Magnesium DDetails = xEvent.Elements() .Where(a=>a.Name != "Type" && a.Name != "Time" && a.Name != "Machine" && a.Name != "ID" && a.Name != "Severity" && (!rolledEvent || a.Name != "OriginalTime")) .ToDictionary(a=>string.Intern(a.Name.LocalName), a=>(object)a.Value), -<<<<<<< HEAD - original = keepOriginalElement ? xEvent : null, -======= original = keepOriginalElement ? xEvent : null ->>>>>>> upstream/release-6.2 }; } diff --git a/contrib/TraceLogHelper/XmlParser.cs b/contrib/TraceLogHelper/XmlParser.cs index dbfcbe00f8..3728c58c3b 100644 --- a/contrib/TraceLogHelper/XmlParser.cs +++ b/contrib/TraceLogHelper/XmlParser.cs @@ -53,11 +53,7 @@ namespace Magnesium } catch (Exception e) { -<<<<<<< HEAD - throw new Exception(string.Format("Failed to parse {0}", xev), e); -======= throw new Exception(string.Format("Failed to parse XML {0}", xev), e); ->>>>>>> upstream/release-6.2 } if (ev != null) yield return ev; } diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 320e3a8705..271f1eab79 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -79,8 +79,6 @@ if(WITH_PYTHON) add_fdb_test(TEST_FILES SampleNoSimAttrition.txt IGNORE) if (NOT USE_UBSAN) # TODO re-enable in UBSAN after https://github.com/apple/foundationdb/issues/2410 is resolved add_fdb_test(TEST_FILES SimpleExternalTest.txt) - else() - message(WARNING "Python not found, won't configure ctest") endif() add_fdb_test(TEST_FILES SlowTask.txt IGNORE) add_fdb_test(TEST_FILES SpecificUnitTest.txt IGNORE) @@ -255,9 +253,6 @@ if(WITH_PYTHON) create_valgrind_correctness_package() endif() endif() -<<<<<<< HEAD -======= else() message(WARNING "Python not found, won't configure ctest") ->>>>>>> upstream/release-6.2 endif() From faf571dc06552e5f4eeae81e18b020eb1458864f Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Fri, 22 Jan 2021 10:14:36 -0800 Subject: [PATCH 187/317] Remove the TODO since it's done. --- fdbserver/storageserver.actor.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index d421823e10..095bdc55bb 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -2359,7 +2359,6 @@ ACTOR Future fetchKeys( StorageServer *data, AddingShard* shard ) { //FIXME: remove when we no longer support upgrades from 5.X if (debug_getRangeRetries >= 100) { data->cx->enableLocalityLoadBalance = false; - // TODO: Add SevWarnAlways to say it was disabled. TraceEvent(SevWarnAlways, "FKDisableLB").detail("FKID", fetchKeysID); } From a09acd321ef7f6ce5cc5364efc03e77633bf60b0 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Fri, 22 Jan 2021 11:45:37 -0800 Subject: [PATCH 188/317] update knobs default values for testing --- flow/Knobs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index 860092ad23..40b8dda23a 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -113,8 +113,8 @@ void FlowKnobs::initialize(bool randomize, bool isSimulated) { init( MAX_EVICT_ATTEMPTS, 100 ); if( randomize && BUGGIFY ) MAX_EVICT_ATTEMPTS = 2; init( CACHE_EVICTION_POLICY, "random" ); init( PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION, 0.1 ); if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 0.0; else if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 1.0; - init( FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, -1 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT = 1e6; // 0 - auto(TODO); Negative - no limit - init( FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS, -1 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS = 1; // 0 - auto(TODO); Negative - no limit + init( FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, 500 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT = 1e6; // 0 - auto(TODO); Negative - no limit + init( FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS, 0.05 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS = 1; // 0 - auto(TODO); Negative - no limit //AsyncFileEIO init( EIO_MAX_PARALLELISM, 4 ); From 589eaf54d793b7d45108fcc7abdc256dda9a44c5 Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Wed, 9 Dec 2020 13:37:48 -0800 Subject: [PATCH 189/317] Switch to BoringSSL by default --- build/Dockerfile | 2 +- flow/TLSConfig.actor.cpp | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/build/Dockerfile b/build/Dockerfile index 1ad06ba986..05fb37fa90 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -79,7 +79,7 @@ RUN cd /opt/ && curl -L https://github.com/facebook/rocksdb/archive/v6.10.1.tar. RUN cd /opt/ && curl -L https://github.com/manticoresoftware/manticoresearch/raw/master/misc/junit/ctest2junit.xsl -o ctest2junit.xsl # Setting this environment variable switches from OpenSSL to BoringSSL -#ENV OPENSSL_ROOT_DIR=/opt/boringssl +ENV OPENSSL_ROOT_DIR=/opt/boringssl # install BoringSSL: TODO: They don't seem to have releases(?) I picked today's master SHA. RUN cd /opt &&\ diff --git a/flow/TLSConfig.actor.cpp b/flow/TLSConfig.actor.cpp index 73a336e38a..e97c9dbc9d 100644 --- a/flow/TLSConfig.actor.cpp +++ b/flow/TLSConfig.actor.cpp @@ -28,9 +28,7 @@ TLSPolicy::~TLSPolicy() {} namespace TLS { void DisableOpenSSLAtExitHandler() { -#ifdef TLS_DISABLED - return; -#else +#ifdef HAVE_OPENSSL_INIT_NO_ATEXIT static bool once = false; if (!once) { once = true; @@ -43,9 +41,7 @@ void DisableOpenSSLAtExitHandler() { } void DestroyOpenSSLGlobalState() { -#ifdef TLS_DISABLED - return; -#else +#ifdef HAVE_OPENSSL_INIT_NO_ATEXIT OPENSSL_cleanup(); #endif } From a977997e4a553cf6d355430b2f04c968e12ca956 Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Wed, 9 Dec 2020 16:23:46 -0800 Subject: [PATCH 190/317] Bump development + build docker version numbers --- build/Dockerfile | 4 ++-- build/Dockerfile.devel | 6 +++--- build/docker-compose.yaml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/build/Dockerfile b/build/Dockerfile index 05fb37fa90..42f5947cf1 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -110,8 +110,8 @@ RUN cd /opt/boringssl/build &&\ ARG TIMEZONEINFO=America/Los_Angeles RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/${TIMEZONEINFO} /etc/localtime -LABEL version=0.1.22 -ENV DOCKER_IMAGEVER=0.1.22 +LABEL version=0.1.23 +ENV DOCKER_IMAGEVER=0.1.23 ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0 ENV CC=/opt/rh/devtoolset-8/root/usr/bin/gcc ENV CXX=/opt/rh/devtoolset-8/root/usr/bin/g++ diff --git a/build/Dockerfile.devel b/build/Dockerfile.devel index ae10ce3e2e..b1fcb99b4e 100644 --- a/build/Dockerfile.devel +++ b/build/Dockerfile.devel @@ -1,4 +1,4 @@ -ARG IMAGE_TAG=0.1.21 +ARG IMAGE_TAG=0.1.23 FROM foundationdb/foundationdb-build:${IMAGE_TAG} USER root @@ -51,8 +51,8 @@ RUN cp -iv /usr/local/bin/clang++ /usr/local/bin/clang++.deref &&\ ldconfig &&\ rm -rf /mnt/artifacts -LABEL version=0.11.13 -ENV DOCKER_IMAGEVER=0.11.13 +LABEL version=0.11.14 +ENV DOCKER_IMAGEVER=0.11.14 ENV CLANGCC=/usr/local/bin/clang.de8a65ef ENV CLANGCXX=/usr/local/bin/clang++.de8a65ef diff --git a/build/docker-compose.yaml b/build/docker-compose.yaml index d59251e524..1e865327c5 100644 --- a/build/docker-compose.yaml +++ b/build/docker-compose.yaml @@ -2,7 +2,7 @@ version: "3" services: common: &common - image: foundationdb/foundationdb-build:0.1.22 + image: foundationdb/foundationdb-build:0.1.23 build-setup: &build-setup <<: *common From 85e21c1ba171ff269dd0e37927d0569435f60caf Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Fri, 22 Jan 2021 21:10:07 +0000 Subject: [PATCH 191/317] CMake support for BoringSSL --- cmake/FDBComponents.cmake | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cmake/FDBComponents.cmake b/cmake/FDBComponents.cmake index 65623f31bc..90efa6eb8d 100644 --- a/cmake/FDBComponents.cmake +++ b/cmake/FDBComponents.cmake @@ -12,6 +12,8 @@ endif() # SSL ################################################################################ +include(CheckSymbolExists) + set(DISABLE_TLS OFF CACHE BOOL "Don't try to find LibreSSL and always build without TLS support") if(DISABLE_TLS) set(WITH_TLS OFF) @@ -24,6 +26,14 @@ else() if (LIBRESSL_FOUND) add_library(OpenSSL::SSL ALIAS LibreSSL) endif() + else() + set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR}) + check_symbol_exists(OPENSSL_INIT_NO_ATEXIT "openssl/crypto.h" OPENSSL_HAS_NO_ATEXIT) + if(OPENSSL_HAS_NO_ATEXIT) + add_compile_options(-DHAVE_OPENSSL_INIT_NO_ATEXIT) + else() + message(STATUS "Found OpenSSL without OPENSSL_INIT_NO_ATEXIT: assuming BoringSSL") + endif() endif() if(OPENSSL_FOUND OR LIBRESSL_FOUND) set(WITH_TLS ON) From 0d32bd0c44f0b0a4b213c7bb86c5ca6ec37b08cd Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Sun, 24 Jan 2021 01:50:09 -0800 Subject: [PATCH 192/317] Bug fixes involving use of AFCached rate control in simulation. --- fdbrpc/AsyncFileCached.actor.h | 5 +++- fdbrpc/IAsyncFile.h | 1 + fdbrpc/IRateControl.h | 39 ++++++++++++++++++------- fdbserver/KeyValueStoreSQLite.actor.cpp | 29 +++++++++++++++--- flow/Knobs.cpp | 13 +++++++-- 5 files changed, 70 insertions(+), 17 deletions(-) diff --git a/fdbrpc/AsyncFileCached.actor.h b/fdbrpc/AsyncFileCached.actor.h index 1fe7d9b69f..8acbda1f12 100644 --- a/fdbrpc/AsyncFileCached.actor.h +++ b/fdbrpc/AsyncFileCached.actor.h @@ -235,7 +235,7 @@ public: void setRateControl(Reference const& rc) override { rateControl = rc; } - Reference const& getRateControl() { return rateControl; } + Reference const& getRateControl() override { return rateControl; } virtual void addref() { ReferenceCounted::addref(); @@ -245,6 +245,9 @@ public: if (delref_no_destroy()) { // If this is ever ThreadSafeReferenceCounted... // setrefCountUnsafe(0); + if(rateControl) { + rateControl->killWaiters(io_error()); + } auto f = quiesce(); //TraceEvent("AsyncFileCachedDel").detail("Filename", filename) diff --git a/fdbrpc/IAsyncFile.h b/fdbrpc/IAsyncFile.h index b8fe40ebfd..8656d542bb 100644 --- a/fdbrpc/IAsyncFile.h +++ b/fdbrpc/IAsyncFile.h @@ -84,6 +84,7 @@ public: virtual int64_t debugFD() = 0; // Used for rate control, at present, only AsyncFileCached supports it + virtual Reference const& getRateControl() { throw unsupported_operation(); } virtual void setRateControl(Reference const& rc) { throw unsupported_operation(); } }; diff --git a/fdbrpc/IRateControl.h b/fdbrpc/IRateControl.h index c2316a8fbb..4896edab31 100644 --- a/fdbrpc/IRateControl.h +++ b/fdbrpc/IRateControl.h @@ -30,6 +30,8 @@ public: // If all of the allowance is not used the unused units can be given back. // For convenience, n can safely be negative. virtual void returnUnused(int n) = 0; + virtual void killWaiters(const Error &e) = 0; + virtual void wakeWaiters() = 0; virtual void addref() = 0; virtual void delref() = 0; }; @@ -40,12 +42,14 @@ public: SpeedLimit(int windowLimit, double windowSeconds) : m_limit(windowLimit), m_seconds(windowSeconds), m_last_update(0), m_budget(0) { m_last_update = now(); } - virtual ~SpeedLimit() {} + virtual ~SpeedLimit() { + m_stop.send(Never()); + } - virtual void addref() { ReferenceCounted::addref(); } - virtual void delref() { ReferenceCounted::delref(); } + void addref() override { ReferenceCounted::addref(); } + void delref() override { ReferenceCounted::delref(); } - virtual Future getAllowance(unsigned int n) { + Future getAllowance(unsigned int n) override { // Replenish budget based on time since last update double ts = now(); // returnUnused happens to do exactly what we want here @@ -56,20 +60,33 @@ public: if(m_budget >= 0) return Void(); // Otherise return the amount of time it will take for the budget to rise to 0. - return delay(m_seconds * -m_budget / m_limit); + return m_stop.getFuture() || delay(m_seconds * -m_budget / m_limit); } - virtual void returnUnused(int n) { + void returnUnused(int n) override { if(n < 0) return; m_budget = std::min(m_budget + n, m_limit); } + void wakeWaiters() override { + Promise p; + p.swap(m_stop); + p.send(Void()); + } + + void killWaiters(const Error &e) override { + Promise p; + p.swap(m_stop); + p.sendError(e); + } + private: int m_limit; double m_seconds; double m_last_update; int64_t m_budget; + Promise m_stop; }; // An IRateControl implemenation that enforces no limit @@ -77,9 +94,11 @@ class Unlimited : public IRateControl, ReferenceCounted { public: Unlimited() {} virtual ~Unlimited() {} - virtual void addref() { ReferenceCounted::addref(); } - virtual void delref() { ReferenceCounted::delref(); } + void addref() override { ReferenceCounted::addref(); } + void delref() override { ReferenceCounted::delref(); } - virtual Future getAllowance(unsigned int n) { return Void(); } - virtual void returnUnused(int n) {} + Future getAllowance(unsigned int n) override { return Void(); } + void returnUnused(int n) override {} + void wakeWaiters() override {} + void killWaiters(const Error &e) override {} }; diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 8c592771e5..d1ad923f9c 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -1323,6 +1323,7 @@ int SQLiteDB::checkAllPageChecksums() { .detail("TotalErrors", totalErrors); ASSERT(!vfsAsyncIsOpen(filename)); + ASSERT(!vfsAsyncIsOpen(filename + "-wal")); return totalErrors; } @@ -1375,10 +1376,29 @@ void SQLiteDB::open(bool writable) { // Set Rate control if FLOW_KNOBS are positive if (FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT > 0 && FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS > 0) { - Reference rc(new SpeedLimit(FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, - FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS)); - dbFile.get()->setRateControl(rc); - walFile.get()->setRateControl(rc); + // The writer thread is created before the readers, so it should initialize the rate controls. + if(writable) { + // If either rate control is already initialized, then its file is still being held open by a previous + // usage, likely because ~AsyncFileCached() launched a background actor that is waiting for outstanding + // operations to finish. In case any of those are waiting for time to pass due to the rate control, + // send them an io_error. + if(dbFile.get()->getRateControl()) { + dbFile.get()->getRateControl()->killWaiters(io_error()); + } + if(walFile.get()->getRateControl()) { + walFile.get()->getRateControl()->killWaiters(io_error()); + } + + // Create a new rate control and assign it to both files. + Reference rc(new SpeedLimit(FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, + FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS)); + dbFile.get()->setRateControl(rc); + walFile.get()->setRateControl(rc); + } else { + // When a reader thread is opened, the rate controls should already be equal and not null + ASSERT(dbFile.get()->getRateControl() == walFile.get()->getRateControl()); + ASSERT(dbFile.get()->getRateControl()); + } } //TraceEvent("KVThreadInitStage").detail("Stage",2).detail("Filename", filename).detail("Writable", writable); @@ -1984,6 +2004,7 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke //The DB file should not already be open ASSERT(!vfsAsyncIsOpen(filename)); + ASSERT(!vfsAsyncIsOpen(filename + "-wal")); readCursors.resize(SERVER_KNOBS->SQLITE_READER_THREADS); //< number of read threads diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index 40b8dda23a..0a1867d1a0 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -113,8 +113,17 @@ void FlowKnobs::initialize(bool randomize, bool isSimulated) { init( MAX_EVICT_ATTEMPTS, 100 ); if( randomize && BUGGIFY ) MAX_EVICT_ATTEMPTS = 2; init( CACHE_EVICTION_POLICY, "random" ); init( PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION, 0.1 ); if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 0.0; else if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 1.0; - init( FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, 500 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT = 1e6; // 0 - auto(TODO); Negative - no limit - init( FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS, 0.05 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS = 1; // 0 - auto(TODO); Negative - no limit + + init( FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS, -1 ); + init( FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, -1 ); + if( randomize && BUGGIFY ) { + // Choose an window between .01 and 1.01 seconds. + FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS = 0.01 + deterministicRandom()->random01(); + // Choose 10k to 50k operations per second + int opsPerSecond = deterministicRandom()->randomInt(10000, 50000); + // Set window limit to opsPerSecond scaled down to window size + FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT = opsPerSecond * FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS; + } //AsyncFileEIO init( EIO_MAX_PARALLELISM, 4 ); From dce8af5b630a24bd5b3d2455948e1e62d76a6f5f Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Mon, 25 Jan 2021 13:54:24 -0800 Subject: [PATCH 193/317] Change back to SevWarnAlways for now. --- fdbserver/DataDistribution.actor.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index 4ff6ad4490..3dc4cd4a27 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -3181,7 +3181,7 @@ ACTOR Future zeroServerLeftLogger_impl(DDTeamCollection* self, ReferencegetShardMetrics.getReply(GetMetricsRequest(shard)))); - TraceEvent(SevError, "DDShardLost", self->distributorId) + TraceEvent(SevWarnAlways, "DDShardLost", self->distributorId) .detail("ServerTeamID", team->getTeamID()) .detail("ShardBegin", shard.begin) .detail("ShardEnd", shard.end); @@ -3194,7 +3194,7 @@ ACTOR Future zeroServerLeftLogger_impl(DDTeamCollection* self, ReferencedistributorId) + TraceEvent(SevWarnAlways, "DDZeroServerLeftInTeam", self->distributorId) .detail("Team", team->getDesc()) .detail("TotalBytesLost", bytesLost); @@ -3409,13 +3409,13 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea } if (logTeamEvents) { int dataLoss = team->getPriority() == SERVER_KNOBS->PRIORITY_TEAM_0_LEFT; - Severity severity = dataLoss ? SevError : SevInfo; + Severity severity = dataLoss ? SevWarnAlways : SevInfo; TraceEvent(severity, "ServerTeamPriorityChange", self->distributorId) .detail("Priority", team->getPriority()) .detail("Info", team->getDesc()) .detail("ZeroHealthyServerTeams", self->zeroHealthyTeams->get()) - .detail("Hint", severity == SevError ? "No replicas remain of some data" - : "This team's priority changed"); + .detail("Hint", severity == SevWarnAlways ? "No replicas remain of some data" + : "This team's priority changed"); if (team->getPriority() == SERVER_KNOBS->PRIORITY_TEAM_0_LEFT) { // 0 servers left in this team, data might be lost. zeroServerLeftLogger = zeroServerLeftLogger_impl(self, team); From 0cde3cc48fbac2bd7c0f2995a8dc0f954b5bde0a Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Mon, 25 Jan 2021 14:04:07 -0800 Subject: [PATCH 194/317] Make trace event happy --- fdbserver/DataDistribution.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index 3dc4cd4a27..0482b3d142 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -3415,7 +3415,7 @@ ACTOR Future teamTracker(DDTeamCollection* self, Reference tea .detail("Info", team->getDesc()) .detail("ZeroHealthyServerTeams", self->zeroHealthyTeams->get()) .detail("Hint", severity == SevWarnAlways ? "No replicas remain of some data" - : "This team's priority changed"); + : "The priority of this team changed"); if (team->getPriority() == SERVER_KNOBS->PRIORITY_TEAM_0_LEFT) { // 0 servers left in this team, data might be lost. zeroServerLeftLogger = zeroServerLeftLogger_impl(self, team); From 2087ab104efbf3ac8aa27ffcbaeaefc16a9b69ea Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Tue, 26 Jan 2021 12:33:34 -0800 Subject: [PATCH 195/317] temporarily avoid using the increasingPriorityDelay for testing --- fdbserver/storageserver.actor.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index d8ffeb6fac..13af6c725a 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -696,6 +696,9 @@ public: } bool checkDurabilityBehind() { + return version.get() - durableVersion.get() > SERVER_KNOBS->LOW_PRIORITY_DURABILITY_LAG_END; + + /* if(durabilityBehind.get()) { durabilityBehind.set( version.get() - durableVersion.get() > SERVER_KNOBS->LOW_PRIORITY_DURABILITY_LAG_END || @@ -706,12 +709,13 @@ public: queueSize() > SERVER_KNOBS->LOW_PRIORITY_STORAGE_QUEUE_BYTES_START ); } return durabilityBehind.get(); + */ } Future getQueryDelay() { if(checkDurabilityBehind()) { ++counters.lowPriorityQueries; - return increasingPriorityDelay(durabilityBehind.onChange()); + return delay(0, TaskPriority::Low); //increasingPriorityDelay(durabilityBehind.onChange()); } return delay(0, TaskPriority::DefaultEndpoint); } From 989fee908a5e73cc1788f9d2195dfec9c4baf17d Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Wed, 27 Jan 2021 00:01:33 -0800 Subject: [PATCH 196/317] More bug fixes in SQLite file handle lifetimes after storage server restart (including simulated process reboot) when a write rate limit is used. Added several debug trace events, renamed some VFSAsync* events to be more consistent. --- fdbrpc/AsyncFileCached.actor.h | 3 ++ fdbserver/KeyValueStoreSQLite.actor.cpp | 62 +++++++++++++++++-------- fdbserver/VFSAsync.cpp | 39 +++++++++++----- flow/Knobs.cpp | 2 +- 4 files changed, 73 insertions(+), 33 deletions(-) diff --git a/fdbrpc/AsyncFileCached.actor.h b/fdbrpc/AsyncFileCached.actor.h index 8acbda1f12..7823c8aa0d 100644 --- a/fdbrpc/AsyncFileCached.actor.h +++ b/fdbrpc/AsyncFileCached.actor.h @@ -245,7 +245,10 @@ public: if (delref_no_destroy()) { // If this is ever ThreadSafeReferenceCounted... // setrefCountUnsafe(0); + if(rateControl) { + TraceEvent(SevDebug, "AsyncFileCachedKillWaiters") + .detail("Filename", filename); rateControl->killWaiters(io_error()); } diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index d1ad923f9c..4145a38beb 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -141,13 +141,13 @@ struct PageChecksumCodec { if (!silent) { TraceEvent trEvent(SevError, "SQLitePageChecksumFailure"); trEvent.error(checksum_failed()) - .detail("CodecPageSize", pageSize) - .detail("CodecReserveSize", reserveSize) - .detail("Filename", filename) - .detail("PageNumber", pageNumber) - .detail("PageSize", pageLen) - .detail("ChecksumInPage", pSumInPage->toString()) - .detail("ChecksumCalculatedHL2", hashLittle2Sum.toString()); + .detail("CodecPageSize", pageSize) + .detail("CodecReserveSize", reserveSize) + .detail("Filename", filename) + .detail("PageNumber", pageNumber) + .detail("PageSize", pageLen) + .detail("ChecksumInPage", pSumInPage->toString()) + .detail("ChecksumCalculatedHL2", hashLittle2Sum.toString()); if (pSumInPage->part1 == 0) { trEvent.detail("ChecksumCalculatedCRC", crc32Sum.toString()); } @@ -237,15 +237,27 @@ struct SQLiteDB : NonCopyable { void open(bool writable); void createFromScratch(); - SQLiteDB( std::string filename, bool page_checksums, bool fragment_values): filename(filename), db(NULL), btree(NULL), table(-1), freetable(-1), haveMutex(false), page_checksums(page_checksums), fragment_values(fragment_values) {} + SQLiteDB( std::string filename, bool page_checksums, bool fragment_values): filename(filename), db(NULL), btree(NULL), table(-1), freetable(-1), haveMutex(false), page_checksums(page_checksums), fragment_values(fragment_values) { + TraceEvent(SevDebug, "SQLiteDBCreate") + .detail("This", (void*)this) + .detail("Filename", filename) + .backtrace(); + } ~SQLiteDB() { + TraceEvent(SevDebug, "SQLiteDBDestroy") + .detail("This", (void*)this) + .detail("Filename", filename) + .backtrace(); + if (db) { if (haveMutex) { sqlite3_mutex_leave(db->mutex); } sqlite3_close( db ); } + + disableRateControl(); } void initPagerCodec() { @@ -265,7 +277,7 @@ struct SQLiteDB : NonCopyable { //if (deterministicRandom()->random01() < .001) rc = SQLITE_INTERRUPT; if (rc) { // Our exceptions don't propagate through sqlite, so we don't know for sure if the error that caused this was - // an injected fault. Assume that if fault injection is happening, this is an injected fault. + // an injected fault. Assume that if VFSAsyncFile caught an injected Error that it caused this error return code. Error err = io_error(); if (g_network->isSimulated() && VFSAsyncFile::checkInjectedError()) { err = err.asInjectedFault(); @@ -279,6 +291,24 @@ struct SQLiteDB : NonCopyable { throw err; } } + + void disableRateControl() { + if(dbFile && dbFile->getRateControl()) { + TraceEvent(SevDebug, "SQLiteDBShutdownRateControl").detail("Filename", dbFile->getFilename()); + Reference rc = dbFile->getRateControl(); + dbFile->setRateControl({}); + rc->wakeWaiters(); + } + + if(walFile && walFile->getRateControl()) { + TraceEvent(SevDebug, "SQLiteDBShutdownRateControl").detail("Filename", walFile->getFilename()); + Reference rc = walFile->getRateControl(); + walFile->setRateControl({}); + rc->wakeWaiters(); + } + + } + void checkpoint( bool restart ) { int logSize=0, checkpointCount=0; //double t = timer(); @@ -1378,17 +1408,6 @@ void SQLiteDB::open(bool writable) { if (FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT > 0 && FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS > 0) { // The writer thread is created before the readers, so it should initialize the rate controls. if(writable) { - // If either rate control is already initialized, then its file is still being held open by a previous - // usage, likely because ~AsyncFileCached() launched a background actor that is waiting for outstanding - // operations to finish. In case any of those are waiting for time to pass due to the rate control, - // send them an io_error. - if(dbFile.get()->getRateControl()) { - dbFile.get()->getRateControl()->killWaiters(io_error()); - } - if(walFile.get()->getRateControl()) { - walFile.get()->getRateControl()->killWaiters(io_error()); - } - // Create a new rate control and assign it to both files. Reference rc(new SpeedLimit(FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS)); @@ -1992,6 +2011,9 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke writeThread(CoroThreadPool::createThreadPool()), readsRequested(0), writesRequested(0), writesComplete(0), diskBytesUsed(0), freeListPages(0) { + TraceEvent(SevDebug, "KeyValueStoreSQLiteCreate") + .detail("Filename", filename); + stopOnErr = stopOnError(this); #if SQLITE_THREADSAFE == 0 diff --git a/fdbserver/VFSAsync.cpp b/fdbserver/VFSAsync.cpp index 174bd425c4..24aa73108f 100644 --- a/fdbserver/VFSAsync.cpp +++ b/fdbserver/VFSAsync.cpp @@ -63,6 +63,12 @@ const uint32_t RESERVED_COUNT = 1U<<29; VFSAsyncFile::VFSAsyncFile(std::string const& filename, int flags) : filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0) { filename_lockCount_openCount[filename].second++; + + TraceEvent(SevDebug, "VFSAsyncFileConstruct") + .detail("Filename", filename) + .detail("OpenCount", filename_lockCount_openCount[filename].second) + .detail("LockCount", filename_lockCount_openCount[filename].first) + .backtrace(); } std::map> VFSAsyncFile::filename_lockCount_openCount; @@ -70,9 +76,10 @@ std::map> VFSAsyncFile::filename_lockCount_ static int asyncClose(sqlite3_file *pFile){ VFSAsyncFile *p = (VFSAsyncFile*)pFile; - /*TraceEvent("VFSAsyncClose").detail("Fd", p->file->debugFD()) - .detail("Filename", p->filename).detail("ZCRefs", p->debug_zcrefs) - .detail("ZCReads", p->debug_zcreads).detail("NormalReads", p->debug_reads).backtrace();*/ + TraceEvent(SevDebug, "VFSAsyncFileDestroy") + .detail("Filename", p->filename) + .backtrace(); + //printf("Closing %s: %d zcrefs, %d/%d reads zc\n", filename.c_str(), debug_zcrefs, debug_zcreads, debug_zcreads+debug_reads); ASSERT( !p->debug_zcrefs ); @@ -205,7 +212,7 @@ static int asyncSync(sqlite3_file *pFile, int flags){ VFSAsyncFile::setInjectedError(SQLITE_IOERR_FSYNC); } - TraceEvent("VFSSyncError") + TraceEvent("VFSAsyncFileSyncError") .error(e) .detail("Filename", p->filename) .detail("Sqlite3File", (int64_t)pFile) @@ -467,10 +474,20 @@ static int asyncDeviceCharacteristics(sqlite3_file *pFile){ return 0; } } VFSAsyncFile::~VFSAsyncFile() { - //TraceEvent("VFSAsyncFileDel").detail("Filename", filename); + + TraceEvent(SevDebug, "VFSAsyncFileDestroyStart") + .detail("Filename", filename) + .detail("OpenCount", filename_lockCount_openCount[filename].second) + .detail("LockCount", filename_lockCount_openCount[filename].first) + .backtrace(); + if (!--filename_lockCount_openCount[filename].second) { filename_lockCount_openCount.erase(filename); + TraceEvent(SevDebug, "VFSAsyncFileDestroy") + .detail("Filename", filename) + .backtrace(); + //Always delete the shared memory when the last copy of the file is deleted. In simulation, this is helpful because "killing" a file without properly closing //it can result in a shared memory state that causes corruption when reopening the killed file. The only expected penalty from doing this //is a potentially slower open operation on a database, but that should happen infrequently. @@ -540,17 +557,15 @@ static int asyncOpen( // Note that SQLiteDB::open also opens the db file, so its flags and modes are important, too p->file = waitForAndGet( IAsyncFileSystem::filesystem()->open( p->filename, oflags, 0600 ) ); - /*TraceEvent("VFSOpened") + TraceEvent(SevDebug, "VFSAsyncFileOpened") .detail("Filename", p->filename) - .detail("Fd", DEBUG_DETERMINISM ? 0 : p->file->debugFD()) - .detail("Flags", flags) - .detail("Sqlite3File", DEBUG_DETERMINISM ? 0 : (int64_t)pFile) - .detail("IAsyncFile", DEBUG_DETERMINISM ? 0 : (int64_t)p->file.getPtr());*/ + .backtrace(); + } catch (Error& e) { if(e.isInjectedFault()) { VFSAsyncFile::setInjectedError(SQLITE_CANTOPEN); } - TraceEvent("SQLiteOpenFail").error(e).detail("Filename", p->filename); + TraceEvent("VFSAsyncFileOpenError").error(e).detail("Filename", p->filename); p->~VFSAsyncFile(); return SQLITE_CANTOPEN; } @@ -728,7 +743,7 @@ static int asyncSleep(sqlite3_vfs *pVfs, int microseconds){ if(e.isInjectedFault()) { VFSAsyncFile::setInjectedError(SQLITE_ERROR); } - TraceEvent(SevError, "AsyncSleepError").error(e,true); + TraceEvent(SevError, "VFSAsyncSleepError").error(e,true); return 0; } } diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index 0a1867d1a0..24cb52081e 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -120,7 +120,7 @@ void FlowKnobs::initialize(bool randomize, bool isSimulated) { // Choose an window between .01 and 1.01 seconds. FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS = 0.01 + deterministicRandom()->random01(); // Choose 10k to 50k operations per second - int opsPerSecond = deterministicRandom()->randomInt(10000, 50000); + int opsPerSecond = deterministicRandom()->randomInt(1000, 5000); // Set window limit to opsPerSecond scaled down to window size FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT = opsPerSecond * FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS; } From e3a653147792be33af7573cc8d935c76d4cc679a Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Wed, 27 Jan 2021 05:31:02 -0800 Subject: [PATCH 197/317] Another attempt to fix SQLite lifetime issues. KeyValueStoreSQLite::doClose() can now access the Writer instance and call disableRateControl() on its SQLiteDB instance prior to stopping the reader and writer thread pools. This should prevent rate limiting from interfering with SQLite shutdown. --- fdbserver/KeyValueStoreSQLite.actor.cpp | 27 ++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 4145a38beb..48a0900a04 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -256,8 +256,6 @@ struct SQLiteDB : NonCopyable { } sqlite3_close( db ); } - - disableRateControl(); } void initPagerCodec() { @@ -1566,6 +1564,9 @@ private: volatile int64_t diskBytesUsed; volatile int64_t freeListPages; + struct Writer; + Writer *writer; + vector< Reference > readCursors; struct Reader : IThreadPoolReceiver { @@ -1946,8 +1947,16 @@ private: ACTOR static void doClose( KeyValueStoreSQLite* self, bool deleteOnClose ) { state Error error = success(); + + if(self->writer != nullptr) { + self->writer->conn.disableRateControl(); + wait(delay(0)); + } + try { - TraceEvent("KVClose", self->logID).detail("Del", deleteOnClose); + TraceEvent("KVClose", self->logID) + .detail("Filename", self->filename) + .detail("Del", deleteOnClose); self->starting.cancel(); self->cleaning.cancel(); self->logging.cancel(); @@ -1958,12 +1967,14 @@ private: } } catch (Error& e) { TraceEvent(SevError, "KVDoCloseError", self->logID) - .error(e,true) + .detail("Filename", self->filename) + .error(e, true) .detail("Reason", e.code() == error_code_platform_error ? "could not delete database" : "unknown"); error = e; } - TraceEvent("KVClosed", self->logID); + TraceEvent("KVClosed", self->logID) + .detail("Filename", self->filename); if( error.code() != error_code_actor_cancelled ) { self->stopped.send(Void()); delete self; @@ -2009,7 +2020,8 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke logID(id), readThreads(CoroThreadPool::createThreadPool()), writeThread(CoroThreadPool::createThreadPool()), - readsRequested(0), writesRequested(0), writesComplete(0), diskBytesUsed(0), freeListPages(0) + readsRequested(0), writesRequested(0), writesComplete(0), diskBytesUsed(0), freeListPages(0), + writer(nullptr) { TraceEvent(SevDebug, "KeyValueStoreSQLiteCreate") .detail("Filename", filename); @@ -2033,7 +2045,8 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke sqlite3_soft_heap_limit64( SERVER_KNOBS->SOFT_HEAP_LIMIT ); // SOMEDAY: Is this a performance issue? Should we drop the cache sizes for individual threads? TaskPriority taskId = g_network->getCurrentTask(); g_network->setCurrentTask(TaskPriority::DiskWrite); - writeThread->addThread( new Writer(filename, type==KeyValueStoreType::SSD_BTREE_V2, checkChecksums, checkIntegrity, writesComplete, springCleaningStats, diskBytesUsed, freeListPages, id, &readCursors) ); + writer = new Writer(filename, type==KeyValueStoreType::SSD_BTREE_V2, checkChecksums, checkIntegrity, writesComplete, springCleaningStats, diskBytesUsed, freeListPages, id, &readCursors); + writeThread->addThread(writer); g_network->setCurrentTask(taskId); auto p = new Writer::InitAction(); auto f = p->result.getFuture(); From 3e2a0a526431a2633af99166712ca9d5d27c9a8b Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 27 Jan 2021 11:50:42 -0800 Subject: [PATCH 198/317] throw an io_timeout if it takes more than 2 minutes to commit on the storage server --- fdbserver/Knobs.cpp | 1 + fdbserver/Knobs.h | 1 + fdbserver/storageserver.actor.cpp | 2 +- flow/Knobs.cpp | 1 + flow/Knobs.h | 1 + flow/genericactors.actor.cpp | 6 ++++-- 6 files changed, 9 insertions(+), 3 deletions(-) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 8431be5149..b9b74bd436 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -512,6 +512,7 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( REPORT_DD_METRICS, true ); init( DD_METRICS_REPORT_INTERVAL, 30.0 ); init( FETCH_KEYS_TOO_LONG_TIME_CRITERIA, 300.0 ); + init( MAX_STORAGE_COMMIT_TIME, 120.0 ); //Wait Failure init( MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS, 250 ); if( randomize && BUGGIFY ) MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS = 2; diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 0a5168397d..e02499083e 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -455,6 +455,7 @@ public: bool REPORT_DD_METRICS; double DD_METRICS_REPORT_INTERVAL; double FETCH_KEYS_TOO_LONG_TIME_CRITERIA; + double MAX_STORAGE_COMMIT_TIME; //Wait Failure int MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS; diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 3b771bf3a8..b90a899606 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -2970,7 +2970,7 @@ ACTOR Future updateStorage(StorageServer* data) { durableDelay = delay(SERVER_KNOBS->STORAGE_COMMIT_INTERVAL, TaskPriority::UpdateStorage); } - wait( durable ); + wait( ioTimeoutError(durable, SERVER_KNOBS->MAX_STORAGE_COMMIT_TIME)); debug_advanceMinCommittedVersion( data->thisServerID, newOldestVersion ); diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index 28b7deb180..f8fcf58ae7 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -110,6 +110,7 @@ FlowKnobs::FlowKnobs(bool randomize, bool isSimulated) { //GenericActors init( BUGGIFY_FLOW_LOCK_RELEASE_DELAY, 1.0 ); init( LOW_PRIORITY_DELAY_COUNT, 5 ); + init( LOW_PRIORITY_MAX_DELAY, 5.0 ); //IAsyncFile init( INCREMENTAL_DELETE_TRUNCATE_AMOUNT, 5e8 ); //500MB diff --git a/flow/Knobs.h b/flow/Knobs.h index 5dd746cc84..6c0c91a62a 100644 --- a/flow/Knobs.h +++ b/flow/Knobs.h @@ -130,6 +130,7 @@ public: //GenericActors double BUGGIFY_FLOW_LOCK_RELEASE_DELAY; int LOW_PRIORITY_DELAY_COUNT; + double LOW_PRIORITY_MAX_DELAY; //IAsyncFile int64_t INCREMENTAL_DELETE_TRUNCATE_AMOUNT; diff --git a/flow/genericactors.actor.cpp b/flow/genericactors.actor.cpp index 56f9c8a90e..20ddb1f0c4 100644 --- a/flow/genericactors.actor.cpp +++ b/flow/genericactors.actor.cpp @@ -86,8 +86,10 @@ ACTOR Future quorumEqualsTrue( std::vector> futures, int requ ACTOR Future lowPriorityDelay( double waitTime ) { state int loopCount = 0; - while(loopCount < FLOW_KNOBS->LOW_PRIORITY_DELAY_COUNT) { - wait(delay(waitTime/FLOW_KNOBS->LOW_PRIORITY_DELAY_COUNT, TaskPriority::Low)); + state int totalLoops = std::max(waitTime/FLOW_KNOBS->LOW_PRIORITY_MAX_DELAY,FLOW_KNOBS->LOW_PRIORITY_DELAY_COUNT); + + while(loopCount < totalLoops) { + wait(delay(waitTime/totalLoops, TaskPriority::Low)); loopCount++; } return Void(); From 34a82d6695e4a293670c63be80c4bb12df3b0bad Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 27 Jan 2021 13:18:13 -0800 Subject: [PATCH 199/317] io_timeout now causes storage servers to go into zombie now --- fdbserver/worker.actor.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fdbserver/worker.actor.cpp b/fdbserver/worker.actor.cpp index ac750c5458..f1cf0de601 100644 --- a/fdbserver/worker.actor.cpp +++ b/fdbserver/worker.actor.cpp @@ -185,8 +185,7 @@ ACTOR Future workerHandleErrors(FutureStream errors) { endRole(err.role, err.id, "Error", ok, err.error); - - if (err.error.code() == error_code_please_reboot || err.error.code() == error_code_io_timeout || (err.role == Role::SHARED_TRANSACTION_LOG && err.error.code() == error_code_io_error )) throw err.error; + if (err.error.code() == error_code_please_reboot || (err.role == Role::SHARED_TRANSACTION_LOG && (err.error.code() == error_code_io_error || err.error.code() == error_code_io_timeout))) throw err.error; } } } From 3ee5831287987b6b38b6c5b72f2ca26e2344d8f9 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 27 Jan 2021 13:57:54 -0800 Subject: [PATCH 200/317] fault injection can now cause a disk to stop responding --- fdbrpc/sim2.actor.cpp | 21 +++++++++++++++------ fdbrpc/simulator.h | 5 +++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/fdbrpc/sim2.actor.cpp b/fdbrpc/sim2.actor.cpp index 4688e223ae..ea6b556a7b 100644 --- a/fdbrpc/sim2.actor.cpp +++ b/fdbrpc/sim2.actor.cpp @@ -1262,7 +1262,6 @@ public: void killProcess_internal( ProcessInfo* machine, KillType kt ) { TEST( true ); // Simulated machine was killed with any kill type TEST( kt == KillInstantly ); // Simulated machine was killed instantly - TEST( kt == InjectFaults ); // Simulated machine was killed with faults if (kt == KillInstantly) { TraceEvent(SevWarn, "FailMachine").detail("Name", machine->name).detail("Address", machine->address).detail("ZoneId", machine->locality.zoneId()).detail("Process", machine->toString()).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace(); @@ -1270,11 +1269,18 @@ public: latestEventCache.clear(); machine->failed = true; } else if (kt == InjectFaults) { - TraceEvent(SevWarn, "FaultMachine").detail("Name", machine->name).detail("Address", machine->address).detail("ZoneId", machine->locality.zoneId()).detail("Process", machine->toString()).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace(); - should_inject_fault = simulator_should_inject_fault; - machine->fault_injection_r = deterministicRandom()->randomUniqueID().first(); - machine->fault_injection_p1 = 0.1; - machine->fault_injection_p2 = deterministicRandom()->random01(); + if(determisticRandom()->random01() < 0.3) { + TraceEvent(SevWarn, "FailDiskMachine").detail("Name", machine->name).detail("Address", machine->address).detail("ZoneId", machine->locality.zoneId()).detail("Process", machine->toString()).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace(); + TEST(true); // Simulated machine was killed with a failed disk + machine->failedDisk = true; + } else { + TEST(true); // Simulated machine was killed with faults + TraceEvent(SevWarn, "FaultMachine").detail("Name", machine->name).detail("Address", machine->address).detail("ZoneId", machine->locality.zoneId()).detail("Process", machine->toString()).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace(); + should_inject_fault = simulator_should_inject_fault; + machine->fault_injection_r = deterministicRandom()->randomUniqueID().first(); + machine->fault_injection_p1 = 0.1; + machine->fault_injection_p2 = deterministicRandom()->random01(); + } } else { ASSERT( false ); } @@ -1760,6 +1766,9 @@ ACTOR void doReboot( ISimulator::ProcessInfo *p, ISimulator::KillType kt ) { //Simulates delays for performing operations on disk Future waitUntilDiskReady( Reference diskParameters, int64_t size, bool sync ) { + if(g_simulator.getCurrentProcess()->machine.failedDisk) { + wait(Future(Never())); + } if(g_simulator.connectionFailuresDisableDuration > 1e4) return delay(0.0001); diff --git a/fdbrpc/simulator.h b/fdbrpc/simulator.h index 879224827c..7a5d54e1b6 100644 --- a/fdbrpc/simulator.h +++ b/fdbrpc/simulator.h @@ -68,6 +68,7 @@ public: uint64_t fault_injection_r; double fault_injection_p1, fault_injection_p2; + bool failedDisk; ProcessInfo(const char* name, LocalityData locality, ProcessClass startingClass, NetworkAddressList addresses, INetworkConnections *net, const char* dataFolder, const char* coordinationFolder ) @@ -75,11 +76,11 @@ public: addresses(addresses), address(addresses.address), dataFolder(dataFolder), network(net), coordinationFolder(coordinationFolder), failed(false), excluded(false), cpuTicks(0), rebooting(false), fault_injection_p1(0), fault_injection_p2(0), - fault_injection_r(0), machine(0), cleared(false) {} + fault_injection_r(0), machine(0), cleared(false), failedDisk(false) {} Future onShutdown() { return shutdownSignal.getFuture(); } - bool isReliable() const { return !failed && fault_injection_p1 == 0 && fault_injection_p2 == 0; } + bool isReliable() const { return !failed && fault_injection_p1 == 0 && fault_injection_p2 == 0 && !failedDisk; } bool isAvailable() const { return !isExcluded() && isReliable(); } bool isExcluded() const { return excluded; } bool isCleared() const { return cleared; } From b9a4c7418a54f2b5705ca6a696cfef3ad748a137 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 27 Jan 2021 14:10:06 -0800 Subject: [PATCH 201/317] fixed typo --- fdbrpc/sim2.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbrpc/sim2.actor.cpp b/fdbrpc/sim2.actor.cpp index ea6b556a7b..be7527ed07 100644 --- a/fdbrpc/sim2.actor.cpp +++ b/fdbrpc/sim2.actor.cpp @@ -1269,7 +1269,7 @@ public: latestEventCache.clear(); machine->failed = true; } else if (kt == InjectFaults) { - if(determisticRandom()->random01() < 0.3) { + if(deterministicRandom()->random01() < 0.3) { TraceEvent(SevWarn, "FailDiskMachine").detail("Name", machine->name).detail("Address", machine->address).detail("ZoneId", machine->locality.zoneId()).detail("Process", machine->toString()).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace(); TEST(true); // Simulated machine was killed with a failed disk machine->failedDisk = true; From f30ae07a2d7f99bc345cdf32308a037917def2b0 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 27 Jan 2021 14:10:36 -0800 Subject: [PATCH 202/317] fixed compile error --- fdbrpc/sim2.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbrpc/sim2.actor.cpp b/fdbrpc/sim2.actor.cpp index be7527ed07..dbd555e15a 100644 --- a/fdbrpc/sim2.actor.cpp +++ b/fdbrpc/sim2.actor.cpp @@ -1766,7 +1766,7 @@ ACTOR void doReboot( ISimulator::ProcessInfo *p, ISimulator::KillType kt ) { //Simulates delays for performing operations on disk Future waitUntilDiskReady( Reference diskParameters, int64_t size, bool sync ) { - if(g_simulator.getCurrentProcess()->machine.failedDisk) { + if(g_simulator.getCurrentProcess()->machine->failedDisk) { wait(Future(Never())); } if(g_simulator.connectionFailuresDisableDuration > 1e4) From 75b24da109278ffac72635e6414c54a9bec5f4b2 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 27 Jan 2021 14:12:18 -0800 Subject: [PATCH 203/317] fixed cast --- flow/genericactors.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flow/genericactors.actor.cpp b/flow/genericactors.actor.cpp index 20ddb1f0c4..d0f730f3a9 100644 --- a/flow/genericactors.actor.cpp +++ b/flow/genericactors.actor.cpp @@ -86,7 +86,7 @@ ACTOR Future quorumEqualsTrue( std::vector> futures, int requ ACTOR Future lowPriorityDelay( double waitTime ) { state int loopCount = 0; - state int totalLoops = std::max(waitTime/FLOW_KNOBS->LOW_PRIORITY_MAX_DELAY,FLOW_KNOBS->LOW_PRIORITY_DELAY_COUNT); + state int totalLoops = std::max(waitTime/FLOW_KNOBS->LOW_PRIORITY_MAX_DELAY,FLOW_KNOBS->LOW_PRIORITY_DELAY_COUNT); while(loopCount < totalLoops) { wait(delay(waitTime/totalLoops, TaskPriority::Low)); From 36e4f82115a02f2464c06611d52ac4fa4f7065ad Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 27 Jan 2021 14:29:43 -0800 Subject: [PATCH 204/317] more complete support for simulated disk failures --- fdbrpc/sim2.actor.cpp | 34 +++++++++---------- fdbrpc/simulator.h | 2 +- .../workloads/MachineAttrition.actor.cpp | 13 +++++-- 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/fdbrpc/sim2.actor.cpp b/fdbrpc/sim2.actor.cpp index dbd555e15a..cdfa2cb327 100644 --- a/fdbrpc/sim2.actor.cpp +++ b/fdbrpc/sim2.actor.cpp @@ -1122,7 +1122,7 @@ public: int nQuorum = ((desiredCoordinators+1)/2)*2-1; KillType newKt = kt; - if ((kt == KillInstantly) || (kt == InjectFaults) || (kt == RebootAndDelete) || (kt == RebootProcessAndDelete)) + if ((kt == KillInstantly) || (kt == InjectFaults) || (kt == FailDisk) || (kt == RebootAndDelete) || (kt == RebootProcessAndDelete)) { LocalityGroup primaryProcessesLeft, primaryProcessesDead; LocalityGroup primarySatelliteProcessesLeft, primarySatelliteProcessesDead; @@ -1262,6 +1262,8 @@ public: void killProcess_internal( ProcessInfo* machine, KillType kt ) { TEST( true ); // Simulated machine was killed with any kill type TEST( kt == KillInstantly ); // Simulated machine was killed instantly + TEST( kt == InjectFaults ); // Simulated machine was killed with faults + TEST( kt == FailDisk ); // Simulated machine was killed with a failed disk if (kt == KillInstantly) { TraceEvent(SevWarn, "FailMachine").detail("Name", machine->name).detail("Address", machine->address).detail("ZoneId", machine->locality.zoneId()).detail("Process", machine->toString()).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace(); @@ -1269,18 +1271,14 @@ public: latestEventCache.clear(); machine->failed = true; } else if (kt == InjectFaults) { - if(deterministicRandom()->random01() < 0.3) { - TraceEvent(SevWarn, "FailDiskMachine").detail("Name", machine->name).detail("Address", machine->address).detail("ZoneId", machine->locality.zoneId()).detail("Process", machine->toString()).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace(); - TEST(true); // Simulated machine was killed with a failed disk - machine->failedDisk = true; - } else { - TEST(true); // Simulated machine was killed with faults - TraceEvent(SevWarn, "FaultMachine").detail("Name", machine->name).detail("Address", machine->address).detail("ZoneId", machine->locality.zoneId()).detail("Process", machine->toString()).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace(); - should_inject_fault = simulator_should_inject_fault; - machine->fault_injection_r = deterministicRandom()->randomUniqueID().first(); - machine->fault_injection_p1 = 0.1; - machine->fault_injection_p2 = deterministicRandom()->random01(); - } + TraceEvent(SevWarn, "FaultMachine").detail("Name", machine->name).detail("Address", machine->address).detail("ZoneId", machine->locality.zoneId()).detail("Process", machine->toString()).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace(); + should_inject_fault = simulator_should_inject_fault; + machine->fault_injection_r = deterministicRandom()->randomUniqueID().first(); + machine->fault_injection_p1 = 0.1; + machine->fault_injection_p2 = deterministicRandom()->random01(); + } else if (kt == FailDisk) { + TraceEvent(SevWarn, "FailDiskMachine").detail("Name", machine->name).detail("Address", machine->address).detail("ZoneId", machine->locality.zoneId()).detail("Process", machine->toString()).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace(); + machine->failedDisk = true; } else { ASSERT( false ); } @@ -1371,7 +1369,7 @@ public: } // Check if machine can be removed, if requested - if (!forceKill && ((kt == KillInstantly) || (kt == InjectFaults) || (kt == RebootAndDelete) || (kt == RebootProcessAndDelete))) + if (!forceKill && ((kt == KillInstantly) || (kt == InjectFaults) || (kt == FailDisk) || (kt == RebootAndDelete) || (kt == RebootProcessAndDelete))) { std::vector processesLeft, processesDead; int protectedWorker = 0, unavailable = 0, excluded = 0, cleared = 0; @@ -1404,7 +1402,7 @@ public: if (!canKillProcesses(processesLeft, processesDead, kt, &kt)) { TraceEvent("ChangedKillMachine").detail("MachineId", machineId).detail("KillType", kt).detail("OrigKillType", ktOrig).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("TotalProcesses", machines.size()).detail("ProcessesPerMachine", processesPerMachine).detail("Protected", protectedWorker).detail("Unavailable", unavailable).detail("Excluded", excluded).detail("Cleared", cleared).detail("ProtectedTotal", protectedAddresses.size()).detail("TLogPolicy", tLogPolicy->info()).detail("StoragePolicy", storagePolicy->info()); } - else if ((kt == KillInstantly) || (kt == InjectFaults)) { + else if ((kt == KillInstantly) || (kt == InjectFaults) || (kt == FailDisk)) { TraceEvent("DeadMachine").detail("MachineId", machineId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("TotalProcesses", machines.size()).detail("ProcessesPerMachine", processesPerMachine).detail("TLogPolicy", tLogPolicy->info()).detail("StoragePolicy", storagePolicy->info()); for (auto process : processesLeft) { TraceEvent("DeadMachineSurvivors").detail("MachineId", machineId).detail("KillType", kt).detail("ProcessesLeft", processesLeft.size()).detail("ProcessesDead", processesDead.size()).detail("SurvivingProcess", process->toString()); @@ -1444,7 +1442,7 @@ public: TraceEvent("KillMachine").detail("MachineId", machineId).detail("Kt", kt).detail("KtOrig", ktOrig).detail("KillableMachines", processesOnMachine).detail("ProcessPerMachine", processesPerMachine).detail("KillChanged", kt!=ktOrig); if ( kt < RebootAndDelete ) { - if(kt == InjectFaults && machines[machineId].machineProcess != nullptr) + if((kt == InjectFaults || kt == FailDisk) && machines[machineId].machineProcess != nullptr) killProcess_internal( machines[machineId].machineProcess, kt ); for (auto& process : machines[machineId].processes) { TraceEvent("KillMachineProcess").detail("KillType", kt).detail("Process", process->toString()).detail("StartingClass", process->startingClass.toString()).detail("Failed", process->failed).detail("Excluded", process->excluded).detail("Cleared", process->cleared).detail("Rebooting", process->rebooting); @@ -1492,7 +1490,7 @@ public: } // Check if machine can be removed, if requested - if (!forceKill && ((kt == KillInstantly) || (kt == InjectFaults) || (kt == RebootAndDelete) || (kt == RebootProcessAndDelete))) + if (!forceKill && ((kt == KillInstantly) || (kt == InjectFaults) || (kt == FailDisk) || (kt == RebootAndDelete) || (kt == RebootProcessAndDelete))) { std::vector processesLeft, processesDead; for (auto processInfo : getAllProcesses()) { @@ -1766,7 +1764,7 @@ ACTOR void doReboot( ISimulator::ProcessInfo *p, ISimulator::KillType kt ) { //Simulates delays for performing operations on disk Future waitUntilDiskReady( Reference diskParameters, int64_t size, bool sync ) { - if(g_simulator.getCurrentProcess()->machine->failedDisk) { + if(g_simulator.getCurrentProcess()->failedDisk) { wait(Future(Never())); } if(g_simulator.connectionFailuresDisableDuration > 1e4) diff --git a/fdbrpc/simulator.h b/fdbrpc/simulator.h index 7a5d54e1b6..b45a8e8cfd 100644 --- a/fdbrpc/simulator.h +++ b/fdbrpc/simulator.h @@ -38,7 +38,7 @@ public: ISimulator() : desiredCoordinators(1), physicalDatacenters(1), processesPerMachine(0), listenersPerProcess(1), isStopped(false), lastConnectionFailure(0), connectionFailuresDisableDuration(0), speedUpSimulation(false), allSwapsDisabled(false), backupAgents(WaitForType), drAgents(WaitForType), extraDB(NULL), allowLogSetKills(true), usableRegions(1) {} // Order matters! - enum KillType { KillInstantly, InjectFaults, RebootAndDelete, RebootProcessAndDelete, Reboot, RebootProcess, None }; + enum KillType { KillInstantly, InjectFaults, FailDisk, RebootAndDelete, RebootProcessAndDelete, Reboot, RebootProcess, None }; enum BackupAgentType { NoBackupAgents, WaitForType, BackupToFile, BackupToDB }; diff --git a/fdbserver/workloads/MachineAttrition.actor.cpp b/fdbserver/workloads/MachineAttrition.actor.cpp index 32c2aacf10..519e2755c1 100644 --- a/fdbserver/workloads/MachineAttrition.actor.cpp +++ b/fdbserver/workloads/MachineAttrition.actor.cpp @@ -155,11 +155,13 @@ struct MachineAttritionWorkload : TestWorkload { ISimulator::KillType kt = ISimulator::Reboot; if( !self->reboot ) { - int killType = deterministicRandom()->randomInt(0,3); + int killType = deterministicRandom()->randomInt(0,4); if( killType == 0 ) kt = ISimulator::KillInstantly; else if( killType == 1 ) kt = ISimulator::InjectFaults; + else if( killType == 2 ) + kt = ISimulator::FailDisk; else kt = ISimulator::RebootAndDelete; } @@ -221,7 +223,14 @@ struct MachineAttritionWorkload : TestWorkload { TraceEvent("RebootAndDelete").detail("TargetMachine", targetMachine.toString()); g_simulator.killZone( targetMachine.zoneId(), ISimulator::RebootAndDelete ); } else { - auto kt = (deterministicRandom()->random01() < 0.5 || !self->allowFaultInjection) ? ISimulator::KillInstantly : ISimulator::InjectFaults; + auto kt = ISimulator::KillInstantly; + if( self->allowFaultInjection ) { + if( randomDouble < 0.56 ) { + kt = ISimulator::InjectFaults; + } else if( randomDouble < 0.66 ) { + kt = ISimulator::FailDisk; + } + } g_simulator.killZone( targetMachine.zoneId(), kt ); } } From cf6a8e5df73b59b65a845ba326af26292be3a2e6 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 27 Jan 2021 14:36:02 -0800 Subject: [PATCH 205/317] waitUntilDiskReady is not an actor --- fdbrpc/sim2.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbrpc/sim2.actor.cpp b/fdbrpc/sim2.actor.cpp index cdfa2cb327..5a0b610f58 100644 --- a/fdbrpc/sim2.actor.cpp +++ b/fdbrpc/sim2.actor.cpp @@ -1765,7 +1765,7 @@ ACTOR void doReboot( ISimulator::ProcessInfo *p, ISimulator::KillType kt ) { //Simulates delays for performing operations on disk Future waitUntilDiskReady( Reference diskParameters, int64_t size, bool sync ) { if(g_simulator.getCurrentProcess()->failedDisk) { - wait(Future(Never())); + return Never(); } if(g_simulator.connectionFailuresDisableDuration > 1e4) return delay(0.0001); From 14e39a874721c611059c9ccac3d477c4690ef827 Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Thu, 28 Jan 2021 00:59:05 -0800 Subject: [PATCH 206/317] Another bug fix in SQLite file instance lifetimes. Writer can be destroyed before doClose() or stopOnError() have a chance to react, so Writer can't be used to get access to file handles to remove the rate limiter and trigger pending requests to complete. New logic is for Writer initialization to place opened file handles in KeyValueStoreSQLite instance and move disableRateControl() there, to be called from doClose(). --- fdbserver/KeyValueStoreSQLite.actor.cpp | 61 ++++++++++++------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 48a0900a04..661246c50d 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -290,23 +290,6 @@ struct SQLiteDB : NonCopyable { } } - void disableRateControl() { - if(dbFile && dbFile->getRateControl()) { - TraceEvent(SevDebug, "SQLiteDBShutdownRateControl").detail("Filename", dbFile->getFilename()); - Reference rc = dbFile->getRateControl(); - dbFile->setRateControl({}); - rc->wakeWaiters(); - } - - if(walFile && walFile->getRateControl()) { - TraceEvent(SevDebug, "SQLiteDBShutdownRateControl").detail("Filename", walFile->getFilename()); - Reference rc = walFile->getRateControl(); - walFile->setRateControl({}); - rc->wakeWaiters(); - } - - } - void checkpoint( bool restart ) { int logSize=0, checkpointCount=0; //double t = timer(); @@ -1564,10 +1547,8 @@ private: volatile int64_t diskBytesUsed; volatile int64_t freeListPages; - struct Writer; - Writer *writer; - vector< Reference > readCursors; + Reference dbFile, walFile; struct Reader : IThreadPoolReceiver { SQLiteDB conn; @@ -1649,6 +1630,7 @@ private: }; struct Writer : IThreadPoolReceiver { + KeyValueStoreSQLite *kvs; SQLiteDB conn; Cursor* cursor; int commits; @@ -1663,8 +1645,9 @@ private: bool checkAllChecksumsOnOpen; bool checkIntegrityOnOpen; - explicit Writer( std::string const& filename, bool isBtreeV2, bool checkAllChecksumsOnOpen, bool checkIntegrityOnOpen, volatile int64_t& writesComplete, volatile SpringCleaningStats& springCleaningStats, volatile int64_t& diskBytesUsed, volatile int64_t& freeListPages, UID dbgid, vector>* pReadThreads ) - : conn( filename, isBtreeV2, isBtreeV2 ), + explicit Writer( KeyValueStoreSQLite *kvs, bool isBtreeV2, bool checkAllChecksumsOnOpen, bool checkIntegrityOnOpen, volatile int64_t& writesComplete, volatile SpringCleaningStats& springCleaningStats, volatile int64_t& diskBytesUsed, volatile int64_t& freeListPages, UID dbgid, vector>* pReadThreads ) + : kvs(kvs), + conn( kvs->filename, isBtreeV2, isBtreeV2 ), commits(), setsThisCommit(), freeTableEmpty(false), writesComplete(writesComplete), @@ -1694,6 +1677,8 @@ private: } } conn.open(true); + kvs->dbFile = conn.dbFile; + kvs->walFile = conn.walFile; //If a wal file fails during the commit process before finishing a checkpoint, then it is possible that our wal file will be non-empty //when we reload it. We execute a checkpoint here to remedy that situation. This call must come before before creating a cursor because @@ -1930,6 +1915,22 @@ private: } } + void disableRateControl() { + if(dbFile && dbFile->getRateControl()) { + TraceEvent(SevDebug, "KeyValueStoreSQLiteShutdownRateControl").detail("Filename", dbFile->getFilename()); + Reference rc = dbFile->getRateControl(); + dbFile->setRateControl({}); + rc->wakeWaiters(); + } + + if(walFile && walFile->getRateControl()) { + TraceEvent(SevDebug, "KeyValueStoreSQLiteShutdownRateControl").detail("Filename", walFile->getFilename()); + Reference rc = walFile->getRateControl(); + walFile->setRateControl({}); + rc->wakeWaiters(); + } + } + ACTOR static Future stopOnError( KeyValueStoreSQLite* self ) { try { wait( self->readThreads->getError() || self->writeThread->getError() ); @@ -1938,8 +1939,9 @@ private: if (e.code() == error_code_actor_cancelled) throw; - self->readThreads->stop(e); - self->writeThread->stop(e); + self->disableRateControl(); + self->readThreads->stop(e).isReady(); + self->writeThread->stop(e).isReady(); } return Void(); @@ -1948,10 +1950,7 @@ private: ACTOR static void doClose( KeyValueStoreSQLite* self, bool deleteOnClose ) { state Error error = success(); - if(self->writer != nullptr) { - self->writer->conn.disableRateControl(); - wait(delay(0)); - } + self->disableRateControl(); try { TraceEvent("KVClose", self->logID) @@ -2020,8 +2019,7 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke logID(id), readThreads(CoroThreadPool::createThreadPool()), writeThread(CoroThreadPool::createThreadPool()), - readsRequested(0), writesRequested(0), writesComplete(0), diskBytesUsed(0), freeListPages(0), - writer(nullptr) + readsRequested(0), writesRequested(0), writesComplete(0), diskBytesUsed(0), freeListPages(0) { TraceEvent(SevDebug, "KeyValueStoreSQLiteCreate") .detail("Filename", filename); @@ -2045,8 +2043,7 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke sqlite3_soft_heap_limit64( SERVER_KNOBS->SOFT_HEAP_LIMIT ); // SOMEDAY: Is this a performance issue? Should we drop the cache sizes for individual threads? TaskPriority taskId = g_network->getCurrentTask(); g_network->setCurrentTask(TaskPriority::DiskWrite); - writer = new Writer(filename, type==KeyValueStoreType::SSD_BTREE_V2, checkChecksums, checkIntegrity, writesComplete, springCleaningStats, diskBytesUsed, freeListPages, id, &readCursors); - writeThread->addThread(writer); + writeThread->addThread(new Writer(this, type==KeyValueStoreType::SSD_BTREE_V2, checkChecksums, checkIntegrity, writesComplete, springCleaningStats, diskBytesUsed, freeListPages, id, &readCursors)); g_network->setCurrentTask(taskId); auto p = new Writer::InitAction(); auto f = p->result.getFuture(); From aa9d97bf2264d0461238cf232243ed246d7f11e3 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Thu, 28 Jan 2021 12:34:25 -0800 Subject: [PATCH 207/317] validate that failDisk is being triggered in simulation --- fdbrpc/sim2.actor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/fdbrpc/sim2.actor.cpp b/fdbrpc/sim2.actor.cpp index 5a0b610f58..e76bbb2d1f 100644 --- a/fdbrpc/sim2.actor.cpp +++ b/fdbrpc/sim2.actor.cpp @@ -1278,6 +1278,7 @@ public: machine->fault_injection_p2 = deterministicRandom()->random01(); } else if (kt == FailDisk) { TraceEvent(SevWarn, "FailDiskMachine").detail("Name", machine->name).detail("Address", machine->address).detail("ZoneId", machine->locality.zoneId()).detail("Process", machine->toString()).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace(); + ASSERT(false); machine->failedDisk = true; } else { ASSERT( false ); From 69f1ad9276e66919bcaa5bdd4411d085f2f590a6 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Thu, 28 Jan 2021 15:27:13 -0800 Subject: [PATCH 208/317] Add release note for PR 4166 --- documentation/sphinx/source/release-notes/release-notes-620.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/sphinx/source/release-notes/release-notes-620.rst b/documentation/sphinx/source/release-notes/release-notes-620.rst index fa51a8190f..222fbdfb10 100644 --- a/documentation/sphinx/source/release-notes/release-notes-620.rst +++ b/documentation/sphinx/source/release-notes/release-notes-620.rst @@ -13,6 +13,7 @@ Release Notes * Add documentation on read and write Path. `(PR #4099) `_ * Add a histogram to expose commit batching window on Proxies. `(PR #4166) `_ * Fix double counting of range reads in TransactionMetrics. `(PR #4130) `_ +* Added a trace event that can be used as an indicator of the load on the proxy. `(PR #4166) `_ 6.2.28 ====== From 309a0d88e6c9d1ddee50997f26413170f154498d Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Thu, 28 Jan 2021 15:29:24 -0800 Subject: [PATCH 209/317] Update documentation/sphinx/source/release-notes/release-notes-620.rst --- documentation/sphinx/source/release-notes/release-notes-620.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/sphinx/source/release-notes/release-notes-620.rst b/documentation/sphinx/source/release-notes/release-notes-620.rst index 222fbdfb10..4aad02f1a8 100644 --- a/documentation/sphinx/source/release-notes/release-notes-620.rst +++ b/documentation/sphinx/source/release-notes/release-notes-620.rst @@ -13,7 +13,7 @@ Release Notes * Add documentation on read and write Path. `(PR #4099) `_ * Add a histogram to expose commit batching window on Proxies. `(PR #4166) `_ * Fix double counting of range reads in TransactionMetrics. `(PR #4130) `_ -* Added a trace event that can be used as an indicator of the load on the proxy. `(PR #4166) `_ +* Add a trace event that can be used as an indicator of the load on the proxy. `(PR #4166) `_ 6.2.28 ====== From 80c302e5c9e96edbfa0b5476857a8ddd8ab41921 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Thu, 28 Jan 2021 17:52:06 -0800 Subject: [PATCH 210/317] removed assert --- fdbrpc/sim2.actor.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/fdbrpc/sim2.actor.cpp b/fdbrpc/sim2.actor.cpp index e76bbb2d1f..5a0b610f58 100644 --- a/fdbrpc/sim2.actor.cpp +++ b/fdbrpc/sim2.actor.cpp @@ -1278,7 +1278,6 @@ public: machine->fault_injection_p2 = deterministicRandom()->random01(); } else if (kt == FailDisk) { TraceEvent(SevWarn, "FailDiskMachine").detail("Name", machine->name).detail("Address", machine->address).detail("ZoneId", machine->locality.zoneId()).detail("Process", machine->toString()).detail("Rebooting", machine->rebooting).detail("Protected", protectedAddresses.count(machine->address)).backtrace(); - ASSERT(false); machine->failedDisk = true; } else { ASSERT( false ); From a207fff82e7e8ef2753f4d5b7a524c2a2b50a9ca Mon Sep 17 00:00:00 2001 From: Bhaskar Muppana Date: Thu, 28 Jan 2021 18:28:08 -0800 Subject: [PATCH 211/317] Adding debug tools to FDB runtime image --- packaging/docker/Dockerfile | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packaging/docker/Dockerfile b/packaging/docker/Dockerfile index dc514870f3..67a2140ede 100644 --- a/packaging/docker/Dockerfile +++ b/packaging/docker/Dockerfile @@ -23,9 +23,20 @@ FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y curl>=7.58.0-2ubuntu3.6 \ - dnsutils>=1:9.11.3+dfsg-1ubuntu1.7 && \ + dnsutils>=1:9.11.3+dfsg-1ubuntu1.7 \ + lsof>=4.89+dfsg-0.1 \ + tcptraceroute>=1.5beta7+debian-4build1 \ + telnet>=0.17-41 \ + netcat>= 1.10-41.1 \ + strace>=4.21-1ubuntu1 \ + tcpdump>=4.9.3-0ubuntu0.18.04.1 \ + less>=487-0.1 \ + vim>=2:8.0.1453-1ubuntu1.4 \ + net-tools>=1.60+git20161116.90da8a0-1ubuntu1 \ + jq>=1.5+dfsg-2 && \ rm -r /var/lib/apt/lists/* + # Install FoundationDB Binaries ARG FDB_VERSION From 304cb107589aabba90c9a162bf693b93226b39b2 Mon Sep 17 00:00:00 2001 From: Alvin Moore Date: Fri, 29 Jan 2021 11:21:50 -0500 Subject: [PATCH 212/317] Enabled warnings as errors within CI --- build/docker-compose.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build/docker-compose.yaml b/build/docker-compose.yaml index d59251e524..74f199ab41 100644 --- a/build/docker-compose.yaml +++ b/build/docker-compose.yaml @@ -60,7 +60,7 @@ services: snapshot-cmake: &snapshot-cmake <<: *build-setup - command: scl enable devtoolset-8 rh-python36 rh-ruby24 -- bash -c 'mkdir -p "$${BUILD_DIR}" && cd "$${BUILD_DIR}" && cmake -G "Ninja" -DFDB_RELEASE=0 /__this_is_some_very_long_name_dir_needed_to_fix_a_bug_with_debug_rpms__/foundationdb && ninja -v -j "$${MAKEJOBS}" "packages" "strip_targets" && cpack' + command: scl enable devtoolset-8 rh-python36 rh-ruby24 -- bash -c 'mkdir -p "$${BUILD_DIR}" && cd "$${BUILD_DIR}" && cmake -G "Ninja" -DFDB_RELEASE=0 -DUSE_WERROR=ON /__this_is_some_very_long_name_dir_needed_to_fix_a_bug_with_debug_rpms__/foundationdb && ninja -v -j "$${MAKEJOBS}" "packages" "strip_targets" && cpack' prb-cmake: <<: *snapshot-cmake @@ -68,7 +68,7 @@ services: snapshot-bindings-cmake: &snapshot-bindings-cmake <<: *build-setup - command: scl enable devtoolset-8 rh-python36 rh-ruby24 -- bash -c 'mkdir -p "$${BUILD_DIR}" && cd "$${BUILD_DIR}" && cmake -G "Ninja" -DFDB_RELEASE=0 /__this_is_some_very_long_name_dir_needed_to_fix_a_bug_with_debug_rpms__/foundationdb && ninja -v -j "$${MAKEJOBS}" "bindings/all"' + command: scl enable devtoolset-8 rh-python36 rh-ruby24 -- bash -c 'mkdir -p "$${BUILD_DIR}" && cd "$${BUILD_DIR}" && cmake -G "Ninja" -DFDB_RELEASE=0 -DUSE_WERROR=ON /__this_is_some_very_long_name_dir_needed_to_fix_a_bug_with_debug_rpms__/foundationdb && ninja -v -j "$${MAKEJOBS}" "bindings/all"' prb-bindings-cmake: <<: *snapshot-bindings-cmake @@ -76,7 +76,7 @@ services: snapshot-ctest: &snapshot-ctest <<: *build-setup - command: scl enable devtoolset-8 rh-python36 rh-ruby24 -- bash -c 'mkdir -p "$${BUILD_DIR}" && cd "$${BUILD_DIR}" && cmake -G "Ninja" -DFDB_RELEASE=1 /__this_is_some_very_long_name_dir_needed_to_fix_a_bug_with_debug_rpms__/foundationdb && ninja -v -j "$${MAKEJOBS}" && ctest -L fast -j "$${MAKEJOBS}" --output-on-failure' + command: scl enable devtoolset-8 rh-python36 rh-ruby24 -- bash -c 'mkdir -p "$${BUILD_DIR}" && cd "$${BUILD_DIR}" && cmake -G "Ninja" -DFDB_RELEASE=1 -DUSE_WERROR=ON /__this_is_some_very_long_name_dir_needed_to_fix_a_bug_with_debug_rpms__/foundationdb && ninja -v -j "$${MAKEJOBS}" && ctest -L fast -j "$${MAKEJOBS}" --output-on-failure' prb-ctest: <<: *snapshot-ctest @@ -84,7 +84,7 @@ services: snapshot-correctness: &snapshot-correctness <<: *build-setup - command: scl enable devtoolset-8 rh-python36 rh-ruby24 -- bash -c 'mkdir -p "$${BUILD_DIR}" && cd "$${BUILD_DIR}" && cmake -G "Ninja" -DFDB_RELEASE=1 /__this_is_some_very_long_name_dir_needed_to_fix_a_bug_with_debug_rpms__/foundationdb && ninja -v -j "$${MAKEJOBS}" && ctest -j "$${MAKEJOBS}" --output-on-failure' + command: scl enable devtoolset-8 rh-python36 rh-ruby24 -- bash -c 'mkdir -p "$${BUILD_DIR}" && cd "$${BUILD_DIR}" && cmake -G "Ninja" -DFDB_RELEASE=1 -DUSE_WERROR=ON /__this_is_some_very_long_name_dir_needed_to_fix_a_bug_with_debug_rpms__/foundationdb && ninja -v -j "$${MAKEJOBS}" && ctest -j "$${MAKEJOBS}" --output-on-failure' prb-correctness: <<: *snapshot-correctness From a7501fb122c23ca376312744866253f105a46f03 Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Wed, 27 Jan 2021 16:37:04 -0700 Subject: [PATCH 213/317] install boost in docker image and make sure cmake finds it --- build/Dockerfile | 16 +++++-- build/Dockerfile.c7.layered | 88 +++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 build/Dockerfile.c7.layered diff --git a/build/Dockerfile b/build/Dockerfile index 1ad06ba986..f848b60417 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -29,17 +29,25 @@ USER root RUN adduser --comment '' fdb && chown fdb /opt # wget of bintray without forcing UTF-8 encoding results in 403 Forbidden +# Old versions of FDB need boost 1.67 RUN cd /opt/ &&\ curl -L https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.bz2 -o boost_1_67_0.tar.bz2 &&\ echo "2684c972994ee57fc5632e03bf044746f6eb45d4920c343937a465fd67a5adba boost_1_67_0.tar.bz2" > boost-sha-67.txt &&\ sha256sum -c boost-sha-67.txt &&\ tar -xjf boost_1_67_0.tar.bz2 &&\ - rm -rf boost_1_67_0.tar.bz2 boost-sha-67.txt boost_1_67_0/libs &&\ + rm -rf boost_1_67_0.tar.bz2 boost-sha-67.txt boost_1_67_0/libs + +# install Boost 1.72 +# wget of bintray without forcing UTF-8 encoding results in 403 Forbidden +RUN cd /tmp/ &&\ curl -L https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.bz2 -o boost_1_72_0.tar.bz2 &&\ echo "59c9b274bc451cf91a9ba1dd2c7fdcaf5d60b1b3aa83f2c9fa143417cc660722 boost_1_72_0.tar.bz2" > boost-sha-72.txt &&\ sha256sum -c boost-sha-72.txt &&\ tar -xjf boost_1_72_0.tar.bz2 &&\ - rm -rf boost_1_72_0.tar.bz2 boost-sha-72.txt boost_1_72_0/libs + cd boost_1_72_0 &&\ + scl enable devtoolset-8 -- ./bootstrap.sh --with-libraries=context &&\ + scl enable devtoolset-8 -- ./b2 link=static cxxflags=-std=c++14 --prefix=/opt/boost_1_72_0 install &&\ + rm -rf boost_1_72_0.tar.bz2 boost-sha-72.txt boost_1_72_0 # install cmake RUN curl -L https://github.com/Kitware/CMake/releases/download/v3.13.4/cmake-3.13.4-Linux-x86_64.tar.gz -o /tmp/cmake.tar.gz &&\ @@ -110,8 +118,8 @@ RUN cd /opt/boringssl/build &&\ ARG TIMEZONEINFO=America/Los_Angeles RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/${TIMEZONEINFO} /etc/localtime -LABEL version=0.1.22 -ENV DOCKER_IMAGEVER=0.1.22 +LABEL version=0.1.23 +ENV DOCKER_IMAGEVER=0.1.23 ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0 ENV CC=/opt/rh/devtoolset-8/root/usr/bin/gcc ENV CXX=/opt/rh/devtoolset-8/root/usr/bin/g++ diff --git a/build/Dockerfile.c7.layered b/build/Dockerfile.c7.layered new file mode 100644 index 0000000000..bcbdbb887c --- /dev/null +++ b/build/Dockerfile.c7.layered @@ -0,0 +1,88 @@ +FROM centos:7 + +RUN yum install -y centos-release-scl scl-utils +RUN rpmkeys --import "http://pool.sks-keyservers.net/pks/lookup?op=get&search=0x3fa7e0328081bff6a14da29aa6a19b38d3d831ef" +RUN curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo +RUN yum install -y curl rpm-build wget git unzip devtoolset-8 devtoolset-8-libubsan-devel devtoolset-8-valgrind-devel \ + rh-ruby26 go-toolset-7 rh-git218 rh-python36-devel java-11-openjdk-devel.x86_64 mono-devel dos2unix dpkg rh-python36 \ + lz4 lz4-devel lz4-static + +# install Ninja +RUN cd /tmp && curl -L https://github.com/ninja-build/ninja/archive/v1.9.0.zip -o ninja.zip &&\ + unzip ninja.zip && cd ninja-1.9.0 && scl enable devtoolset-8 -- ./configure.py --bootstrap && cp ninja /usr/bin &&\ + cd .. && rm -rf ninja-1.9.0 ninja.zip + +# install cmake +RUN curl -L https://github.com/Kitware/CMake/releases/download/v3.13.4/cmake-3.13.4-Linux-x86_64.tar.gz -o /tmp/cmake.tar.gz &&\ + echo "563a39e0a7c7368f81bfa1c3aff8b590a0617cdfe51177ddc808f66cc0866c76 /tmp/cmake.tar.gz" > /tmp/cmake-sha.txt &&\ + sha256sum -c /tmp/cmake-sha.txt &&\ + cd /tmp && tar xf cmake.tar.gz &&\ + cp -r cmake-3.13.4-Linux-x86_64/* /usr/local/ &&\ + rm -rf cmake.tar.gz cmake-3.13.4-Linux-x86_64 cmake-sha.txt + +# install LLVM +RUN curl -L https://github.com/llvm/llvm-project/releases/download/llvmorg-11.0.0/llvm-project-11.0.0.tar.xz > /tmp/llvm.tar.xz +RUN cd tmp &&\ + echo "b7b639fc675fa1c86dd6d0bc32267be9eb34451748d2efd03f674b773000e92b llvm.tar.xz" > llvm-sha.txt &&\ + sha256sum -c llvm-sha.txt +RUN cd /tmp && tar xf llvm.tar.xz --no-same-owner +RUN mkdir /tmp/build && cd /tmp/build &&\ + scl enable devtoolset-8 -- cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF \ + -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld;lldb"\ + -DLLVM_STATIC_LINK_CXX_STDLIB=ON ../llvm-project-11.0.0/llvm +RUN cd /tmp/build && cmake --build . +RUN cd /tmp/build && cmake --build . --target install +RUN rm -rf /tmp/* + +# install openssl +RUN cd /tmp && curl -L https://www.openssl.org/source/openssl-1.1.1h.tar.gz -o openssl.tar.gz &&\ + echo "5c9ca8774bd7b03e5784f26ae9e9e6d749c9da2438545077e6b3d755a06595d9 openssl.tar.gz" > openssl-sha.txt &&\ + sha256sum -c openssl-sha.txt && tar -xzf openssl.tar.gz &&\ + cd openssl-1.1.1h && scl enable devtoolset-8 -- ./config CFLAGS="-fPIC -O3" --prefix=/usr/local &&\ + scl enable devtoolset-8 -- make -j`nproc` && scl enable devtoolset-8 -- make -j1 install &&\ + ln -sv /usr/local/lib64/lib*.so.1.1 /usr/lib64/ &&\ + cd /tmp/ && rm -rf /tmp/openssl-1.1.1h /tmp/openssl.tar.gz + +# install RocksDB +RUN cd /opt/ && curl -L https://github.com/facebook/rocksdb/archive/v6.10.1.tar.gz -o rocksdb.tar.gz &&\ + echo "d573d2f15cdda883714f7e0bc87b814a8d4a53a82edde558f08f940e905541ee rocksdb.tar.gz" > rocksdb-sha.txt &&\ + sha256sum -c rocksdb-sha.txt && tar xf rocksdb.tar.gz && rm -rf rocksdb.tar.gz rocksdb-sha.txt + +# wget of bintray without forcing UTF-8 encoding results in 403 Forbidden +# Old versions of FDB need boost 1.67 +RUN cd /opt/ &&\ + curl -L https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.bz2 -o boost_1_67_0.tar.bz2 &&\ + echo "2684c972994ee57fc5632e03bf044746f6eb45d4920c343937a465fd67a5adba boost_1_67_0.tar.bz2" > boost-sha-67.txt &&\ + sha256sum -c boost-sha-67.txt &&\ + tar -xjf boost_1_67_0.tar.bz2 &&\ + rm -rf boost_1_67_0.tar.bz2 boost-sha-67.txt boost_1_67_0/libs + +# install Boost +# wget of bintray without forcing UTF-8 encoding results in 403 Forbidden +RUN cd /tmp/ &&\ + curl -L https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.bz2 -o boost_1_72_0.tar.bz2 &&\ + echo "59c9b274bc451cf91a9ba1dd2c7fdcaf5d60b1b3aa83f2c9fa143417cc660722 boost_1_72_0.tar.bz2" > boost-sha-72.txt &&\ + sha256sum -c boost-sha-72.txt &&\ + tar -xjf boost_1_72_0.tar.bz2 &&\ + cd boost_1_72_0 &&\ + CC=/usr/local/bin/clang CXX=/usr/local/bin/clang++ ./bootstrap.sh --with-libraries=context &&\ + CC=/usr/local/bin/clang CXX=/usr/local/bin/clang++ ./b2 link=static cxxflags=-std=c++14 --prefix=/opt/boost_1_72_0 install &&\ + rm -rf boost_1_72_0.tar.bz2 boost-sha-72.txt boost_1_72_0 + + +# Install CCACHE +RUN cd /tmp && curl -L https://github.com/ccache/ccache/releases/download/v4.0/ccache-4.0.tar.gz > ccache.tar.gz &&\ + echo "ac97af86679028ebc8555c99318352588ff50f515fc3a7f8ed21a8ad367e3d45 ccache.tar.gz" > ccache-sha256.txt &&\ + sha256sum -c ccache-sha256.txt &&\ + tar xf ccache.tar.gz && rm -rf build && mkdir build && cd build && cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DZSTD_FROM_INTERNET=ON ../ccache-4.0 &&\ + cmake --build . --target install && cd / && rm -rf tmp/build && rm -rf tmp/ccache-4.0 + +# Install toml11 +RUN cd /tmp && curl -L https://github.com/ToruNiina/toml11/archive/v3.4.0.tar.gz > toml.tar.gz &&\ + echo "bc6d733efd9216af8c119d8ac64a805578c79cc82b813e4d1d880ca128bd154d toml.tar.gz" > toml-sha256.txt &&\ + sha256sum -c toml-sha256.txt &&\ + tar xf toml.tar.gz && rm -rf build && mkdir build && cd build && cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -Dtoml11_BUILD_TEST=OFF ../toml11-3.4.0 &&\ + cmake --build . --target install && cd / && rm -rf tmp/build && rm -rf tmp/toml11-3.4.0 + +# do some cleanup +RUN rm -rf /tmp/* && yum clean all && rm -rf /var/cache/yum From a056eb8136a7db9bc21fc86bf4cd5788079aa072 Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Fri, 29 Jan 2021 10:42:16 -0700 Subject: [PATCH 214/317] delete c7 file --- build/Dockerfile.c7.layered | 88 ------------------------------------- 1 file changed, 88 deletions(-) delete mode 100644 build/Dockerfile.c7.layered diff --git a/build/Dockerfile.c7.layered b/build/Dockerfile.c7.layered deleted file mode 100644 index bcbdbb887c..0000000000 --- a/build/Dockerfile.c7.layered +++ /dev/null @@ -1,88 +0,0 @@ -FROM centos:7 - -RUN yum install -y centos-release-scl scl-utils -RUN rpmkeys --import "http://pool.sks-keyservers.net/pks/lookup?op=get&search=0x3fa7e0328081bff6a14da29aa6a19b38d3d831ef" -RUN curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo -RUN yum install -y curl rpm-build wget git unzip devtoolset-8 devtoolset-8-libubsan-devel devtoolset-8-valgrind-devel \ - rh-ruby26 go-toolset-7 rh-git218 rh-python36-devel java-11-openjdk-devel.x86_64 mono-devel dos2unix dpkg rh-python36 \ - lz4 lz4-devel lz4-static - -# install Ninja -RUN cd /tmp && curl -L https://github.com/ninja-build/ninja/archive/v1.9.0.zip -o ninja.zip &&\ - unzip ninja.zip && cd ninja-1.9.0 && scl enable devtoolset-8 -- ./configure.py --bootstrap && cp ninja /usr/bin &&\ - cd .. && rm -rf ninja-1.9.0 ninja.zip - -# install cmake -RUN curl -L https://github.com/Kitware/CMake/releases/download/v3.13.4/cmake-3.13.4-Linux-x86_64.tar.gz -o /tmp/cmake.tar.gz &&\ - echo "563a39e0a7c7368f81bfa1c3aff8b590a0617cdfe51177ddc808f66cc0866c76 /tmp/cmake.tar.gz" > /tmp/cmake-sha.txt &&\ - sha256sum -c /tmp/cmake-sha.txt &&\ - cd /tmp && tar xf cmake.tar.gz &&\ - cp -r cmake-3.13.4-Linux-x86_64/* /usr/local/ &&\ - rm -rf cmake.tar.gz cmake-3.13.4-Linux-x86_64 cmake-sha.txt - -# install LLVM -RUN curl -L https://github.com/llvm/llvm-project/releases/download/llvmorg-11.0.0/llvm-project-11.0.0.tar.xz > /tmp/llvm.tar.xz -RUN cd tmp &&\ - echo "b7b639fc675fa1c86dd6d0bc32267be9eb34451748d2efd03f674b773000e92b llvm.tar.xz" > llvm-sha.txt &&\ - sha256sum -c llvm-sha.txt -RUN cd /tmp && tar xf llvm.tar.xz --no-same-owner -RUN mkdir /tmp/build && cd /tmp/build &&\ - scl enable devtoolset-8 -- cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF \ - -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld;lldb"\ - -DLLVM_STATIC_LINK_CXX_STDLIB=ON ../llvm-project-11.0.0/llvm -RUN cd /tmp/build && cmake --build . -RUN cd /tmp/build && cmake --build . --target install -RUN rm -rf /tmp/* - -# install openssl -RUN cd /tmp && curl -L https://www.openssl.org/source/openssl-1.1.1h.tar.gz -o openssl.tar.gz &&\ - echo "5c9ca8774bd7b03e5784f26ae9e9e6d749c9da2438545077e6b3d755a06595d9 openssl.tar.gz" > openssl-sha.txt &&\ - sha256sum -c openssl-sha.txt && tar -xzf openssl.tar.gz &&\ - cd openssl-1.1.1h && scl enable devtoolset-8 -- ./config CFLAGS="-fPIC -O3" --prefix=/usr/local &&\ - scl enable devtoolset-8 -- make -j`nproc` && scl enable devtoolset-8 -- make -j1 install &&\ - ln -sv /usr/local/lib64/lib*.so.1.1 /usr/lib64/ &&\ - cd /tmp/ && rm -rf /tmp/openssl-1.1.1h /tmp/openssl.tar.gz - -# install RocksDB -RUN cd /opt/ && curl -L https://github.com/facebook/rocksdb/archive/v6.10.1.tar.gz -o rocksdb.tar.gz &&\ - echo "d573d2f15cdda883714f7e0bc87b814a8d4a53a82edde558f08f940e905541ee rocksdb.tar.gz" > rocksdb-sha.txt &&\ - sha256sum -c rocksdb-sha.txt && tar xf rocksdb.tar.gz && rm -rf rocksdb.tar.gz rocksdb-sha.txt - -# wget of bintray without forcing UTF-8 encoding results in 403 Forbidden -# Old versions of FDB need boost 1.67 -RUN cd /opt/ &&\ - curl -L https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.bz2 -o boost_1_67_0.tar.bz2 &&\ - echo "2684c972994ee57fc5632e03bf044746f6eb45d4920c343937a465fd67a5adba boost_1_67_0.tar.bz2" > boost-sha-67.txt &&\ - sha256sum -c boost-sha-67.txt &&\ - tar -xjf boost_1_67_0.tar.bz2 &&\ - rm -rf boost_1_67_0.tar.bz2 boost-sha-67.txt boost_1_67_0/libs - -# install Boost -# wget of bintray without forcing UTF-8 encoding results in 403 Forbidden -RUN cd /tmp/ &&\ - curl -L https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.bz2 -o boost_1_72_0.tar.bz2 &&\ - echo "59c9b274bc451cf91a9ba1dd2c7fdcaf5d60b1b3aa83f2c9fa143417cc660722 boost_1_72_0.tar.bz2" > boost-sha-72.txt &&\ - sha256sum -c boost-sha-72.txt &&\ - tar -xjf boost_1_72_0.tar.bz2 &&\ - cd boost_1_72_0 &&\ - CC=/usr/local/bin/clang CXX=/usr/local/bin/clang++ ./bootstrap.sh --with-libraries=context &&\ - CC=/usr/local/bin/clang CXX=/usr/local/bin/clang++ ./b2 link=static cxxflags=-std=c++14 --prefix=/opt/boost_1_72_0 install &&\ - rm -rf boost_1_72_0.tar.bz2 boost-sha-72.txt boost_1_72_0 - - -# Install CCACHE -RUN cd /tmp && curl -L https://github.com/ccache/ccache/releases/download/v4.0/ccache-4.0.tar.gz > ccache.tar.gz &&\ - echo "ac97af86679028ebc8555c99318352588ff50f515fc3a7f8ed21a8ad367e3d45 ccache.tar.gz" > ccache-sha256.txt &&\ - sha256sum -c ccache-sha256.txt &&\ - tar xf ccache.tar.gz && rm -rf build && mkdir build && cd build && cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DZSTD_FROM_INTERNET=ON ../ccache-4.0 &&\ - cmake --build . --target install && cd / && rm -rf tmp/build && rm -rf tmp/ccache-4.0 - -# Install toml11 -RUN cd /tmp && curl -L https://github.com/ToruNiina/toml11/archive/v3.4.0.tar.gz > toml.tar.gz &&\ - echo "bc6d733efd9216af8c119d8ac64a805578c79cc82b813e4d1d880ca128bd154d toml.tar.gz" > toml-sha256.txt &&\ - sha256sum -c toml-sha256.txt &&\ - tar xf toml.tar.gz && rm -rf build && mkdir build && cd build && cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -Dtoml11_BUILD_TEST=OFF ../toml11-3.4.0 &&\ - cmake --build . --target install && cd / && rm -rf tmp/build && rm -rf tmp/toml11-3.4.0 - -# do some cleanup -RUN rm -rf /tmp/* && yum clean all && rm -rf /var/cache/yum From 8bec456591627a68f6a4709b5a37f17310efe025 Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Fri, 29 Jan 2021 11:51:38 -0700 Subject: [PATCH 215/317] find boost in docker image --- cmake/CompileBoost.cmake | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmake/CompileBoost.cmake b/cmake/CompileBoost.cmake index f6ecebf1b2..77bdb8b542 100644 --- a/cmake/CompileBoost.cmake +++ b/cmake/CompileBoost.cmake @@ -1,3 +1,9 @@ +if(NOT BOOSTROOT AND NOT BOOST_ROOT) + # the boost dir in the official docker file + # This is a hack because FindBoost.cmake is kind of limited + # We can fix this for boost versions > 1.70 + set(BOOST_ROOT /opt/boost_1_67_0) +endif() find_package(Boost 1.67) if(Boost_FOUND) From a39d1becf3533401b5a544e842ca85c0bd257846 Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Fri, 29 Jan 2021 11:52:41 -0700 Subject: [PATCH 216/317] add jemalloc to Dockerfile --- build/Dockerfile | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/build/Dockerfile b/build/Dockerfile index f848b60417..79e8ad7e17 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -49,6 +49,16 @@ RUN cd /tmp/ &&\ scl enable devtoolset-8 -- ./b2 link=static cxxflags=-std=c++14 --prefix=/opt/boost_1_72_0 install &&\ rm -rf boost_1_72_0.tar.bz2 boost-sha-72.txt boost_1_72_0 +# jemalloc (needed for FDB after 6.3) +RUN cd /tmp/ &&\ + curl -L https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2 -o jemalloc-5.2.1.tar.bz2 &&\ + echo "34330e5ce276099e2e8950d9335db5a875689a4c6a56751ef3b1d8c537f887f6 jemalloc-5.2.1.tar.bz2" > jemalloc-sha.txt &&\ + sha256sum -c jemalloc-sha.txt &&\ + tar --no-same-owner --no-same-permissions -xjf jemalloc-5.2.1.tar.bz2 &&\ + cd jemalloc-5.2.1 &&\ + scl enable devtoolset-8 -- ./configure --enable-static --disable-cxx &&\ + scl enable devtoolset-8 -- make install + # install cmake RUN curl -L https://github.com/Kitware/CMake/releases/download/v3.13.4/cmake-3.13.4-Linux-x86_64.tar.gz -o /tmp/cmake.tar.gz &&\ echo "563a39e0a7c7368f81bfa1c3aff8b590a0617cdfe51177ddc808f66cc0866c76 /tmp/cmake.tar.gz" > /tmp/cmake-sha.txt &&\ From fd89c1d12d5c57b5ace4a7f524c08411f20ab0af Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Fri, 29 Jan 2021 12:21:13 -0700 Subject: [PATCH 217/317] update devel and compose --- build/Dockerfile.devel | 2 +- build/docker-compose.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/Dockerfile.devel b/build/Dockerfile.devel index ae10ce3e2e..9d2fd5e039 100644 --- a/build/Dockerfile.devel +++ b/build/Dockerfile.devel @@ -1,4 +1,4 @@ -ARG IMAGE_TAG=0.1.21 +ARG IMAGE_TAG=0.1.23 FROM foundationdb/foundationdb-build:${IMAGE_TAG} USER root diff --git a/build/docker-compose.yaml b/build/docker-compose.yaml index 74f199ab41..aa788c854d 100644 --- a/build/docker-compose.yaml +++ b/build/docker-compose.yaml @@ -2,7 +2,7 @@ version: "3" services: common: &common - image: foundationdb/foundationdb-build:0.1.22 + image: foundationdb/foundationdb-build:0.1.23 build-setup: &build-setup <<: *common From 4f3da7c93b2bc843ad374f68d12b42b961bc353f Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Fri, 29 Jan 2021 12:18:06 -0800 Subject: [PATCH 218/317] also kill tlogs if a commit takes too long --- fdbserver/OldTLogServer_6_0.actor.cpp | 17 +---------------- fdbserver/TLogServer.actor.cpp | 17 +---------------- flow/genericactors.actor.h | 27 +++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 32 deletions(-) diff --git a/fdbserver/OldTLogServer_6_0.actor.cpp b/fdbserver/OldTLogServer_6_0.actor.cpp index 111036425b..616adb9c75 100644 --- a/fdbserver/OldTLogServer_6_0.actor.cpp +++ b/fdbserver/OldTLogServer_6_0.actor.cpp @@ -1285,19 +1285,6 @@ ACTOR Future tLogPeekMessages( TLogData* self, TLogPeekRequest req, Refere return Void(); } -ACTOR Future watchDegraded(TLogData* self) { - if(g_network->isSimulated() && g_simulator.speedUpSimulation) { - return Void(); - } - - wait(lowPriorityDelay(SERVER_KNOBS->TLOG_DEGRADED_DURATION)); - - TraceEvent(SevWarnAlways, "TLogDegraded", self->dbgid); - TEST(true); //6.0 TLog degraded - self->degraded->set(true); - return Void(); -} - ACTOR Future doQueueCommit( TLogData* self, Reference logData, std::vector> missingFinalCommit ) { state Version ver = logData->version.get(); state Version commitNumber = self->queueCommitBegin+1; @@ -1310,12 +1297,10 @@ ACTOR Future doQueueCommit( TLogData* self, Reference logData, st self->diskQueueCommitBytes = 0; self->largeDiskQueueCommitBytes.set(false); - state Future degraded = watchDegraded(self); - wait(c); + wait(ioTimeoutError(c, SERVER_KNOBS->MAX_STORAGE_COMMIT_TIME, self->degraded, SERVER_KNOBS->TLOG_DEGRADED_DURATION)); if(g_network->isSimulated() && !g_simulator.speedUpSimulation && BUGGIFY_WITH_PROB(0.0001)) { wait(delay(6.0)); } - degraded.cancel(); wait(self->queueCommitEnd.whenAtLeast(commitNumber-1)); //Calling check_yield instead of yield to avoid a destruction ordering problem in simulation diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index 745f071b13..dd88bdd8ad 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -1700,19 +1700,6 @@ ACTOR Future tLogPeekMessages( TLogData* self, TLogPeekRequest req, Refere return Void(); } -ACTOR Future watchDegraded(TLogData* self) { - if(g_network->isSimulated() && g_simulator.speedUpSimulation) { - return Void(); - } - - wait(lowPriorityDelay(SERVER_KNOBS->TLOG_DEGRADED_DURATION)); - - TraceEvent(SevWarnAlways, "TLogDegraded", self->dbgid); - TEST(true); //TLog degraded - self->degraded->set(true); - return Void(); -} - ACTOR Future doQueueCommit( TLogData* self, Reference logData, std::vector> missingFinalCommit ) { state Version ver = logData->version.get(); state Version commitNumber = self->queueCommitBegin+1; @@ -1725,12 +1712,10 @@ ACTOR Future doQueueCommit( TLogData* self, Reference logData, st self->diskQueueCommitBytes = 0; self->largeDiskQueueCommitBytes.set(false); - state Future degraded = watchDegraded(self); - wait(c); + wait(ioTimeoutError(c, SERVER_KNOBS->MAX_STORAGE_COMMIT_TIME, self->degraded, SERVER_KNOBS->TLOG_DEGRADED_DURATION)); if(g_network->isSimulated() && !g_simulator.speedUpSimulation && BUGGIFY_WITH_PROB(0.0001)) { wait(delay(6.0)); } - degraded.cancel(); wait(self->queueCommitEnd.whenAtLeast(commitNumber-1)); //Calling check_yield instead of yield to avoid a destruction ordering problem in simulation diff --git a/flow/genericactors.actor.h b/flow/genericactors.actor.h index b1978bbbc4..e85a18bd82 100644 --- a/flow/genericactors.actor.h +++ b/flow/genericactors.actor.h @@ -881,6 +881,33 @@ Future ioTimeoutError( Future what, double time ) { } } +ACTOR template +Future ioTimeoutError( Future what, double errTime, Reference> degraded, double degradedTime ) { + if(degradedTime < errTime) { + Future degradedEnd = lowPriorityDelay( degradedTime ); + choose { + when( T t = wait( what ) ) { return t; } + when( wait( degradedEnd ) ) { + TraceEvent(SevWarnAlways, "IoDegraded"); + degraded->set(true); + } + } + } + + Future end = lowPriorityDelay( errTime - degradedTime ); + choose { + when( T t = wait( what ) ) { return t; } + when( wait( end ) ) { + Error err = io_timeout(); + if(g_network->isSimulated()) { + err = err.asInjectedFault(); + } + TraceEvent(SevError, "IoTimeoutError").error(err); + throw err; + } + } +} + ACTOR template Future streamHelper( PromiseStream output, PromiseStream errors, Future input ) { try { From 9f837a3b84e60b57fbc02331d5f1b0d9bfe38446 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Fri, 29 Jan 2021 13:24:45 -0800 Subject: [PATCH 219/317] Coordinators will not serve following requests after this change: - A request that needs to be forwarded after the forward was set for a long(configured via Knobs) time. - A request that has a different connection string than the CD's local connection string. Simulation has been made to work with this change. --- fdbserver/Coordination.actor.cpp | 113 +++++++++++++++++++++++---- fdbserver/CoordinationInterface.h | 2 +- fdbserver/Knobs.cpp | 1 + fdbserver/Knobs.h | 1 + fdbserver/SimulatedCluster.actor.cpp | 14 +++- fdbserver/worker.actor.cpp | 2 +- flow/error_definitions.h | 1 + 7 files changed, 116 insertions(+), 18 deletions(-) diff --git a/fdbserver/Coordination.actor.cpp b/fdbserver/Coordination.actor.cpp index 541ba965a2..4c4515ab26 100644 --- a/fdbserver/Coordination.actor.cpp +++ b/fdbserver/Coordination.actor.cpp @@ -428,12 +428,18 @@ ACTOR Future leaderRegister(LeaderElectionRegInterface interf, Key key) { // (they are always derived from a ClusterConnectionString key). // Forwarding values are stored in this range: const KeyRangeRef fwdKeys( LiteralStringRef( "\xff" "fwd" ), LiteralStringRef( "\xff" "fwe" ) ); +// Forwarding time are stored in this range: +const KeyRangeRef fwdTimeKeys(LiteralStringRef("\xff" + "fwdTime"), + LiteralStringRef("\xff" + "fwdTimf")); struct LeaderRegisterCollection { // SOMEDAY: Factor this into a generic tool? Extend ActorCollection to support removal actions? What? ActorCollection actors; Map registerInterfaces; Map forward; + Map forwardStartTime; OnDemandStore *pStore; LeaderRegisterCollection( OnDemandStore *pStore ) : actors( false ), pStore( pStore ) {} @@ -442,13 +448,21 @@ struct LeaderRegisterCollection { if( !self->pStore->exists() ) return Void(); OnDemandStore &store = *self->pStore; - Standalone forwardingInfo = wait( store->readRange( fwdKeys ) ); + state Future> forwardingInfoF = store->readRange(fwdKeys); + state Future> forwardingTimeF = store->readRange(fwdTimeKeys); + wait(success(forwardingInfoF) && success(forwardingTimeF)); + Standalone forwardingInfo = forwardingInfoF.get(); + Standalone forwardingTime = forwardingTimeF.get(); for( int i = 0; i < forwardingInfo.size(); i++ ) { LeaderInfo forwardInfo; forwardInfo.forward = true; forwardInfo.serializedInfo = forwardingInfo[i].value; self->forward[ forwardingInfo[i].key.removePrefix( fwdKeys.begin ) ] = forwardInfo; } + for (int i = 0; i < forwardingTime.size(); i++) { + double time = BinaryReader::fromStringRef(forwardingInfo[i].value, IncludeVersion()); + self->forwardStartTime[forwardingInfo[i].key.removePrefix(fwdTimeKeys.begin)] = time; + } return Void(); } @@ -456,18 +470,31 @@ struct LeaderRegisterCollection { Optional getForward(KeyRef key) { auto i = forward.find( key ); + auto t = forwardStartTime.find(key); if (i == forward.end()) return Optional(); + if (t != forwardStartTime.end()) { + double forwardTime = t->value; + if (now() - forwardTime > SERVER_KNOBS->FORWARD_REQUEST_TOO_OLD) { + TraceEvent(SevWarnAlways, "AccessOldForward") + .detail("ForwardSetSecondsAgo", now() - forwardTime) + .detail("ForwardClusterKey", key); + } + } return i->value; } ACTOR static Future setForward(LeaderRegisterCollection *self, KeyRef key, ClusterConnectionString conn) { + double forwardTime = now(); LeaderInfo forwardInfo; forwardInfo.forward = true; forwardInfo.serializedInfo = conn.toString(); self->forward[ key ] = forwardInfo; + self->forwardStartTime[key] = forwardTime; OnDemandStore &store = *self->pStore; store->set( KeyValueRef( key.withPrefix( fwdKeys.begin ), conn.toString() ) ); + store->set( + KeyValueRef(key.withPrefix(fwdTimeKeys.begin), BinaryWriter::toValue(forwardTime, IncludeVersion()))); wait(store->commit()); return Void(); } @@ -508,7 +535,8 @@ struct LeaderRegisterCollection { // leaderServer multiplexes multiple leaderRegisters onto a single LeaderElectionRegInterface, // creating and destroying them on demand. -ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore *pStore, UID id) { +ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore* pStore, UID id, + Reference ccf) { state LeaderRegisterCollection regs( pStore ); state ActorCollection forwarders(false); @@ -523,7 +551,17 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore info.forward = forward.get().serializedInfo; req.reply.send( CachedSerialization(info) ); } else { - regs.getInterface(req.clusterKey, id).openDatabase.send( req ); + if (ccf->getConnectionString().clusterKey() != req.clusterKey || + ccf->getConnectionString().coordinators() != req.coordinators) { + TraceEvent(SevWarnAlways, "CCFMismatch") + .detail("RequestType", "OpenDatabaseCoordRequest") + .detail("LocalCS", ccf->getConnectionString().toString()) + .detail("IncomingClusterKey", req.clusterKey) + .detail("IncomingCoordinators", describeList(req.coordinators, req.coordinators.size())); + req.reply.sendError(wrong_conection_file()); + } else { + regs.getInterface(req.clusterKey, id).openDatabase.send(req); + } } } when ( ElectionResultRequest req = waitNext( interf.electionResult.getFuture() ) ) { @@ -531,44 +569,90 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore if( forward.present() ) { req.reply.send( forward.get() ); } else { - regs.getInterface(req.key, id).electionResult.send( req ); + if (ccf->getConnectionString().clusterKey() != req.key || + ccf->getConnectionString().coordinators() != req.coordinators) { + TraceEvent(SevWarnAlways, "CCFMismatch") + .detail("RequestType", "ElectionResultRequest") + .detail("LocalCS", ccf->getConnectionString().toString()) + .detail("IncomingClusterKey", req.key) + .detail("IncomingCoordinators", describeList(req.coordinators, req.coordinators.size())); + req.reply.sendError(wrong_conection_file()); + } else { + regs.getInterface(req.key, id).electionResult.send(req); + } } } when ( GetLeaderRequest req = waitNext( interf.getLeader.getFuture() ) ) { Optional forward = regs.getForward(req.key); if( forward.present() ) req.reply.send( forward.get() ); - else - regs.getInterface(req.key, id).getLeader.send( req ); + else { + if (ccf->getConnectionString().clusterKey() != req.key) { + TraceEvent(SevWarnAlways, "CCFMismatch") + .detail("RequestType", "GetLeaderRequest") + .detail("LocalCS", ccf->getConnectionString().toString()) + .detail("IncomingClusterKey", req.key); + req.reply.sendError(wrong_conection_file()); + } else { + regs.getInterface(req.key, id).getLeader.send(req); + } + } } when ( CandidacyRequest req = waitNext( interf.candidacy.getFuture() ) ) { Optional forward = regs.getForward(req.key); if( forward.present() ) req.reply.send( forward.get() ); - else - regs.getInterface(req.key, id).candidacy.send(req); + else { + if (ccf->getConnectionString().clusterKey() != req.key) { + TraceEvent(SevWarnAlways, "CCFMismatch") + .detail("RequestType", "CandidacyRequest") + .detail("LocalCS", ccf->getConnectionString().toString()) + .detail("IncomingClusterKey", req.key); + req.reply.sendError(wrong_conection_file()); + } else { + regs.getInterface(req.key, id).candidacy.send(req); + } + } } when ( LeaderHeartbeatRequest req = waitNext( interf.leaderHeartbeat.getFuture() ) ) { Optional forward = regs.getForward(req.key); if( forward.present() ) req.reply.send(LeaderHeartbeatReply{ false }); - else - regs.getInterface(req.key, id).leaderHeartbeat.send(req); + else { + if (ccf->getConnectionString().clusterKey() != req.key) { + TraceEvent(SevWarnAlways, "CCFMismatch") + .detail("RequestType", "LeaderHeartbeatRequest") + .detail("LocalCS", ccf->getConnectionString().toString()) + .detail("IncomingClusterKey", req.key); + req.reply.sendError(wrong_conection_file()); + } else { + regs.getInterface(req.key, id).leaderHeartbeat.send(req); + } + } } when ( ForwardRequest req = waitNext( interf.forward.getFuture() ) ) { Optional forward = regs.getForward(req.key); if( forward.present() ) req.reply.send( Void() ); else { - forwarders.add( LeaderRegisterCollection::setForward( ®s, req.key, ClusterConnectionString(req.conn.toString()) ) ); - regs.getInterface(req.key, id).forward.send(req); + if (ccf->getConnectionString().clusterKey() != req.key) { + TraceEvent(SevWarnAlways, "CCFMismatch") + .detail("RequestType", "ForwardRequest") + .detail("LocalCS", ccf->getConnectionString().toString()) + .detail("IncomingClusterKey", req.key); + req.reply.sendError(wrong_conection_file()); + } else { + forwarders.add(LeaderRegisterCollection::setForward(®s, req.key, + ClusterConnectionString(req.conn.toString()))); + regs.getInterface(req.key, id).forward.send(req); + } } } when( wait( forwarders.getResult() ) ) { ASSERT(false); throw internal_error(); } } } -ACTOR Future coordinationServer(std::string dataFolder) { +ACTOR Future coordinationServer(std::string dataFolder, Reference ccf) { state UID myID = deterministicRandom()->randomUniqueID(); state LeaderElectionRegInterface myLeaderInterface( g_network ); state GenerationRegInterface myInterface( g_network ); @@ -577,7 +661,8 @@ ACTOR Future coordinationServer(std::string dataFolder) { TraceEvent("CoordinationServer", myID).detail("MyInterfaceAddr", myInterface.read.getEndpoint().getPrimaryAddress()).detail("Folder", dataFolder); try { - wait( localGenerationReg(myInterface, &store) || leaderServer(myLeaderInterface, &store, myID) || store.getError() ); + wait(localGenerationReg(myInterface, &store) || leaderServer(myLeaderInterface, &store, myID, ccf) || + store.getError()); throw internal_error(); } catch (Error& e) { TraceEvent("CoordinationServerError", myID).error(e, true); diff --git a/fdbserver/CoordinationInterface.h b/fdbserver/CoordinationInterface.h index 8290172087..d9a9d48e07 100644 --- a/fdbserver/CoordinationInterface.h +++ b/fdbserver/CoordinationInterface.h @@ -209,6 +209,6 @@ public: vector stateServers; }; -Future coordinationServer( std::string const& dataFolder ); +Future coordinationServer(std::string const& dataFolder, Reference const& ccf); #endif diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 58815ba8d7..0574522c74 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -606,6 +606,7 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi // Coordination init( COORDINATED_STATE_ONCONFLICT_POLL_INTERVAL, 1.0 ); if( randomize && BUGGIFY ) COORDINATED_STATE_ONCONFLICT_POLL_INTERVAL = 10.0; + init( FORWARD_REQUEST_TOO_OLD, 600.0); if( randomize && BUGGIFY ) FORWARD_REQUEST_TOO_OLD = 60.0; // Buggification init( BUGGIFIED_EVENTUAL_CONSISTENCY, 1.0 ); diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 26b07ed96c..ecd63b4f96 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -535,6 +535,7 @@ public: // Coordination double COORDINATED_STATE_ONCONFLICT_POLL_INTERVAL; + double FORWARD_REQUEST_TOO_OLD; // Buggification double BUGGIFIED_EVENTUAL_CONSISTENCY; diff --git a/fdbserver/SimulatedCluster.actor.cpp b/fdbserver/SimulatedCluster.actor.cpp index 0ace285664..ccbb3014ad 100644 --- a/fdbserver/SimulatedCluster.actor.cpp +++ b/fdbserver/SimulatedCluster.actor.cpp @@ -1133,6 +1133,7 @@ void setupSimulatedSystem(vector>* systemActors, std::string baseFo TEST( !useIPv6 ); vector coordinatorAddresses; + vector extraCoordinatorAddresses; // Used by extra DB if the DR db is a new one if(minimumRegions > 1) { //do not put coordinators in the primary region so that we can kill that region safely int nonPrimaryDcs = dataCenters/2; @@ -1141,6 +1142,9 @@ void setupSimulatedSystem(vector>* systemActors, std::string baseFo for(int m = 0; m < dcCoordinators; m++) { auto ip = makeIPAddressForSim(useIPv6, { 2, dc, 1, m }); coordinatorAddresses.push_back(NetworkAddress(ip, sslEnabled && !sslOnly ? 2 : 1, true, sslEnabled && sslOnly)); + auto extraIp = makeIPAddressForSim(useIPv6, { 4, dc, 1, m }); + extraCoordinatorAddresses.push_back( + NetworkAddress(extraIp, sslEnabled && !sslOnly ? 2 : 1, true, sslEnabled && sslOnly)); TraceEvent("SelectedCoordinator").detail("Address", coordinatorAddresses.back()); } } @@ -1166,6 +1170,9 @@ void setupSimulatedSystem(vector>* systemActors, std::string baseFo } else { auto ip = makeIPAddressForSim(useIPv6, { 2, dc, 1, m }); coordinatorAddresses.push_back(NetworkAddress(ip, sslEnabled && !sslOnly ? 2 : 1, true, sslEnabled && sslOnly)); + auto extraIp = makeIPAddressForSim(useIPv6, { 4, dc, 1, m }); + extraCoordinatorAddresses.push_back( + NetworkAddress(extraIp, sslEnabled && !sslOnly ? 2 : 1, true, sslEnabled && sslOnly)); TraceEvent("SelectedCoordinator").detail("Address", coordinatorAddresses.back()).detail("M", m).detail("Machines", machines).detail("Assigned", assignedMachines).detail("DcCoord", dcCoordinators).detail("P1", (m+1==dcCoordinators)).detail("P2", (assignedMachines<4)).detail("P3", (assignedMachines+machines-dcCoordinators>=4)).detail("CoordinatorCount", coordinatorCount); } assignedMachines++; @@ -1193,10 +1200,13 @@ void setupSimulatedSystem(vector>* systemActors, std::string baseFo // If extraDB==0, leave g_simulator.extraDB as null because the test does not use DR. if(extraDB==1) { // The DR database can be either a new database or itself - g_simulator.extraDB = new ClusterConnectionString(coordinatorAddresses, BUGGIFY ? LiteralStringRef("TestCluster:0") : LiteralStringRef("ExtraCluster:0")); + g_simulator.extraDB = + BUGGIFY ? new ClusterConnectionString(coordinatorAddresses, LiteralStringRef("TestCluster:0")) + : new ClusterConnectionString(extraCoordinatorAddresses, LiteralStringRef("ExtraCluster:0")); } else if(extraDB==2) { // The DR database is a new database - g_simulator.extraDB = new ClusterConnectionString(coordinatorAddresses, LiteralStringRef("ExtraCluster:0")); + g_simulator.extraDB = + new ClusterConnectionString(extraCoordinatorAddresses, LiteralStringRef("ExtraCluster:0")); } else if(extraDB==3) { // The DR database is the same database g_simulator.extraDB = new ClusterConnectionString(coordinatorAddresses, LiteralStringRef("TestCluster:0")); diff --git a/fdbserver/worker.actor.cpp b/fdbserver/worker.actor.cpp index 44d2a6a7b2..6c85dd941f 100644 --- a/fdbserver/worker.actor.cpp +++ b/fdbserver/worker.actor.cpp @@ -1756,7 +1756,7 @@ ACTOR Future fdbd( if (coordFolder.size()) { // SOMEDAY: remove the fileNotFound wrapper and make DiskQueue construction safe from errors setting up // their files - actors.push_back(fileNotFoundToNever(coordinationServer(coordFolder))); + actors.push_back(fileNotFoundToNever(coordinationServer(coordFolder, coordinators.ccf))); } state UID processIDUid = wait(createAndLockProcessIdFile(dataFolder)); diff --git a/flow/error_definitions.h b/flow/error_definitions.h index 2041ce9578..a5140aac06 100755 --- a/flow/error_definitions.h +++ b/flow/error_definitions.h @@ -72,6 +72,7 @@ ERROR( connection_idle, 1049, "Connection closed after idle timeout" ) ERROR( disk_adapter_reset, 1050, "The disk queue adpater reset" ) ERROR( batch_transaction_throttled, 1051, "Batch GRV request rate limit exceeded") ERROR( dd_cancelled, 1052, "Data distribution components cancelled") +ERROR( wrong_conection_file, 1053, "Connection file mismatch") ERROR( broken_promise, 1100, "Broken promise" ) ERROR( operation_cancelled, 1101, "Asynchronous operation cancelled" ) From 4c4d1ec6b039847a9ac322b61a15351f3eec08f5 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Fri, 29 Jan 2021 15:18:46 -0800 Subject: [PATCH 220/317] Use VFSAsyncFile::checkInjectedError() to replace old injected fault detection, see pr#4212 --- fdbserver/KeyValueStoreSQLite.actor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 179b0b3b44..fd109ae6d8 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -309,7 +309,7 @@ struct SQLiteDB : NonCopyable { int tables[] = {1, table, freetable}; TraceEvent("BTreeIntegrityCheckBegin").detail("Filename", filename); char* e = sqlite3BtreeIntegrityCheck(btree, tables, 3, 1000, &errors, verbose); - if (!(g_network->isSimulated() && (g_simulator.getCurrentProcess()->fault_injection_p1 || g_simulator.getCurrentProcess()->rebooting))) { + if (!(g_network->isSimulated() && VFSAsyncFile::checkInjectedError())) { TraceEvent((errors||e) ? SevError : SevInfo, "BTreeIntegrityCheckResults").detail("Filename", filename).detail("ErrorTotal", errors); if(e != nullptr) { // e is a string containing 1 or more lines. Create a separate trace event for each line. @@ -1657,7 +1657,7 @@ private: if (checkIntegrityOnOpen || EXPENSIVE_VALIDATION) { if(conn.check(false) != 0) { // A corrupt btree structure must not be used. - if (g_network->isSimulated() && (g_simulator.getCurrentProcess()->fault_injection_p1 || g_simulator.getCurrentProcess()->machine->machineProcess->fault_injection_p1 || g_simulator.getCurrentProcess()->rebooting)) { + if (g_network->isSimulated() && VFSAsyncFile::checkInjectedError()) { throw file_corrupt().asInjectedFault(); } else { throw file_corrupt(); From f59b2b238f2ef4179750e6fbcd1e114e47e3faf4 Mon Sep 17 00:00:00 2001 From: Christophe Chevalier Date: Sat, 30 Jan 2021 15:09:38 +0100 Subject: [PATCH 221/317] winbuild: do not use reserved keyword 'interface' for variable name - renamed variable so as not to use a reserved keyword. --- fdbserver/WorkerInterface.actor.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/WorkerInterface.actor.h b/fdbserver/WorkerInterface.actor.h index 9beab6c9d8..c005b5c232 100644 --- a/fdbserver/WorkerInterface.actor.h +++ b/fdbserver/WorkerInterface.actor.h @@ -385,7 +385,7 @@ struct InitializeBackupReply { LogEpoch backupEpoch; InitializeBackupReply() = default; - InitializeBackupReply(BackupInterface interface, LogEpoch e) : interf(interface), backupEpoch(e) {} + InitializeBackupReply(BackupInterface bi, LogEpoch e) : interf(bi), backupEpoch(e) {} template void serialize(Ar& ar) { From 89735f7eda8d5bde2d871476b60d032a383ea8ed Mon Sep 17 00:00:00 2001 From: Christophe Chevalier Date: Sat, 30 Jan 2021 15:10:15 +0100 Subject: [PATCH 222/317] winbuild: fix int argc for main() - fix compile error requiring first arg of main() to be of type int --- fdbservice/FDBService.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbservice/FDBService.cpp b/fdbservice/FDBService.cpp index 8efee25593..e201aa6e4f 100644 --- a/fdbservice/FDBService.cpp +++ b/fdbservice/FDBService.cpp @@ -838,7 +838,7 @@ void print_usage(const char *name) { " -h, --help Display this help and exit.\n", name); } -int main(DWORD argc, LPCSTR *argv) { +int main(int argc, LPCSTR *argv) { _set_FMA3_enable(0); // Workaround for VS 2013 code generation bug. See https://connect.microsoft.com/VisualStudio/feedback/details/811093/visual-studio-2013-rtm-c-x64-code-generation-bug-for-avx2-instructions int status = 0; From 5d2a7cdf4c35627e783953ea39d61c0440309d93 Mon Sep 17 00:00:00 2001 From: Christophe Chevalier Date: Sat, 30 Jan 2021 15:10:37 +0100 Subject: [PATCH 223/317] winbuild: use _strnicmp instead of strnicmp --- fdbservice/FDBService.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fdbservice/FDBService.cpp b/fdbservice/FDBService.cpp index e201aa6e4f..65446bb655 100644 --- a/fdbservice/FDBService.cpp +++ b/fdbservice/FDBService.cpp @@ -866,14 +866,14 @@ int main(int argc, LPCSTR *argv) { } // Check, if logging is enabled - else if ((!strnicmp("-l", argv[loop], 2)) || + else if ((!_strnicmp("-l", argv[loop], 2)) || (!_strnicmp("--l", argv[loop], 3))) { logging = true; } // Check, if help is requested - else if ((!strnicmp("-h", argv[loop], 2)) || + else if ((!_strnicmp("-h", argv[loop], 2)) || (!_strnicmp("--h", argv[loop], 3))) { print_usage(argv[0]); From 0eeb73846baaa2942cfa4c7bb242ef787e5bfb49 Mon Sep 17 00:00:00 2001 From: Christophe Chevalier Date: Sat, 30 Jan 2021 15:12:13 +0100 Subject: [PATCH 224/317] winbuild: fix passing std::string directly to format(...) - pass result of c_str() instead --- fdbservice/FDBService.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fdbservice/FDBService.cpp b/fdbservice/FDBService.cpp index 65446bb655..a1b33b4383 100644 --- a/fdbservice/FDBService.cpp +++ b/fdbservice/FDBService.cpp @@ -411,11 +411,11 @@ protected: char confFileDirectory[2048]; char *fileNameStart; if( !GetFullPathName( confFile.c_str(), 2048, confFileDirectory, &fileNameStart ) ) { - errorExit( format( "get path of conf file (%s)", confFile ).c_str() ); + errorExit( format( "get path of conf file (%s)", confFile.c_str() ).c_str() ); } if( !fileNameStart ) { - errorExit( format( "file name not present (%s)", confFile ).c_str() ); + errorExit( format( "file name not present (%s)", confFile.c_str() ).c_str() ); } // Test file existence From 3cef471e4b9e4ba269417c4a9ce5311e046da256 Mon Sep 17 00:00:00 2001 From: Christophe Chevalier Date: Sat, 30 Jan 2021 15:12:53 +0100 Subject: [PATCH 225/317] winbuild: fix const_cast issue --- fdbservice/ServiceBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbservice/ServiceBase.cpp b/fdbservice/ServiceBase.cpp index 8d27a54206..594db366ef 100644 --- a/fdbservice/ServiceBase.cpp +++ b/fdbservice/ServiceBase.cpp @@ -118,7 +118,7 @@ CServiceBase::CServiceBase(char *serviceName, bool fCanPauseContinue) { // Service name must be a valid string and cannot be NULL. - m_name = (serviceName == NULL) ? "" : serviceName; + m_name = (serviceName == NULL) ? const_cast("") : serviceName; m_statusHandle = NULL; From ff0667b28d5e3b455e1e26cf06d44cf285b08f03 Mon Sep 17 00:00:00 2001 From: Christophe Chevalier Date: Sat, 30 Jan 2021 15:15:02 +0100 Subject: [PATCH 226/317] winbuild: define BOOST_USE_WINDOWS_H, WIN32_LEAN_AND_MEAN and NOMINMAX to fix various macro expansions issues - NOMINMAX to fix confusion between std::max(..) and max(..) macro redefinition - BOOST_USE_WINDOWS_H to prevent boost from redefining win32 APIs - WIN32_LEAN_AND_MEAN to fix include ordering issues with winsock.h --- cmake/ConfigureCompiler.cmake | 4 +++- flow/FastAlloc.cpp | 10 +++++----- flow/FileTraceLogWriter.cpp | 6 +++--- flow/Platform.cpp | 1 - flow/crc32c.cpp | 2 -- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/cmake/ConfigureCompiler.cmake b/cmake/ConfigureCompiler.cmake index d5dbb1a416..541bc1cd85 100644 --- a/cmake/ConfigureCompiler.cmake +++ b/cmake/ConfigureCompiler.cmake @@ -68,6 +68,8 @@ if (NOT OPEN_FOR_IDE) endif() if(WIN32) add_definitions(-DUSE_USEFIBERS) + add_definitions(-DBOOST_USE_WINDOWS_H) + add_definitions(-DWIN32_LEAN_AND_MEAN) else() add_definitions(-DUSE_UCONTEXT) endif() @@ -107,7 +109,7 @@ if(WIN32) string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") endif() add_compile_options(/W0 /EHsc /bigobj $<$:/Zi> /MP /FC /Gm-) - add_compile_definitions(_WIN32_WINNT=${WINDOWS_TARGET} WINVER=${WINDOWS_TARGET} NTDDI_VERSION=0x05020000 BOOST_ALL_NO_LIB) + add_compile_definitions(_WIN32_WINNT=${WINDOWS_TARGET} WINVER=${WINDOWS_TARGET} NTDDI_VERSION=0x05020000 BOOST_ALL_NO_LIB NOMINMAX) set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") else() diff --git a/flow/FastAlloc.cpp b/flow/FastAlloc.cpp index 309390571e..6658585a29 100644 --- a/flow/FastAlloc.cpp +++ b/flow/FastAlloc.cpp @@ -31,11 +31,11 @@ #include #include -#ifdef WIN32 -#include -#undef min -#undef max -#endif +//#ifdef WIN32 +//#include +//#undef min +//#undef max +//#endif #ifdef __linux__ #include diff --git a/flow/FileTraceLogWriter.cpp b/flow/FileTraceLogWriter.cpp index 3e4d0bdcd4..b3553000cb 100644 --- a/flow/FileTraceLogWriter.cpp +++ b/flow/FileTraceLogWriter.cpp @@ -31,9 +31,9 @@ #define TRACEFILE_FLAGS O_WRONLY | O_CREAT | O_EXCL | O_CLOEXEC #define TRACEFILE_MODE 0664 #elif defined(_WIN32) -#include -#undef max -#undef min +//#include +//#undef max +//#undef min #include #include #include diff --git a/flow/Platform.cpp b/flow/Platform.cpp index db8bebb3f9..9d1fc7791d 100644 --- a/flow/Platform.cpp +++ b/flow/Platform.cpp @@ -47,7 +47,6 @@ #include "flow/FaultInjection.h" #ifdef _WIN32 -#define NOMINMAX #include #include #include diff --git a/flow/crc32c.cpp b/flow/crc32c.cpp index 292d8fe0f7..5fad46ac6b 100644 --- a/flow/crc32c.cpp +++ b/flow/crc32c.cpp @@ -27,8 +27,6 @@ #include "flow/crc32c.h" -#define NOMINMAX - #ifndef __aarch64__ #include #endif From 3fc8870ce3c6a30ef22056a5f10868b38167f82d Mon Sep 17 00:00:00 2001 From: Christophe Chevalier Date: Sat, 30 Jan 2021 19:03:25 +0100 Subject: [PATCH 227/317] winbuild: fix duplicate definition of Codec::pack and unpack in Debug build - defined twice in FileBackupAgent.actor.cpp and BackupAgent.actor.h - only fails when building in Debug ? --- fdbclient/BackupAgent.actor.h | 3 +++ fdbclient/FileBackupAgent.actor.cpp | 3 --- fdbserver/RestoreCommon.actor.cpp | 8 -------- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/fdbclient/BackupAgent.actor.h b/fdbclient/BackupAgent.actor.h index aa7e56f140..f9292c8cc7 100644 --- a/fdbclient/BackupAgent.actor.h +++ b/fdbclient/BackupAgent.actor.h @@ -377,6 +377,9 @@ public: Reference futureBucket; }; +template<> inline Tuple Codec::pack(FileBackupAgent::ERestoreState const &val) { return Tuple().append(val); } +template<> inline FileBackupAgent::ERestoreState Codec::unpack(Tuple const &val) { return (FileBackupAgent::ERestoreState)val.getInt(0); } + class DatabaseBackupAgent : public BackupAgentBase { public: DatabaseBackupAgent(); diff --git a/fdbclient/FileBackupAgent.actor.cpp b/fdbclient/FileBackupAgent.actor.cpp index 835d1cd4ef..8ad4846943 100644 --- a/fdbclient/FileBackupAgent.actor.cpp +++ b/fdbclient/FileBackupAgent.actor.cpp @@ -99,9 +99,6 @@ StringRef FileBackupAgent::restoreStateText(ERestoreState id) { } } -template<> Tuple Codec::pack(ERestoreState const &val) { return Tuple().append(val); } -template<> ERestoreState Codec::unpack(Tuple const &val) { return (ERestoreState)val.getInt(0); } - ACTOR Future> TagUidMap::getAll_impl(TagUidMap *tagsMap, Reference tr, bool snapshot) { state Key prefix = tagsMap->prefix; // Copying it here as tagsMap lifetime is not tied to this actor TagMap::PairsType tagPairs = wait(tagsMap->getRange(tr, std::string(), {}, 1e6, snapshot)); diff --git a/fdbserver/RestoreCommon.actor.cpp b/fdbserver/RestoreCommon.actor.cpp index 21755a9eeb..fccf803795 100644 --- a/fdbserver/RestoreCommon.actor.cpp +++ b/fdbserver/RestoreCommon.actor.cpp @@ -36,14 +36,6 @@ // Split RestoreConfigFR defined in FileBackupAgent.actor.cpp to declaration in Restore.actor.h and implementation in // RestoreCommon.actor.cpp -template <> -inline Tuple Codec::pack(ERestoreState const& val) { - return Tuple().append(val); -} -template <> -inline ERestoreState Codec::unpack(Tuple const& val) { - return (ERestoreState)val.getInt(0); -} KeyBackedProperty RestoreConfigFR::stateEnum() { return configSpace.pack(LiteralStringRef(__FUNCTION__)); From e1f8023577845d3d49ee78805db9c8687e6ade1d Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Fri, 15 Jan 2021 19:29:14 -0800 Subject: [PATCH 228/317] Rewrote how injected faults are handled in SQLite to be more reliable and work with an upcoming write throttling feature in AsyncFileCached. --- fdbserver/CMakeLists.txt | 1 + fdbserver/KeyValueStoreSQLite.actor.cpp | 21 ++++++- fdbserver/VFSAsync.cpp | 81 ++++++++++++++----------- fdbserver/VFSAsync.h | 78 ++++++++++++++++++++++++ fdbserver/sqlite/sqlite3.amalgamation.c | 8 +++ fdbserver/sqlite/sqlite3.h | 3 + 6 files changed, 154 insertions(+), 38 deletions(-) create mode 100644 fdbserver/VFSAsync.h diff --git a/fdbserver/CMakeLists.txt b/fdbserver/CMakeLists.txt index 56e2efbac4..9a7d56d082 100644 --- a/fdbserver/CMakeLists.txt +++ b/fdbserver/CMakeLists.txt @@ -77,6 +77,7 @@ set(FDBSERVER_SRCS TLogInterface.h TLogServer.actor.cpp VersionedBTree.actor.cpp + VFSAsync.h VFSAsync.cpp WaitFailure.actor.cpp WaitFailure.h diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 7baf8072c7..ca9865e7bd 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -31,6 +31,7 @@ extern "C" { u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*); } #include "flow/ThreadPrimitives.h" +#include "fdbserver/VFSAsync.h" #include "fdbserver/template_fdb.h" #include "fdbrpc/simulator.h" #include "flow/actorcompiler.h" // This must be the last #include. @@ -197,6 +198,7 @@ struct SQLiteDB : NonCopyable { bool page_checksums; bool fragment_values; PageChecksumCodec *pPagerCodec; // we do NOT own this pointer, db does. + VFSAsyncFile *vfsDB, *vfsWAL; void beginTransaction(bool write) { checkError("BtreeBeginTrans", sqlite3BtreeBeginTrans(btree, write)); @@ -211,7 +213,7 @@ struct SQLiteDB : NonCopyable { void open(bool writable); void createFromScratch(); - SQLiteDB( std::string filename, bool page_checksums, bool fragment_values): filename(filename), db(NULL), btree(NULL), table(-1), freetable(-1), haveMutex(false), page_checksums(page_checksums), fragment_values(fragment_values) {} + SQLiteDB( std::string filename, bool page_checksums, bool fragment_values): filename(filename), db(NULL), btree(NULL), table(-1), freetable(-1), haveMutex(false), page_checksums(page_checksums), fragment_values(fragment_values), vfsDB(nullptr), vfsWAL(nullptr) {} ~SQLiteDB() { if (db) { @@ -235,14 +237,24 @@ struct SQLiteDB : NonCopyable { } } + bool consumeInjectedErrors() { + // Both of these consumeInjectedError() calls must be made, If this was written as one expression + // then if the first one returned true the second call would be skipped. + bool dbErr = (vfsDB != nullptr && vfsDB->consumeInjectedError()); + bool walErr = (vfsWAL != nullptr && vfsWAL->consumeInjectedError()); + return dbErr || walErr; + } + void checkError( const char* context, int rc ) { //if (deterministicRandom()->random01() < .001) rc = SQLITE_INTERRUPT; if (rc) { // Our exceptions don't propagate through sqlite, so we don't know for sure if the error that caused this was // an injected fault. Assume that if fault injection is happening, this is an injected fault. Error err = io_error(); - if (g_network->isSimulated() && (g_simulator.getCurrentProcess()->fault_injection_p1 || g_simulator.getCurrentProcess()->machine->machineProcess->fault_injection_p1 || g_simulator.getCurrentProcess()->rebooting)) + + if (g_network->isSimulated() && (consumeInjectedErrors())) { err = err.asInjectedFault(); + } if (db) db->errCode = rc; @@ -1353,6 +1365,11 @@ void SQLiteDB::open(bool writable) { int result = sqlite3_open_v2(apath.c_str(), &db, (writable ? SQLITE_OPEN_READWRITE : SQLITE_OPEN_READONLY), NULL); checkError("open", result); + vfsDB = (VFSAsyncFile *)sqlite3_get_vfs_db(db); + ASSERT(vfsDB != nullptr); + vfsWAL = (VFSAsyncFile *)sqlite3_get_vfs_wal(db); + ASSERT(vfsWAL != nullptr); + int chunkSize; if( !g_network->isSimulated() ) { chunkSize = 4096 * SERVER_KNOBS->SQLITE_CHUNK_SIZE_PAGES; diff --git a/fdbserver/VFSAsync.cpp b/fdbserver/VFSAsync.cpp index 3d53aaccfb..b50ced0e97 100644 --- a/fdbserver/VFSAsync.cpp +++ b/fdbserver/VFSAsync.cpp @@ -46,6 +46,8 @@ #include #endif +#include "fdbserver/VFSAsync.h" + /* ** The maximum pathname length supported by this VFS. */ @@ -58,35 +60,11 @@ #define EXCLUSIVE_LOCK 4 const uint32_t RESERVED_COUNT = 1U<<29; -/* -** When using this VFS, the sqlite3_file* handles that SQLite uses are -** actually pointers to instances of type VFSAsyncFile. -*/ -typedef struct VFSAsyncFile VFSAsyncFile; -struct VFSAsyncFile { - sqlite3_file base; /* Base class. Must be first. */ - int flags; - std::string filename; - Reference file; +VFSAsyncFile::VFSAsyncFile(std::string const& filename, int flags) +: filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0), errorInjected(false) { + filename_lockCount_openCount[filename].second++; +} - uint32_t * const pLockCount; // +1 for each SHARED_LOCK, or 1+X_COUNT for lock level X - int lockLevel; // NO_LOCK, SHARED_LOCK, RESERVED_LOCK, PENDING_LOCK, or EXCLUSIVE_LOCK - - struct SharedMemoryInfo *sharedMemory; - int sharedMemorySharedLocks; - int sharedMemoryExclusiveLocks; - - int debug_zcrefs, debug_zcreads, debug_reads; - - int chunkSize; - - VFSAsyncFile(std::string const& filename, int flags) : filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0) { - filename_lockCount_openCount[filename].second++; - } - ~VFSAsyncFile(); - - static std::map> filename_lockCount_openCount; -}; std::map> VFSAsyncFile::filename_lockCount_openCount; static int asyncClose(sqlite3_file *pFile){ @@ -112,7 +90,10 @@ static int asyncRead(sqlite3_file *pFile, void *zBuf, int iAmt, sqlite_int64 iOf return SQLITE_IOERR_SHORT_READ; } return SQLITE_OK; - } catch (Error& ) { + } catch (Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR_READ; } } @@ -123,7 +104,10 @@ static int asyncReleaseZeroCopy(sqlite3_file* pFile, void* data, int iAmt, sqlit try{ --p->debug_zcrefs; p->file->releaseZeroCopy( data, iAmt, iOfst ); - } catch (Error& ) { + } catch (Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR; } return SQLITE_OK; @@ -145,7 +129,10 @@ static int asyncReadZeroCopy(sqlite3_file *pFile, void **data, int iAmt, sqlite_ } ++p->debug_zcreads; return SQLITE_OK; - } catch (Error& ) { + } catch (Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR_READ; } } @@ -162,7 +149,10 @@ static int asyncReadZeroCopy(sqlite3_file *pFile, void **data, int iAmt, sqlite_ return SQLITE_IOERR_SHORT_READ; } return SQLITE_OK; - } catch (Error& ) { + } catch (Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR_READ; } } @@ -178,7 +168,10 @@ static int asyncWrite(sqlite3_file *pFile, const void *zBuf, int iAmt, sqlite_in try { waitFor( p->file->write( zBuf, iAmt, iOfst ) ); return SQLITE_OK; - } catch(Error& ) { + } catch(Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR_WRITE; } } @@ -194,7 +187,10 @@ static int asyncTruncate(sqlite3_file *pFile, sqlite_int64 size){ try { waitFor( p->file->truncate( size ) ); return SQLITE_OK; - } catch(Error& ) { + } catch(Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR_TRUNCATE; } } @@ -204,7 +200,11 @@ static int asyncSync(sqlite3_file *pFile, int flags){ try { waitFor( p->file->sync() ); return SQLITE_OK; - } catch (Error& e) { + } catch (Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } + TraceEvent("VFSSyncError") .error(e) .detail("Filename", p->filename) @@ -223,7 +223,10 @@ static int VFSAsyncFileSize(sqlite3_file *pFile, sqlite_int64 *pSize){ try { *pSize = waitForAndGet( p->file->size() ); return SQLITE_OK; - } catch (Error& ) { + } catch (Error &e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pFile)->errorInjected = true; + } return SQLITE_IOERR_FSTAT; } } @@ -648,6 +651,9 @@ static int asyncFullPathname( memcpy(zPathOut, s.c_str(), s.size()+1); return SQLITE_OK; } catch (Error& e) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pVfs)->errorInjected = true; + } TraceEvent(SevError,"VFSAsyncFullPathnameError").error(e).detail("PathIn", (std::string)zPath); return SQLITE_IOERR; } catch(...) { @@ -716,6 +722,9 @@ static int asyncSleep(sqlite3_vfs *pVfs, int microseconds){ waitFor( g_network->delay( microseconds*1e-6, TaskPriority::DefaultDelay ) || simCancel ); return microseconds; } catch( Error &e ) { + if(e.isInjectedFault()) { + ((VFSAsyncFile *)pVfs)->errorInjected = true; + } TraceEvent(SevError, "AsyncSleepError").error(e,true); return 0; } diff --git a/fdbserver/VFSAsync.h b/fdbserver/VFSAsync.h new file mode 100644 index 0000000000..debf317eef --- /dev/null +++ b/fdbserver/VFSAsync.h @@ -0,0 +1,78 @@ +/* + * VFSAsync.h + * + * This source file is part of the FoundationDB open source project + * + * Copyright 2013-2018 Apple Inc. and the FoundationDB project authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "sqlite/sqlite3.h" +#include +#include +#include "fdbrpc/IAsyncFile.h" +#include "fdbserver/CoroFlow.h" + +//#include +//#include + +//#ifdef WIN32 +//#include +//#endif + +#ifdef __unixish__ +//#include +//#include +//#include +//#include +//#include +//#include +//#include +//#include +#endif + +/* +** When using this VFS, the sqlite3_file* handles that SQLite uses are +** actually pointers to instances of type VFSAsyncFile. +*/ +typedef struct VFSAsyncFile VFSAsyncFile; +struct VFSAsyncFile { + sqlite3_file base; /* Base class. Must be first. */ + int flags; + std::string filename; + Reference file; + bool errorInjected; + + bool consumeInjectedError() { + bool e = errorInjected; + errorInjected = false; + return e; + } + + uint32_t * const pLockCount; // +1 for each SHARED_LOCK, or 1+X_COUNT for lock level X + int lockLevel; // NO_LOCK, SHARED_LOCK, RESERVED_LOCK, PENDING_LOCK, or EXCLUSIVE_LOCK + + struct SharedMemoryInfo *sharedMemory; + int sharedMemorySharedLocks; + int sharedMemoryExclusiveLocks; + + int debug_zcrefs, debug_zcreads, debug_reads; + + int chunkSize; + + VFSAsyncFile(std::string const& filename, int flags); + ~VFSAsyncFile(); + + static std::map> filename_lockCount_openCount; +}; diff --git a/fdbserver/sqlite/sqlite3.amalgamation.c b/fdbserver/sqlite/sqlite3.amalgamation.c index adbad64ea1..e2863ffae8 100644 --- a/fdbserver/sqlite/sqlite3.amalgamation.c +++ b/fdbserver/sqlite/sqlite3.amalgamation.c @@ -93791,6 +93791,14 @@ SQLITE_API int sqlite3_open_v2( return openDatabase(filename, ppDb, flags, zVfs); } +SQLITE_API void * sqlite3_get_vfs_db(sqlite3 *pDb) { + return pDb->aDb[0].pBt->pBt->pPager->pWal->pDbFd; +} + +SQLITE_API void * sqlite3_get_vfs_wal(sqlite3 *pDb) { + return pDb->aDb[0].pBt->pBt->pPager->pWal->pWalFd; +} + #ifndef SQLITE_OMIT_UTF16 /* ** Open a new database handle. diff --git a/fdbserver/sqlite/sqlite3.h b/fdbserver/sqlite/sqlite3.h index fc33edfd73..d3d62419f0 100755 --- a/fdbserver/sqlite/sqlite3.h +++ b/fdbserver/sqlite/sqlite3.h @@ -2411,6 +2411,9 @@ SQLITE_API int sqlite3_open_v2( const char *zVfs /* Name of VFS module to use */ ); +SQLITE_API void * sqlite3_get_vfs_db(sqlite3 *pDb); +SQLITE_API void * sqlite3_get_vfs_wal(sqlite3 *pDb); + /* ** CAPI3REF: Error Codes And Messages ** From 1a5c40fcef37a4756237c817a04412b991d78a8b Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Fri, 15 Jan 2021 21:13:31 -0800 Subject: [PATCH 229/317] Bug fixes: Check for null pager and wal pointers, and initialize vfsWAL after SQLite has opened the WAL. --- fdbserver/KeyValueStoreSQLite.actor.cpp | 5 +++-- fdbserver/sqlite/sqlite3.amalgamation.c | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index ca9865e7bd..3e4803c482 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -1367,8 +1367,6 @@ void SQLiteDB::open(bool writable) { vfsDB = (VFSAsyncFile *)sqlite3_get_vfs_db(db); ASSERT(vfsDB != nullptr); - vfsWAL = (VFSAsyncFile *)sqlite3_get_vfs_wal(db); - ASSERT(vfsWAL != nullptr); int chunkSize; if( !g_network->isSimulated() ) { @@ -1396,6 +1394,9 @@ void SQLiteDB::open(bool writable) { ASSERT( false ); } + vfsWAL = (VFSAsyncFile *)sqlite3_get_vfs_wal(db); + ASSERT(vfsWAL != nullptr); + if (writable) { Statement(*this, "PRAGMA synchronous = NORMAL").execute(); // OFF, NORMAL, FULL Statement(*this, "PRAGMA wal_autocheckpoint = -1").nextRow(); diff --git a/fdbserver/sqlite/sqlite3.amalgamation.c b/fdbserver/sqlite/sqlite3.amalgamation.c index e2863ffae8..ff6cc2dafe 100644 --- a/fdbserver/sqlite/sqlite3.amalgamation.c +++ b/fdbserver/sqlite/sqlite3.amalgamation.c @@ -93792,11 +93792,13 @@ SQLITE_API int sqlite3_open_v2( } SQLITE_API void * sqlite3_get_vfs_db(sqlite3 *pDb) { - return pDb->aDb[0].pBt->pBt->pPager->pWal->pDbFd; + Pager *pPager = sqlite3BtreePager(pDb->aDb[0].pBt); + return (pPager != NULL) ? pPager->fd : NULL; } SQLITE_API void * sqlite3_get_vfs_wal(sqlite3 *pDb) { - return pDb->aDb[0].pBt->pBt->pPager->pWal->pWalFd; + Pager *pPager = sqlite3BtreePager(pDb->aDb[0].pBt); + return ((pPager != NULL) && (pPager->pWal != NULL)) ? pPager->pWal->pWalFd : NULL; } #ifndef SQLITE_OMIT_UTF16 From e72d486215d2cc1d2598132bca319d09eb9fa74b Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Sat, 16 Jan 2021 05:04:30 -0800 Subject: [PATCH 230/317] Refactored how injected fault state is managed to make debugging injected fault handling easier. Moved injected error tracking for open() into an INetwork global since it should be unique per simulated process. Fixed bug where injected error in WAL file was not recognized as injected because it occurred before SQLiteDB's vfsWAL pointer was initialized. Simplified logic in SQLiteDB. Added comments. --- fdbserver/KeyValueStoreSQLite.actor.cpp | 31 +++++++++++----------- fdbserver/VFSAsync.cpp | 23 +++++++++-------- fdbserver/VFSAsync.h | 34 ++++++++++++++++++++++--- flow/network.h | 3 ++- 4 files changed, 62 insertions(+), 29 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 3e4803c482..b419b8a5cb 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -198,7 +198,6 @@ struct SQLiteDB : NonCopyable { bool page_checksums; bool fragment_values; PageChecksumCodec *pPagerCodec; // we do NOT own this pointer, db does. - VFSAsyncFile *vfsDB, *vfsWAL; void beginTransaction(bool write) { checkError("BtreeBeginTrans", sqlite3BtreeBeginTrans(btree, write)); @@ -213,7 +212,7 @@ struct SQLiteDB : NonCopyable { void open(bool writable); void createFromScratch(); - SQLiteDB( std::string filename, bool page_checksums, bool fragment_values): filename(filename), db(NULL), btree(NULL), table(-1), freetable(-1), haveMutex(false), page_checksums(page_checksums), fragment_values(fragment_values), vfsDB(nullptr), vfsWAL(nullptr) {} + SQLiteDB( std::string filename, bool page_checksums, bool fragment_values): filename(filename), db(NULL), btree(NULL), table(-1), freetable(-1), haveMutex(false), page_checksums(page_checksums), fragment_values(fragment_values) {} ~SQLiteDB() { if (db) { @@ -237,12 +236,20 @@ struct SQLiteDB : NonCopyable { } } - bool consumeInjectedErrors() { - // Both of these consumeInjectedError() calls must be made, If this was written as one expression - // then if the first one returned true the second call would be skipped. - bool dbErr = (vfsDB != nullptr && vfsDB->consumeInjectedError()); - bool walErr = (vfsWAL != nullptr && vfsWAL->consumeInjectedError()); - return dbErr || walErr; + // Consume and return the first of any injected errors detected by the VFSAsyncFile class. + bool consumeInjectedErrors(bool isOpen) { + // Get pointers to the VFSAsyncFile instances that SQLite is using to access its DB and WAL files + // in order to check if either of them have encountered an injected fault. + // + // These could be made into members, but this code is only run when an error occurs and only in simulation. + VFSAsyncFile *vfsDB = (VFSAsyncFile *)sqlite3_get_vfs_db(db); + VFSAsyncFile *vfsWAL = (VFSAsyncFile *)sqlite3_get_vfs_wal(db); + + // Return the first error found, leave the others unconsumed. + // Consume the open error last to prevent an injected open error from hiding a non-injected IO op error. + return (vfsDB != nullptr && vfsDB->consumeInjectedError()) + || (vfsWAL != nullptr && vfsWAL->consumeInjectedError()) + || (isOpen && VFSAsyncFile::consumeInjectedOpenError()); } void checkError( const char* context, int rc ) { @@ -252,7 +259,7 @@ struct SQLiteDB : NonCopyable { // an injected fault. Assume that if fault injection is happening, this is an injected fault. Error err = io_error(); - if (g_network->isSimulated() && (consumeInjectedErrors())) { + if (g_network->isSimulated() && consumeInjectedErrors(strcmp(context, "open") == 0)) { err = err.asInjectedFault(); } @@ -1365,9 +1372,6 @@ void SQLiteDB::open(bool writable) { int result = sqlite3_open_v2(apath.c_str(), &db, (writable ? SQLITE_OPEN_READWRITE : SQLITE_OPEN_READONLY), NULL); checkError("open", result); - vfsDB = (VFSAsyncFile *)sqlite3_get_vfs_db(db); - ASSERT(vfsDB != nullptr); - int chunkSize; if( !g_network->isSimulated() ) { chunkSize = 4096 * SERVER_KNOBS->SQLITE_CHUNK_SIZE_PAGES; @@ -1394,9 +1398,6 @@ void SQLiteDB::open(bool writable) { ASSERT( false ); } - vfsWAL = (VFSAsyncFile *)sqlite3_get_vfs_wal(db); - ASSERT(vfsWAL != nullptr); - if (writable) { Statement(*this, "PRAGMA synchronous = NORMAL").execute(); // OFF, NORMAL, FULL Statement(*this, "PRAGMA wal_autocheckpoint = -1").nextRow(); diff --git a/fdbserver/VFSAsync.cpp b/fdbserver/VFSAsync.cpp index b50ced0e97..9bde2dbc01 100644 --- a/fdbserver/VFSAsync.cpp +++ b/fdbserver/VFSAsync.cpp @@ -61,7 +61,7 @@ const uint32_t RESERVED_COUNT = 1U<<29; VFSAsyncFile::VFSAsyncFile(std::string const& filename, int flags) -: filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0), errorInjected(false) { +: filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0), injectedError(false) { filename_lockCount_openCount[filename].second++; } @@ -92,7 +92,7 @@ static int asyncRead(sqlite3_file *pFile, void *zBuf, int iAmt, sqlite_int64 iOf return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } return SQLITE_IOERR_READ; } @@ -106,7 +106,7 @@ static int asyncReleaseZeroCopy(sqlite3_file* pFile, void* data, int iAmt, sqlit p->file->releaseZeroCopy( data, iAmt, iOfst ); } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } return SQLITE_IOERR; } @@ -131,7 +131,7 @@ static int asyncReadZeroCopy(sqlite3_file *pFile, void **data, int iAmt, sqlite_ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } return SQLITE_IOERR_READ; } @@ -170,7 +170,7 @@ static int asyncWrite(sqlite3_file *pFile, const void *zBuf, int iAmt, sqlite_in return SQLITE_OK; } catch(Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } return SQLITE_IOERR_WRITE; } @@ -189,7 +189,7 @@ static int asyncTruncate(sqlite3_file *pFile, sqlite_int64 size){ return SQLITE_OK; } catch(Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } return SQLITE_IOERR_TRUNCATE; } @@ -202,7 +202,7 @@ static int asyncSync(sqlite3_file *pFile, int flags){ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } TraceEvent("VFSSyncError") @@ -225,7 +225,7 @@ static int VFSAsyncFileSize(sqlite3_file *pFile, sqlite_int64 *pSize){ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + ((VFSAsyncFile *)pFile)->setInjectedError(); } return SQLITE_IOERR_FSTAT; } @@ -547,6 +547,9 @@ static int asyncOpen( .detail("Sqlite3File", DEBUG_DETERMINISM ? 0 : (int64_t)pFile) .detail("IAsyncFile", DEBUG_DETERMINISM ? 0 : (int64_t)p->file.getPtr());*/ } catch (Error& e) { + if(e.isInjectedFault()) { + VFSAsyncFile::setOpenError(); + } TraceEvent("SQLiteOpenFail").error(e).detail("Filename", p->filename); p->~VFSAsyncFile(); return SQLITE_CANTOPEN; @@ -652,7 +655,7 @@ static int asyncFullPathname( return SQLITE_OK; } catch (Error& e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pVfs)->errorInjected = true; + ((VFSAsyncFile *)pVfs)->setInjectedError(); } TraceEvent(SevError,"VFSAsyncFullPathnameError").error(e).detail("PathIn", (std::string)zPath); return SQLITE_IOERR; @@ -723,7 +726,7 @@ static int asyncSleep(sqlite3_vfs *pVfs, int microseconds){ return microseconds; } catch( Error &e ) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pVfs)->errorInjected = true; + ((VFSAsyncFile *)pVfs)->setInjectedError(); } TraceEvent(SevError, "AsyncSleepError").error(e,true); return 0; diff --git a/fdbserver/VFSAsync.h b/fdbserver/VFSAsync.h index debf317eef..b67292b9f2 100644 --- a/fdbserver/VFSAsync.h +++ b/fdbserver/VFSAsync.h @@ -52,11 +52,39 @@ struct VFSAsyncFile { int flags; std::string filename; Reference file; - bool errorInjected; + bool injectedError; + + // Method to set the injectedError flag to indicate that an injected error has been caught. + // Mostly useful for debugging injected fault handling. + void setInjectedError() { + //TraceEvent(SevInfo, "VFSSetInjectedFault").backtrace().detail("This", (void *)this); + injectedError = true; + } bool consumeInjectedError() { - bool e = errorInjected; - errorInjected = false; + bool e = injectedError; + injectedError = false; + return e; + } + + // Static methods for capturing an injected open error and consuming it to convert SQLite + // errors into Error instances with isInjectedFault() set. + // + // Uses a g_network global so that injected errors on one simulated process do not mask + // non-injected errors on another. + static void setOpenError() { + g_network->setGlobal(INetwork::enSQLiteOpenError, (flowGlobalType)true); + } + + static void clearOpenError() { + g_network->setGlobal(INetwork::enSQLiteOpenError, (flowGlobalType)false); + } + + static bool consumeInjectedOpenError() { + bool e = (bool)g_network->global(INetwork::enSQLiteOpenError); + if(e) { + clearOpenError(); + } return e; } diff --git a/flow/network.h b/flow/network.h index eb2105c468..e047f2e813 100644 --- a/flow/network.h +++ b/flow/network.h @@ -436,7 +436,8 @@ public: enASIOTimedOut = 9, enBlobCredentialFiles = 10, enNetworkAddressesFunc = 11, - enClientFailureMonitor = 12 + enClientFailureMonitor = 12, + enSQLiteOpenError = 13 }; virtual void longTaskCheck( const char* name ) {} From 14af5857edfd96937bea280869721beb9d81e24b Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Sun, 17 Jan 2021 04:17:13 -0800 Subject: [PATCH 231/317] Another refactor of SQLite injected error handling to address failures of the previous attempt. Some code cleanup. Added documentation of injected error handling works and why. --- fdbserver/KeyValueStoreSQLite.actor.cpp | 19 +----- fdbserver/VFSAsync.cpp | 24 ++++---- fdbserver/VFSAsync.h | 82 ++++++++++--------------- fdbserver/sqlite/sqlite3.amalgamation.c | 10 --- fdbserver/sqlite/sqlite3.h | 3 - flow/network.h | 2 +- 6 files changed, 48 insertions(+), 92 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index b419b8a5cb..c55b178842 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -236,30 +236,13 @@ struct SQLiteDB : NonCopyable { } } - // Consume and return the first of any injected errors detected by the VFSAsyncFile class. - bool consumeInjectedErrors(bool isOpen) { - // Get pointers to the VFSAsyncFile instances that SQLite is using to access its DB and WAL files - // in order to check if either of them have encountered an injected fault. - // - // These could be made into members, but this code is only run when an error occurs and only in simulation. - VFSAsyncFile *vfsDB = (VFSAsyncFile *)sqlite3_get_vfs_db(db); - VFSAsyncFile *vfsWAL = (VFSAsyncFile *)sqlite3_get_vfs_wal(db); - - // Return the first error found, leave the others unconsumed. - // Consume the open error last to prevent an injected open error from hiding a non-injected IO op error. - return (vfsDB != nullptr && vfsDB->consumeInjectedError()) - || (vfsWAL != nullptr && vfsWAL->consumeInjectedError()) - || (isOpen && VFSAsyncFile::consumeInjectedOpenError()); - } - void checkError( const char* context, int rc ) { //if (deterministicRandom()->random01() < .001) rc = SQLITE_INTERRUPT; if (rc) { // Our exceptions don't propagate through sqlite, so we don't know for sure if the error that caused this was // an injected fault. Assume that if fault injection is happening, this is an injected fault. Error err = io_error(); - - if (g_network->isSimulated() && consumeInjectedErrors(strcmp(context, "open") == 0)) { + if (g_network->isSimulated() && VFSAsyncFile::checkInjectedError()) { err = err.asInjectedFault(); } diff --git a/fdbserver/VFSAsync.cpp b/fdbserver/VFSAsync.cpp index 9bde2dbc01..174bd425c4 100644 --- a/fdbserver/VFSAsync.cpp +++ b/fdbserver/VFSAsync.cpp @@ -61,7 +61,7 @@ const uint32_t RESERVED_COUNT = 1U<<29; VFSAsyncFile::VFSAsyncFile(std::string const& filename, int flags) -: filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0), injectedError(false) { +: filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0) { filename_lockCount_openCount[filename].second++; } @@ -92,7 +92,7 @@ static int asyncRead(sqlite3_file *pFile, void *zBuf, int iAmt, sqlite_int64 iOf return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR_READ); } return SQLITE_IOERR_READ; } @@ -106,7 +106,7 @@ static int asyncReleaseZeroCopy(sqlite3_file* pFile, void* data, int iAmt, sqlit p->file->releaseZeroCopy( data, iAmt, iOfst ); } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR); } return SQLITE_IOERR; } @@ -131,7 +131,7 @@ static int asyncReadZeroCopy(sqlite3_file *pFile, void **data, int iAmt, sqlite_ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR_READ); } return SQLITE_IOERR_READ; } @@ -151,7 +151,7 @@ static int asyncReadZeroCopy(sqlite3_file *pFile, void **data, int iAmt, sqlite_ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->errorInjected = true; + VFSAsyncFile::setInjectedError(SQLITE_IOERR_READ); } return SQLITE_IOERR_READ; } @@ -170,7 +170,7 @@ static int asyncWrite(sqlite3_file *pFile, const void *zBuf, int iAmt, sqlite_in return SQLITE_OK; } catch(Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR_WRITE); } return SQLITE_IOERR_WRITE; } @@ -189,7 +189,7 @@ static int asyncTruncate(sqlite3_file *pFile, sqlite_int64 size){ return SQLITE_OK; } catch(Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR_TRUNCATE); } return SQLITE_IOERR_TRUNCATE; } @@ -202,7 +202,7 @@ static int asyncSync(sqlite3_file *pFile, int flags){ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR_FSYNC); } TraceEvent("VFSSyncError") @@ -225,7 +225,7 @@ static int VFSAsyncFileSize(sqlite3_file *pFile, sqlite_int64 *pSize){ return SQLITE_OK; } catch (Error &e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pFile)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR_FSTAT); } return SQLITE_IOERR_FSTAT; } @@ -548,7 +548,7 @@ static int asyncOpen( .detail("IAsyncFile", DEBUG_DETERMINISM ? 0 : (int64_t)p->file.getPtr());*/ } catch (Error& e) { if(e.isInjectedFault()) { - VFSAsyncFile::setOpenError(); + VFSAsyncFile::setInjectedError(SQLITE_CANTOPEN); } TraceEvent("SQLiteOpenFail").error(e).detail("Filename", p->filename); p->~VFSAsyncFile(); @@ -655,7 +655,7 @@ static int asyncFullPathname( return SQLITE_OK; } catch (Error& e) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pVfs)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_IOERR); } TraceEvent(SevError,"VFSAsyncFullPathnameError").error(e).detail("PathIn", (std::string)zPath); return SQLITE_IOERR; @@ -726,7 +726,7 @@ static int asyncSleep(sqlite3_vfs *pVfs, int microseconds){ return microseconds; } catch( Error &e ) { if(e.isInjectedFault()) { - ((VFSAsyncFile *)pVfs)->setInjectedError(); + VFSAsyncFile::setInjectedError(SQLITE_ERROR); } TraceEvent(SevError, "AsyncSleepError").error(e,true); return 0; diff --git a/fdbserver/VFSAsync.h b/fdbserver/VFSAsync.h index b67292b9f2..4b1a0ea9f1 100644 --- a/fdbserver/VFSAsync.h +++ b/fdbserver/VFSAsync.h @@ -22,25 +22,6 @@ #include #include #include "fdbrpc/IAsyncFile.h" -#include "fdbserver/CoroFlow.h" - -//#include -//#include - -//#ifdef WIN32 -//#include -//#endif - -#ifdef __unixish__ -//#include -//#include -//#include -//#include -//#include -//#include -//#include -//#include -#endif /* ** When using this VFS, the sqlite3_file* handles that SQLite uses are @@ -52,39 +33,44 @@ struct VFSAsyncFile { int flags; std::string filename; Reference file; - bool injectedError; - // Method to set the injectedError flag to indicate that an injected error has been caught. - // Mostly useful for debugging injected fault handling. - void setInjectedError() { - //TraceEvent(SevInfo, "VFSSetInjectedFault").backtrace().detail("This", (void *)this); - injectedError = true; - } - - bool consumeInjectedError() { - bool e = injectedError; - injectedError = false; - return e; - } - - // Static methods for capturing an injected open error and consuming it to convert SQLite - // errors into Error instances with isInjectedFault() set. + // The functions setInjectedError() and checkInjectedError() use an INetwork global to store the last + // return code from VFSAsyncFile method resulting from catching an injected Error exception. This allows + // callers of the SQLite API to determine if an error code returned appears to be due to an injected + // error in simulation. // - // Uses a g_network global so that injected errors on one simulated process do not mask - // non-injected errors on another. - static void setOpenError() { - g_network->setGlobal(INetwork::enSQLiteOpenError, (flowGlobalType)true); + // This scheme is not perfect, as it is possible for non-injected errors to occur after injected errors + // and be incorrectly recognized as injected. This problem already existed, however, as the previous scheme + // assumed that any SQLite error that occurred after any injected error in the simulated process was + // itself injected. + // + // Unfortunately, there is no easy or reliable way to plumb the injectedness of an error though the return + // path of VFSAsyncFile -> SQLite -> SQLite API calls made by KeyValueStoreSQLite. + // + // An attempt was made to store injected errors in VFSAsyncFile instances and expose a SQLiteDB's file + // instances via the SQLite API. This failed, however, because sometimes files are opened, encounter an + // error, and are closed within the lifetime of one SQLite API call so the caller never has an opportunity + // to access the VFSAsyncFile object or its injected error state. + // + // An attempt was also made to match SQLite API return codes to VFSAsyncFile injected error return codes on + // a 1:1 basis, only flagging a code as rejected if it matches the last injected error code and only once. + // This would have been more accurate (though coincidences could occur). This scheme also failed, however, + // because sometimes errors from SQLite APIs are temporarily ignored, relying on a subsequent API call to error, + // however this error could be different and would not have been produced directly by VFSAsyncFile. + // + static void setInjectedError(int64_t rc) { + g_network->setGlobal(INetwork::enSQLiteInjectedError, (flowGlobalType)rc); + TraceEvent("VFSSetInjectedError").detail("ErrorCode", rc).detail("NetworkPtr", (void *)g_network).backtrace(); } - static void clearOpenError() { - g_network->setGlobal(INetwork::enSQLiteOpenError, (flowGlobalType)false); - } - - static bool consumeInjectedOpenError() { - bool e = (bool)g_network->global(INetwork::enSQLiteOpenError); - if(e) { - clearOpenError(); - } + static bool checkInjectedError() { + // Error code is only checked for non-zero because the SQLite API error code after an injected error + // may not match the error code returned by VFSAsyncFile when the inject error occurred. + bool e = g_network->global(INetwork::enSQLiteInjectedError) != (flowGlobalType)0; + TraceEvent("VFSCheckInjectedError") + .detail("Found", e) + .detail("ErrorCode", (int64_t)g_network->global(INetwork::enSQLiteInjectedError)) + .backtrace(); return e; } diff --git a/fdbserver/sqlite/sqlite3.amalgamation.c b/fdbserver/sqlite/sqlite3.amalgamation.c index ff6cc2dafe..adbad64ea1 100644 --- a/fdbserver/sqlite/sqlite3.amalgamation.c +++ b/fdbserver/sqlite/sqlite3.amalgamation.c @@ -93791,16 +93791,6 @@ SQLITE_API int sqlite3_open_v2( return openDatabase(filename, ppDb, flags, zVfs); } -SQLITE_API void * sqlite3_get_vfs_db(sqlite3 *pDb) { - Pager *pPager = sqlite3BtreePager(pDb->aDb[0].pBt); - return (pPager != NULL) ? pPager->fd : NULL; -} - -SQLITE_API void * sqlite3_get_vfs_wal(sqlite3 *pDb) { - Pager *pPager = sqlite3BtreePager(pDb->aDb[0].pBt); - return ((pPager != NULL) && (pPager->pWal != NULL)) ? pPager->pWal->pWalFd : NULL; -} - #ifndef SQLITE_OMIT_UTF16 /* ** Open a new database handle. diff --git a/fdbserver/sqlite/sqlite3.h b/fdbserver/sqlite/sqlite3.h index d3d62419f0..fc33edfd73 100755 --- a/fdbserver/sqlite/sqlite3.h +++ b/fdbserver/sqlite/sqlite3.h @@ -2411,9 +2411,6 @@ SQLITE_API int sqlite3_open_v2( const char *zVfs /* Name of VFS module to use */ ); -SQLITE_API void * sqlite3_get_vfs_db(sqlite3 *pDb); -SQLITE_API void * sqlite3_get_vfs_wal(sqlite3 *pDb); - /* ** CAPI3REF: Error Codes And Messages ** diff --git a/flow/network.h b/flow/network.h index e047f2e813..db373a09fc 100644 --- a/flow/network.h +++ b/flow/network.h @@ -437,7 +437,7 @@ public: enBlobCredentialFiles = 10, enNetworkAddressesFunc = 11, enClientFailureMonitor = 12, - enSQLiteOpenError = 13 + enSQLiteInjectedError = 13 }; virtual void longTaskCheck( const char* name ) {} From e56fe02a2555289b9a537a0d6799aacdd4650543 Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Sun, 17 Jan 2021 05:30:55 -0800 Subject: [PATCH 232/317] Merge branch 'add-throttling-on-AsyncfileCached' of github.com:sfc-gh-clin/foundationdb into afcache-write-limit --- fdbrpc/AsyncFileCached.actor.h | 17 +++++++++++++++-- fdbrpc/IAsyncFile.h | 4 ++++ fdbrpc/IRateControl.h | 10 ++++------ fdbserver/KeyValueStoreSQLite.actor.cpp | 10 +++++++++- fdbserver/Knobs.cpp | 1 + fdbserver/Knobs.h | 1 + fdbserver/storageserver.actor.cpp | 2 +- flow/Knobs.cpp | 2 ++ flow/Knobs.h | 3 +++ 9 files changed, 40 insertions(+), 10 deletions(-) diff --git a/fdbrpc/AsyncFileCached.actor.h b/fdbrpc/AsyncFileCached.actor.h index d9b192b662..95e694a9a2 100644 --- a/fdbrpc/AsyncFileCached.actor.h +++ b/fdbrpc/AsyncFileCached.actor.h @@ -230,6 +230,12 @@ public: return filename; } + std::vector const& getFlushable() { return flushable; } + + void setRateControl(Reference const& rc) override { rateControl = rc; } + + Reference const& getRateControl() { return rateControl; } + virtual void addref() { ReferenceCounted::addref(); //TraceEvent("AsyncFileCachedAddRef").detail("Filename", filename).detail("Refcount", debugGetReferenceCount()).backtrace(); @@ -262,6 +268,7 @@ private: Reference pageCache; Future currentTruncate; int64_t currentTruncateSize; + Reference rateControl; // Map of pointers which hold page buffers for pages which have been overwritten // but at the time of write there were still readZeroCopy holders. @@ -287,8 +294,10 @@ private: Int64MetricHandle countCachePageReadsMerged; Int64MetricHandle countCacheReadBytes; - AsyncFileCached( Reference uncached, const std::string& filename, int64_t length, Reference pageCache ) - : uncached(uncached), filename(filename), length(length), prevLength(length), pageCache(pageCache), currentTruncate(Void()), currentTruncateSize(0) { + AsyncFileCached(Reference uncached, const std::string& filename, int64_t length, + Reference pageCache) + : uncached(uncached), filename(filename), length(length), prevLength(length), pageCache(pageCache), + currentTruncate(Void()), currentTruncateSize(0), rateControl(nullptr) { if( !g_network->isSimulated() ) { countFileCacheWrites.init(LiteralStringRef("AsyncFile.CountFileCacheWrites"), filename); countFileCacheReads.init(LiteralStringRef("AsyncFile.CountFileCacheReads"), filename); @@ -503,6 +512,10 @@ struct AFCPage : public EvictablePage, public FastAllocated { wait( self->notReading && self->notFlushing ); if (dirty) { + // Wait for rate control if it is set + if (self->owner->getRateControl()) + wait(self->owner->getRateControl()->getAllowance(1)); + if ( self->pageOffset + self->pageCache->pageSize > self->owner->length ) { ASSERT(self->pageOffset < self->owner->length); memset( static_cast(self->data) + self->owner->length - self->pageOffset, 0, self->pageCache->pageSize - (self->owner->length - self->pageOffset) ); diff --git a/fdbrpc/IAsyncFile.h b/fdbrpc/IAsyncFile.h index 764b8e6426..b8fe40ebfd 100644 --- a/fdbrpc/IAsyncFile.h +++ b/fdbrpc/IAsyncFile.h @@ -24,6 +24,7 @@ #include #include "flow/flow.h" +#include "fdbrpc/IRateControl.h" // All outstanding operations must be cancelled before the destructor of IAsyncFile is called. // The desirability of the above semantic is disputed. Some classes (AsyncFileBlobStore, @@ -81,6 +82,9 @@ public: virtual void releaseZeroCopy( void* data, int length, int64_t offset ) {} virtual int64_t debugFD() = 0; + + // Used for rate control, at present, only AsyncFileCached supports it + virtual void setRateControl(Reference const& rc) { throw unsupported_operation(); } }; typedef void (*runCycleFuncPtr)(); diff --git a/fdbrpc/IRateControl.h b/fdbrpc/IRateControl.h index 0b1ca70659..c2316a8fbb 100644 --- a/fdbrpc/IRateControl.h +++ b/fdbrpc/IRateControl.h @@ -37,9 +37,8 @@ public: // An IRateControl implemenation that allows at most hands out at most windowLimit units of 'credit' in windowSeconds seconds class SpeedLimit : public IRateControl, ReferenceCounted { public: - SpeedLimit(int windowLimit, int windowSeconds) : m_limit(windowLimit), m_seconds(windowSeconds), m_last_update(0), m_budget(0) { - m_budget_max = m_limit * m_seconds; - m_last_update = timer(); + SpeedLimit(int windowLimit, double windowSeconds) : m_limit(windowLimit), m_seconds(windowSeconds), m_last_update(0), m_budget(0) { + m_last_update = now(); } virtual ~SpeedLimit() {} @@ -48,7 +47,7 @@ public: virtual Future getAllowance(unsigned int n) { // Replenish budget based on time since last update - double ts = timer(); + double ts = now(); // returnUnused happens to do exactly what we want here returnUnused((ts - m_last_update) / m_seconds * m_limit); m_last_update = ts; @@ -63,7 +62,7 @@ public: virtual void returnUnused(int n) { if(n < 0) return; - m_budget = std::min(m_budget + n, m_budget_max); + m_budget = std::min(m_budget + n, m_limit); } private: @@ -71,7 +70,6 @@ private: double m_seconds; double m_last_update; int64_t m_budget; - int64_t m_budget_max; }; // An IRateControl implemenation that enforces no limit diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index c55b178842..246daddb24 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -1348,6 +1348,14 @@ void SQLiteDB::open(bool writable) { if (dbFile.isError()) throw dbFile.getError(); // If we've failed to open the file, throw an exception if (walFile.isError()) throw walFile.getError(); // If we've failed to open the file, throw an exception + // Set Rate control if FLOW_KNOBS are positive + if (FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT > 0 && FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS > 0) { + Reference rc(new SpeedLimit(FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, + FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS)); + dbFile.get()->setRateControl(rc); + walFile.get()->setRateControl(rc); + } + //TraceEvent("KVThreadInitStage").detail("Stage",2).detail("Filename", filename).detail("Writable", writable); // Now that the file itself is open and locked, let sqlite open the database @@ -1950,7 +1958,7 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke //The DB file should not already be open ASSERT(!vfsAsyncIsOpen(filename)); - readCursors.resize(64); //< number of read threads + readCursors.resize(SERVER_KNOBS->SQLITE_READER_THREADS); //< number of read threads sqlite3_soft_heap_limit64( SERVER_KNOBS->SOFT_HEAP_LIMIT ); // SOMEDAY: Is this a performance issue? Should we drop the cache sizes for individual threads? TaskPriority taskId = g_network->getCurrentTask(); diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 79b4986dce..d2244fc5ec 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -250,6 +250,7 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( SQLITE_BTREE_PAGE_USABLE, 4096 - 8); // pageSize - reserveSize for page checksum init( SQLITE_CHUNK_SIZE_PAGES, 25600 ); // 100MB init( SQLITE_CHUNK_SIZE_PAGES_SIM, 1024 ); // 4MB + init( SQLITE_READER_THREADS, 64 ); // number of read threads // Maximum and minimum cell payload bytes allowed on primary page as calculated in SQLite. // These formulas are copied from SQLite, using its hardcoded constants, so if you are diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 2047a0439d..a1317cdd9d 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -222,6 +222,7 @@ public: double SQLITE_FRAGMENT_MIN_SAVINGS; int SQLITE_CHUNK_SIZE_PAGES; int SQLITE_CHUNK_SIZE_PAGES_SIM; + int SQLITE_READER_THREADS; // KeyValueStoreSqlite spring cleaning double SPRING_CLEANING_NO_ACTION_INTERVAL; diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 467decfd58..0b8c7f3824 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -339,7 +339,7 @@ public: const double currentTime = now(); double longest = 0; UID UIDofLongest; - for (const auto kv: startTimeMap) { + for (const auto& kv: startTimeMap) { const double currentRunningTime = currentTime - kv.second; if (longest < currentRunningTime) { longest = currentRunningTime; diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index da722d2079..9adf422fac 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -92,6 +92,8 @@ FlowKnobs::FlowKnobs(bool randomize, bool isSimulated) { init( MAX_EVICT_ATTEMPTS, 100 ); if( randomize && BUGGIFY ) MAX_EVICT_ATTEMPTS = 2; init( CACHE_EVICTION_POLICY, "random" ); init( PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION, 0.1 ); if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 0.0; else if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 1.0; + init( FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, -1 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT = 1e6; // 0 - auto(TODO); Negative - no limit + init( FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS, -1 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS = 1; // 0 - auto(TODO); Negative - no limit //AsyncFileEIO init( EIO_MAX_PARALLELISM, 4 ); diff --git a/flow/Knobs.h b/flow/Knobs.h index 258ea28ea2..a3f46f8a27 100644 --- a/flow/Knobs.h +++ b/flow/Knobs.h @@ -112,6 +112,9 @@ public: double PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION; double TOO_MANY_CONNECTIONS_CLOSED_RESET_DELAY; int TOO_MANY_CONNECTIONS_CLOSED_TIMEOUT; + int PEER_UNAVAILABLE_FOR_LONG_TIME_TIMEOUT; + int FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT; + double FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS; //AsyncFileEIO int EIO_MAX_PARALLELISM; From 52c2695f59de8fbf647b3c68908aa7bcb47c8ecc Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Sun, 24 Jan 2021 01:50:09 -0800 Subject: [PATCH 233/317] Bug fixes involving use of AFCached rate control in simulation. --- fdbrpc/AsyncFileCached.actor.h | 5 +++- fdbrpc/IAsyncFile.h | 1 + fdbrpc/IRateControl.h | 39 ++++++++++++++++++------- fdbserver/KeyValueStoreSQLite.actor.cpp | 29 +++++++++++++++--- flow/Knobs.cpp | 12 ++++++-- 5 files changed, 69 insertions(+), 17 deletions(-) diff --git a/fdbrpc/AsyncFileCached.actor.h b/fdbrpc/AsyncFileCached.actor.h index 95e694a9a2..37d4d07d03 100644 --- a/fdbrpc/AsyncFileCached.actor.h +++ b/fdbrpc/AsyncFileCached.actor.h @@ -234,7 +234,7 @@ public: void setRateControl(Reference const& rc) override { rateControl = rc; } - Reference const& getRateControl() { return rateControl; } + Reference const& getRateControl() override { return rateControl; } virtual void addref() { ReferenceCounted::addref(); @@ -244,6 +244,9 @@ public: if (delref_no_destroy()) { // If this is ever ThreadSafeReferenceCounted... // setrefCountUnsafe(0); + if(rateControl) { + rateControl->killWaiters(io_error()); + } auto f = quiesce(); //TraceEvent("AsyncFileCachedDel").detail("Filename", filename) diff --git a/fdbrpc/IAsyncFile.h b/fdbrpc/IAsyncFile.h index b8fe40ebfd..8656d542bb 100644 --- a/fdbrpc/IAsyncFile.h +++ b/fdbrpc/IAsyncFile.h @@ -84,6 +84,7 @@ public: virtual int64_t debugFD() = 0; // Used for rate control, at present, only AsyncFileCached supports it + virtual Reference const& getRateControl() { throw unsupported_operation(); } virtual void setRateControl(Reference const& rc) { throw unsupported_operation(); } }; diff --git a/fdbrpc/IRateControl.h b/fdbrpc/IRateControl.h index c2316a8fbb..4896edab31 100644 --- a/fdbrpc/IRateControl.h +++ b/fdbrpc/IRateControl.h @@ -30,6 +30,8 @@ public: // If all of the allowance is not used the unused units can be given back. // For convenience, n can safely be negative. virtual void returnUnused(int n) = 0; + virtual void killWaiters(const Error &e) = 0; + virtual void wakeWaiters() = 0; virtual void addref() = 0; virtual void delref() = 0; }; @@ -40,12 +42,14 @@ public: SpeedLimit(int windowLimit, double windowSeconds) : m_limit(windowLimit), m_seconds(windowSeconds), m_last_update(0), m_budget(0) { m_last_update = now(); } - virtual ~SpeedLimit() {} + virtual ~SpeedLimit() { + m_stop.send(Never()); + } - virtual void addref() { ReferenceCounted::addref(); } - virtual void delref() { ReferenceCounted::delref(); } + void addref() override { ReferenceCounted::addref(); } + void delref() override { ReferenceCounted::delref(); } - virtual Future getAllowance(unsigned int n) { + Future getAllowance(unsigned int n) override { // Replenish budget based on time since last update double ts = now(); // returnUnused happens to do exactly what we want here @@ -56,20 +60,33 @@ public: if(m_budget >= 0) return Void(); // Otherise return the amount of time it will take for the budget to rise to 0. - return delay(m_seconds * -m_budget / m_limit); + return m_stop.getFuture() || delay(m_seconds * -m_budget / m_limit); } - virtual void returnUnused(int n) { + void returnUnused(int n) override { if(n < 0) return; m_budget = std::min(m_budget + n, m_limit); } + void wakeWaiters() override { + Promise p; + p.swap(m_stop); + p.send(Void()); + } + + void killWaiters(const Error &e) override { + Promise p; + p.swap(m_stop); + p.sendError(e); + } + private: int m_limit; double m_seconds; double m_last_update; int64_t m_budget; + Promise m_stop; }; // An IRateControl implemenation that enforces no limit @@ -77,9 +94,11 @@ class Unlimited : public IRateControl, ReferenceCounted { public: Unlimited() {} virtual ~Unlimited() {} - virtual void addref() { ReferenceCounted::addref(); } - virtual void delref() { ReferenceCounted::delref(); } + void addref() override { ReferenceCounted::addref(); } + void delref() override { ReferenceCounted::delref(); } - virtual Future getAllowance(unsigned int n) { return Void(); } - virtual void returnUnused(int n) {} + Future getAllowance(unsigned int n) override { return Void(); } + void returnUnused(int n) override {} + void wakeWaiters() override {} + void killWaiters(const Error &e) override {} }; diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 246daddb24..0f97473781 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -1298,6 +1298,7 @@ int SQLiteDB::checkAllPageChecksums() { .detail("TotalErrors", totalErrors); ASSERT(!vfsAsyncIsOpen(filename)); + ASSERT(!vfsAsyncIsOpen(filename + "-wal")); return totalErrors; } @@ -1350,10 +1351,29 @@ void SQLiteDB::open(bool writable) { // Set Rate control if FLOW_KNOBS are positive if (FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT > 0 && FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS > 0) { - Reference rc(new SpeedLimit(FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, - FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS)); - dbFile.get()->setRateControl(rc); - walFile.get()->setRateControl(rc); + // The writer thread is created before the readers, so it should initialize the rate controls. + if(writable) { + // If either rate control is already initialized, then its file is still being held open by a previous + // usage, likely because ~AsyncFileCached() launched a background actor that is waiting for outstanding + // operations to finish. In case any of those are waiting for time to pass due to the rate control, + // send them an io_error. + if(dbFile.get()->getRateControl()) { + dbFile.get()->getRateControl()->killWaiters(io_error()); + } + if(walFile.get()->getRateControl()) { + walFile.get()->getRateControl()->killWaiters(io_error()); + } + + // Create a new rate control and assign it to both files. + Reference rc(new SpeedLimit(FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, + FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS)); + dbFile.get()->setRateControl(rc); + walFile.get()->setRateControl(rc); + } else { + // When a reader thread is opened, the rate controls should already be equal and not null + ASSERT(dbFile.get()->getRateControl() == walFile.get()->getRateControl()); + ASSERT(dbFile.get()->getRateControl()); + } } //TraceEvent("KVThreadInitStage").detail("Stage",2).detail("Filename", filename).detail("Writable", writable); @@ -1957,6 +1977,7 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke //The DB file should not already be open ASSERT(!vfsAsyncIsOpen(filename)); + ASSERT(!vfsAsyncIsOpen(filename + "-wal")); readCursors.resize(SERVER_KNOBS->SQLITE_READER_THREADS); //< number of read threads diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index 9adf422fac..9b73f4f104 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -92,8 +92,16 @@ FlowKnobs::FlowKnobs(bool randomize, bool isSimulated) { init( MAX_EVICT_ATTEMPTS, 100 ); if( randomize && BUGGIFY ) MAX_EVICT_ATTEMPTS = 2; init( CACHE_EVICTION_POLICY, "random" ); init( PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION, 0.1 ); if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 0.0; else if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 1.0; - init( FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, -1 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT = 1e6; // 0 - auto(TODO); Negative - no limit - init( FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS, -1 ); if( randomize && BUGGIFY ) FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS = 1; // 0 - auto(TODO); Negative - no limit + init( FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS, -1 ); + init( FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, -1 ); + if( randomize && BUGGIFY ) { + // Choose an window between .01 and 1.01 seconds. + FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS = 0.01 + deterministicRandom()->random01(); + // Choose 10k to 50k operations per second + int opsPerSecond = deterministicRandom()->randomInt(10000, 50000); + // Set window limit to opsPerSecond scaled down to window size + FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT = opsPerSecond * FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS; + } //AsyncFileEIO init( EIO_MAX_PARALLELISM, 4 ); From b0fd6bfbcf50cd6515dc5ad5a8648317d6c2e70a Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Wed, 27 Jan 2021 00:01:33 -0800 Subject: [PATCH 234/317] More bug fixes in SQLite file handle lifetimes after storage server restart (including simulated process reboot) when a write rate limit is used. Added several debug trace events, renamed some VFSAsync* events to be more consistent. --- fdbrpc/AsyncFileCached.actor.h | 3 ++ fdbserver/KeyValueStoreSQLite.actor.cpp | 48 ++++++++++++++++++------- fdbserver/VFSAsync.cpp | 39 +++++++++++++------- flow/Knobs.cpp | 2 +- 4 files changed, 66 insertions(+), 26 deletions(-) diff --git a/fdbrpc/AsyncFileCached.actor.h b/fdbrpc/AsyncFileCached.actor.h index 37d4d07d03..1ed331fac2 100644 --- a/fdbrpc/AsyncFileCached.actor.h +++ b/fdbrpc/AsyncFileCached.actor.h @@ -244,7 +244,10 @@ public: if (delref_no_destroy()) { // If this is ever ThreadSafeReferenceCounted... // setrefCountUnsafe(0); + if(rateControl) { + TraceEvent(SevDebug, "AsyncFileCachedKillWaiters") + .detail("Filename", filename); rateControl->killWaiters(io_error()); } diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 0f97473781..015fa39977 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -212,15 +212,27 @@ struct SQLiteDB : NonCopyable { void open(bool writable); void createFromScratch(); - SQLiteDB( std::string filename, bool page_checksums, bool fragment_values): filename(filename), db(NULL), btree(NULL), table(-1), freetable(-1), haveMutex(false), page_checksums(page_checksums), fragment_values(fragment_values) {} + SQLiteDB( std::string filename, bool page_checksums, bool fragment_values): filename(filename), db(NULL), btree(NULL), table(-1), freetable(-1), haveMutex(false), page_checksums(page_checksums), fragment_values(fragment_values) { + TraceEvent(SevDebug, "SQLiteDBCreate") + .detail("This", (void*)this) + .detail("Filename", filename) + .backtrace(); + } ~SQLiteDB() { + TraceEvent(SevDebug, "SQLiteDBDestroy") + .detail("This", (void*)this) + .detail("Filename", filename) + .backtrace(); + if (db) { if (haveMutex) { sqlite3_mutex_leave(db->mutex); } sqlite3_close( db ); } + + disableRateControl(); } void initPagerCodec() { @@ -240,7 +252,7 @@ struct SQLiteDB : NonCopyable { //if (deterministicRandom()->random01() < .001) rc = SQLITE_INTERRUPT; if (rc) { // Our exceptions don't propagate through sqlite, so we don't know for sure if the error that caused this was - // an injected fault. Assume that if fault injection is happening, this is an injected fault. + // an injected fault. Assume that if VFSAsyncFile caught an injected Error that it caused this error return code. Error err = io_error(); if (g_network->isSimulated() && VFSAsyncFile::checkInjectedError()) { err = err.asInjectedFault(); @@ -254,6 +266,24 @@ struct SQLiteDB : NonCopyable { throw err; } } + + void disableRateControl() { + if(dbFile && dbFile->getRateControl()) { + TraceEvent(SevDebug, "SQLiteDBShutdownRateControl").detail("Filename", dbFile->getFilename()); + Reference rc = dbFile->getRateControl(); + dbFile->setRateControl({}); + rc->wakeWaiters(); + } + + if(walFile && walFile->getRateControl()) { + TraceEvent(SevDebug, "SQLiteDBShutdownRateControl").detail("Filename", walFile->getFilename()); + Reference rc = walFile->getRateControl(); + walFile->setRateControl({}); + rc->wakeWaiters(); + } + + } + void checkpoint( bool restart ) { int logSize=0, checkpointCount=0; //double t = timer(); @@ -1353,17 +1383,6 @@ void SQLiteDB::open(bool writable) { if (FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT > 0 && FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS > 0) { // The writer thread is created before the readers, so it should initialize the rate controls. if(writable) { - // If either rate control is already initialized, then its file is still being held open by a previous - // usage, likely because ~AsyncFileCached() launched a background actor that is waiting for outstanding - // operations to finish. In case any of those are waiting for time to pass due to the rate control, - // send them an io_error. - if(dbFile.get()->getRateControl()) { - dbFile.get()->getRateControl()->killWaiters(io_error()); - } - if(walFile.get()->getRateControl()) { - walFile.get()->getRateControl()->killWaiters(io_error()); - } - // Create a new rate control and assign it to both files. Reference rc(new SpeedLimit(FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS)); @@ -1965,6 +1984,9 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke writeThread(CoroThreadPool::createThreadPool()), readsRequested(0), writesRequested(0), writesComplete(0), diskBytesUsed(0), freeListPages(0) { + TraceEvent(SevDebug, "KeyValueStoreSQLiteCreate") + .detail("Filename", filename); + stopOnErr = stopOnError(this); #if SQLITE_THREADSAFE == 0 diff --git a/fdbserver/VFSAsync.cpp b/fdbserver/VFSAsync.cpp index 174bd425c4..24aa73108f 100644 --- a/fdbserver/VFSAsync.cpp +++ b/fdbserver/VFSAsync.cpp @@ -63,6 +63,12 @@ const uint32_t RESERVED_COUNT = 1U<<29; VFSAsyncFile::VFSAsyncFile(std::string const& filename, int flags) : filename(filename), flags(flags), pLockCount(&filename_lockCount_openCount[filename].first), debug_zcrefs(0), debug_zcreads(0), debug_reads(0), chunkSize(0) { filename_lockCount_openCount[filename].second++; + + TraceEvent(SevDebug, "VFSAsyncFileConstruct") + .detail("Filename", filename) + .detail("OpenCount", filename_lockCount_openCount[filename].second) + .detail("LockCount", filename_lockCount_openCount[filename].first) + .backtrace(); } std::map> VFSAsyncFile::filename_lockCount_openCount; @@ -70,9 +76,10 @@ std::map> VFSAsyncFile::filename_lockCount_ static int asyncClose(sqlite3_file *pFile){ VFSAsyncFile *p = (VFSAsyncFile*)pFile; - /*TraceEvent("VFSAsyncClose").detail("Fd", p->file->debugFD()) - .detail("Filename", p->filename).detail("ZCRefs", p->debug_zcrefs) - .detail("ZCReads", p->debug_zcreads).detail("NormalReads", p->debug_reads).backtrace();*/ + TraceEvent(SevDebug, "VFSAsyncFileDestroy") + .detail("Filename", p->filename) + .backtrace(); + //printf("Closing %s: %d zcrefs, %d/%d reads zc\n", filename.c_str(), debug_zcrefs, debug_zcreads, debug_zcreads+debug_reads); ASSERT( !p->debug_zcrefs ); @@ -205,7 +212,7 @@ static int asyncSync(sqlite3_file *pFile, int flags){ VFSAsyncFile::setInjectedError(SQLITE_IOERR_FSYNC); } - TraceEvent("VFSSyncError") + TraceEvent("VFSAsyncFileSyncError") .error(e) .detail("Filename", p->filename) .detail("Sqlite3File", (int64_t)pFile) @@ -467,10 +474,20 @@ static int asyncDeviceCharacteristics(sqlite3_file *pFile){ return 0; } } VFSAsyncFile::~VFSAsyncFile() { - //TraceEvent("VFSAsyncFileDel").detail("Filename", filename); + + TraceEvent(SevDebug, "VFSAsyncFileDestroyStart") + .detail("Filename", filename) + .detail("OpenCount", filename_lockCount_openCount[filename].second) + .detail("LockCount", filename_lockCount_openCount[filename].first) + .backtrace(); + if (!--filename_lockCount_openCount[filename].second) { filename_lockCount_openCount.erase(filename); + TraceEvent(SevDebug, "VFSAsyncFileDestroy") + .detail("Filename", filename) + .backtrace(); + //Always delete the shared memory when the last copy of the file is deleted. In simulation, this is helpful because "killing" a file without properly closing //it can result in a shared memory state that causes corruption when reopening the killed file. The only expected penalty from doing this //is a potentially slower open operation on a database, but that should happen infrequently. @@ -540,17 +557,15 @@ static int asyncOpen( // Note that SQLiteDB::open also opens the db file, so its flags and modes are important, too p->file = waitForAndGet( IAsyncFileSystem::filesystem()->open( p->filename, oflags, 0600 ) ); - /*TraceEvent("VFSOpened") + TraceEvent(SevDebug, "VFSAsyncFileOpened") .detail("Filename", p->filename) - .detail("Fd", DEBUG_DETERMINISM ? 0 : p->file->debugFD()) - .detail("Flags", flags) - .detail("Sqlite3File", DEBUG_DETERMINISM ? 0 : (int64_t)pFile) - .detail("IAsyncFile", DEBUG_DETERMINISM ? 0 : (int64_t)p->file.getPtr());*/ + .backtrace(); + } catch (Error& e) { if(e.isInjectedFault()) { VFSAsyncFile::setInjectedError(SQLITE_CANTOPEN); } - TraceEvent("SQLiteOpenFail").error(e).detail("Filename", p->filename); + TraceEvent("VFSAsyncFileOpenError").error(e).detail("Filename", p->filename); p->~VFSAsyncFile(); return SQLITE_CANTOPEN; } @@ -728,7 +743,7 @@ static int asyncSleep(sqlite3_vfs *pVfs, int microseconds){ if(e.isInjectedFault()) { VFSAsyncFile::setInjectedError(SQLITE_ERROR); } - TraceEvent(SevError, "AsyncSleepError").error(e,true); + TraceEvent(SevError, "VFSAsyncSleepError").error(e,true); return 0; } } diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index 9b73f4f104..a571642af1 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -98,7 +98,7 @@ FlowKnobs::FlowKnobs(bool randomize, bool isSimulated) { // Choose an window between .01 and 1.01 seconds. FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS = 0.01 + deterministicRandom()->random01(); // Choose 10k to 50k operations per second - int opsPerSecond = deterministicRandom()->randomInt(10000, 50000); + int opsPerSecond = deterministicRandom()->randomInt(1000, 5000); // Set window limit to opsPerSecond scaled down to window size FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT = opsPerSecond * FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS; } From 4982787a80417588ffda0a8a0e619adc7d69869d Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Wed, 27 Jan 2021 05:31:02 -0800 Subject: [PATCH 235/317] Another attempt to fix SQLite lifetime issues. KeyValueStoreSQLite::doClose() can now access the Writer instance and call disableRateControl() on its SQLiteDB instance prior to stopping the reader and writer thread pools. This should prevent rate limiting from interfering with SQLite shutdown. --- fdbserver/KeyValueStoreSQLite.actor.cpp | 27 ++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 015fa39977..a549b9db56 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -231,8 +231,6 @@ struct SQLiteDB : NonCopyable { } sqlite3_close( db ); } - - disableRateControl(); } void initPagerCodec() { @@ -1541,6 +1539,9 @@ private: volatile int64_t diskBytesUsed; volatile int64_t freeListPages; + struct Writer; + Writer *writer; + vector< Reference > readCursors; struct Reader : IThreadPoolReceiver { @@ -1919,8 +1920,16 @@ private: ACTOR static void doClose( KeyValueStoreSQLite* self, bool deleteOnClose ) { state Error error = success(); + + if(self->writer != nullptr) { + self->writer->conn.disableRateControl(); + wait(delay(0)); + } + try { - TraceEvent("KVClose", self->logID).detail("Del", deleteOnClose); + TraceEvent("KVClose", self->logID) + .detail("Filename", self->filename) + .detail("Del", deleteOnClose); self->starting.cancel(); self->cleaning.cancel(); self->logging.cancel(); @@ -1931,12 +1940,14 @@ private: } } catch (Error& e) { TraceEvent(SevError, "KVDoCloseError", self->logID) - .error(e,true) + .detail("Filename", self->filename) + .error(e, true) .detail("Reason", e.code() == error_code_platform_error ? "could not delete database" : "unknown"); error = e; } - TraceEvent("KVClosed", self->logID); + TraceEvent("KVClosed", self->logID) + .detail("Filename", self->filename); if( error.code() != error_code_actor_cancelled ) { self->stopped.send(Void()); delete self; @@ -1982,7 +1993,8 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke logID(id), readThreads(CoroThreadPool::createThreadPool()), writeThread(CoroThreadPool::createThreadPool()), - readsRequested(0), writesRequested(0), writesComplete(0), diskBytesUsed(0), freeListPages(0) + readsRequested(0), writesRequested(0), writesComplete(0), diskBytesUsed(0), freeListPages(0), + writer(nullptr) { TraceEvent(SevDebug, "KeyValueStoreSQLiteCreate") .detail("Filename", filename); @@ -2006,7 +2018,8 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke sqlite3_soft_heap_limit64( SERVER_KNOBS->SOFT_HEAP_LIMIT ); // SOMEDAY: Is this a performance issue? Should we drop the cache sizes for individual threads? TaskPriority taskId = g_network->getCurrentTask(); g_network->setCurrentTask(TaskPriority::DiskWrite); - writeThread->addThread( new Writer(filename, type==KeyValueStoreType::SSD_BTREE_V2, checkChecksums, checkIntegrity, writesComplete, springCleaningStats, diskBytesUsed, freeListPages, id, &readCursors) ); + writer = new Writer(filename, type==KeyValueStoreType::SSD_BTREE_V2, checkChecksums, checkIntegrity, writesComplete, springCleaningStats, diskBytesUsed, freeListPages, id, &readCursors); + writeThread->addThread(writer); g_network->setCurrentTask(taskId); auto p = new Writer::InitAction(); auto f = p->result.getFuture(); From bb6608ccd8fc2327c2bf7cf894f5e2846e3a01fe Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Thu, 28 Jan 2021 00:59:05 -0800 Subject: [PATCH 236/317] Another bug fix in SQLite file instance lifetimes. Writer can be destroyed before doClose() or stopOnError() have a chance to react, so Writer can't be used to get access to file handles to remove the rate limiter and trigger pending requests to complete. New logic is for Writer initialization to place opened file handles in KeyValueStoreSQLite instance and move disableRateControl() there, to be called from doClose(). --- fdbserver/KeyValueStoreSQLite.actor.cpp | 60 ++++++++++++------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index a549b9db56..93880b77de 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -265,23 +265,6 @@ struct SQLiteDB : NonCopyable { } } - void disableRateControl() { - if(dbFile && dbFile->getRateControl()) { - TraceEvent(SevDebug, "SQLiteDBShutdownRateControl").detail("Filename", dbFile->getFilename()); - Reference rc = dbFile->getRateControl(); - dbFile->setRateControl({}); - rc->wakeWaiters(); - } - - if(walFile && walFile->getRateControl()) { - TraceEvent(SevDebug, "SQLiteDBShutdownRateControl").detail("Filename", walFile->getFilename()); - Reference rc = walFile->getRateControl(); - walFile->setRateControl({}); - rc->wakeWaiters(); - } - - } - void checkpoint( bool restart ) { int logSize=0, checkpointCount=0; //double t = timer(); @@ -1539,10 +1522,8 @@ private: volatile int64_t diskBytesUsed; volatile int64_t freeListPages; - struct Writer; - Writer *writer; - vector< Reference > readCursors; + Reference dbFile, walFile; struct Reader : IThreadPoolReceiver { SQLiteDB conn; @@ -1624,6 +1605,7 @@ private: }; struct Writer : IThreadPoolReceiver { + KeyValueStoreSQLite *kvs; SQLiteDB conn; Cursor* cursor; int commits; @@ -1638,8 +1620,9 @@ private: bool checkAllChecksumsOnOpen; bool checkIntegrityOnOpen; - explicit Writer( std::string const& filename, bool isBtreeV2, bool checkAllChecksumsOnOpen, bool checkIntegrityOnOpen, volatile int64_t& writesComplete, volatile SpringCleaningStats& springCleaningStats, volatile int64_t& diskBytesUsed, volatile int64_t& freeListPages, UID dbgid, vector>* pReadThreads ) - : conn( filename, isBtreeV2, isBtreeV2 ), + explicit Writer( KeyValueStoreSQLite *kvs, bool isBtreeV2, bool checkAllChecksumsOnOpen, bool checkIntegrityOnOpen, volatile int64_t& writesComplete, volatile SpringCleaningStats& springCleaningStats, volatile int64_t& diskBytesUsed, volatile int64_t& freeListPages, UID dbgid, vector>* pReadThreads ) + : kvs(kvs), + conn( kvs->filename, isBtreeV2, isBtreeV2 ), commits(), setsThisCommit(), freeTableEmpty(false), writesComplete(writesComplete), @@ -1669,6 +1652,8 @@ private: } } conn.open(true); + kvs->dbFile = conn.dbFile; + kvs->walFile = conn.walFile; //If a wal file fails during the commit process before finishing a checkpoint, then it is possible that our wal file will be non-empty //when we reload it. We execute a checkpoint here to remedy that situation. This call must come before before creating a cursor because @@ -1905,12 +1890,32 @@ private: } } + void disableRateControl() { + if(dbFile && dbFile->getRateControl()) { + TraceEvent(SevDebug, "KeyValueStoreSQLiteShutdownRateControl").detail("Filename", dbFile->getFilename()); + Reference rc = dbFile->getRateControl(); + dbFile->setRateControl({}); + rc->wakeWaiters(); + } + + if(walFile && walFile->getRateControl()) { + TraceEvent(SevDebug, "KeyValueStoreSQLiteShutdownRateControl").detail("Filename", walFile->getFilename()); + Reference rc = walFile->getRateControl(); + walFile->setRateControl({}); + rc->wakeWaiters(); + } + } + ACTOR static Future stopOnError( KeyValueStoreSQLite* self ) { try { wait( self->readThreads->getError() || self->writeThread->getError() ); } catch (Error& e) { if (e.code() == error_code_actor_cancelled) throw; + + self->disableRateControl(); + self->readThreads->stop(e); + self->writeThread->stop(e); } self->readThreads->stop(); @@ -1921,10 +1926,7 @@ private: ACTOR static void doClose( KeyValueStoreSQLite* self, bool deleteOnClose ) { state Error error = success(); - if(self->writer != nullptr) { - self->writer->conn.disableRateControl(); - wait(delay(0)); - } + self->disableRateControl(); try { TraceEvent("KVClose", self->logID) @@ -1993,8 +1995,7 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke logID(id), readThreads(CoroThreadPool::createThreadPool()), writeThread(CoroThreadPool::createThreadPool()), - readsRequested(0), writesRequested(0), writesComplete(0), diskBytesUsed(0), freeListPages(0), - writer(nullptr) + readsRequested(0), writesRequested(0), writesComplete(0), diskBytesUsed(0), freeListPages(0) { TraceEvent(SevDebug, "KeyValueStoreSQLiteCreate") .detail("Filename", filename); @@ -2018,8 +2019,7 @@ KeyValueStoreSQLite::KeyValueStoreSQLite(std::string const& filename, UID id, Ke sqlite3_soft_heap_limit64( SERVER_KNOBS->SOFT_HEAP_LIMIT ); // SOMEDAY: Is this a performance issue? Should we drop the cache sizes for individual threads? TaskPriority taskId = g_network->getCurrentTask(); g_network->setCurrentTask(TaskPriority::DiskWrite); - writer = new Writer(filename, type==KeyValueStoreType::SSD_BTREE_V2, checkChecksums, checkIntegrity, writesComplete, springCleaningStats, diskBytesUsed, freeListPages, id, &readCursors); - writeThread->addThread(writer); + writeThread->addThread(new Writer(this, type==KeyValueStoreType::SSD_BTREE_V2, checkChecksums, checkIntegrity, writesComplete, springCleaningStats, diskBytesUsed, freeListPages, id, &readCursors)); g_network->setCurrentTask(taskId); auto p = new Writer::InitAction(); auto f = p->result.getFuture(); From 15aa877388eaa4b9d23c5f35f19e2547cee2d78b Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Fri, 29 Jan 2021 15:18:46 -0800 Subject: [PATCH 237/317] Use VFSAsyncFile::checkInjectedError() to replace old injected fault detection, see pr#4212 --- fdbserver/KeyValueStoreSQLite.actor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 93880b77de..3d0fa592da 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -295,7 +295,7 @@ struct SQLiteDB : NonCopyable { int tables[] = {1, table, freetable}; TraceEvent("BTreeIntegrityCheckBegin").detail("Filename", filename); char* e = sqlite3BtreeIntegrityCheck(btree, tables, 3, 1000, &errors, verbose); - if (!(g_network->isSimulated() && (g_simulator.getCurrentProcess()->fault_injection_p1 || g_simulator.getCurrentProcess()->rebooting))) { + if (!(g_network->isSimulated() && VFSAsyncFile::checkInjectedError())) { TraceEvent((errors||e) ? SevError : SevInfo, "BTreeIntegrityCheckResults").detail("Filename", filename).detail("ErrorTotal", errors); if(e != nullptr) { // e is a string containing 1 or more lines. Create a separate trace event for each line. @@ -1665,7 +1665,7 @@ private: if (checkIntegrityOnOpen || EXPENSIVE_VALIDATION) { if(conn.check(false) != 0) { // A corrupt btree structure must not be used. - if (g_network->isSimulated() && (g_simulator.getCurrentProcess()->fault_injection_p1 || g_simulator.getCurrentProcess()->machine->machineProcess->fault_injection_p1 || g_simulator.getCurrentProcess()->rebooting)) { + if (g_network->isSimulated() && VFSAsyncFile::checkInjectedError()) { throw file_corrupt().asInjectedFault(); } else { throw file_corrupt(); From 97781bde76cb720feaec24203c6dd00e2df2551b Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Sat, 30 Jan 2021 18:35:16 -0800 Subject: [PATCH 238/317] Removed stray knob added unintentionally in a merge conflict. --- flow/Knobs.h | 1 - 1 file changed, 1 deletion(-) diff --git a/flow/Knobs.h b/flow/Knobs.h index a3f46f8a27..faa9512b23 100644 --- a/flow/Knobs.h +++ b/flow/Knobs.h @@ -112,7 +112,6 @@ public: double PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION; double TOO_MANY_CONNECTIONS_CLOSED_RESET_DELAY; int TOO_MANY_CONNECTIONS_CLOSED_TIMEOUT; - int PEER_UNAVAILABLE_FOR_LONG_TIME_TIMEOUT; int FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT; double FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS; From d607ba3ac150a81dd457e1fdd15df7c92fd541fb Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Sun, 31 Jan 2021 03:59:36 -0800 Subject: [PATCH 239/317] Removed merge artifact which calls functions not present in release-6.2. --- fdbserver/KeyValueStoreSQLite.actor.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index 3d0fa592da..b80c8cbd7c 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -1914,8 +1914,6 @@ private: throw; self->disableRateControl(); - self->readThreads->stop(e); - self->writeThread->stop(e); } self->readThreads->stop(); From ccea7174649377fda7683f03f9501122f27f47a2 Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Mon, 1 Feb 2021 08:10:20 -0700 Subject: [PATCH 240/317] Update build/Dockerfile Co-authored-by: Alvin Moore <36203359+AlvinMooreSr@users.noreply.github.com> --- build/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/Dockerfile b/build/Dockerfile index 79e8ad7e17..d5f4eff908 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -128,8 +128,8 @@ RUN cd /opt/boringssl/build &&\ ARG TIMEZONEINFO=America/Los_Angeles RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/${TIMEZONEINFO} /etc/localtime -LABEL version=0.1.23 -ENV DOCKER_IMAGEVER=0.1.23 +LABEL version=0.1.24 +ENV DOCKER_IMAGEVER=0.1.24 ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0 ENV CC=/opt/rh/devtoolset-8/root/usr/bin/gcc ENV CXX=/opt/rh/devtoolset-8/root/usr/bin/g++ From 27c7a37690f07f71c5fb25dd94787fd78f7f4e85 Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Mon, 1 Feb 2021 08:10:26 -0700 Subject: [PATCH 241/317] Update build/Dockerfile.devel Co-authored-by: Alvin Moore <36203359+AlvinMooreSr@users.noreply.github.com> --- build/Dockerfile.devel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/Dockerfile.devel b/build/Dockerfile.devel index 9d2fd5e039..d681989089 100644 --- a/build/Dockerfile.devel +++ b/build/Dockerfile.devel @@ -1,4 +1,4 @@ -ARG IMAGE_TAG=0.1.23 +ARG IMAGE_TAG=0.1.24 FROM foundationdb/foundationdb-build:${IMAGE_TAG} USER root From 9932c00d46c316a94628256701b1481655d726e3 Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Mon, 1 Feb 2021 08:10:35 -0700 Subject: [PATCH 242/317] Update build/docker-compose.yaml Co-authored-by: Alvin Moore <36203359+AlvinMooreSr@users.noreply.github.com> --- build/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/docker-compose.yaml b/build/docker-compose.yaml index aa788c854d..7828de1c85 100644 --- a/build/docker-compose.yaml +++ b/build/docker-compose.yaml @@ -2,7 +2,7 @@ version: "3" services: common: &common - image: foundationdb/foundationdb-build:0.1.23 + image: foundationdb/foundationdb-build:0.1.24 build-setup: &build-setup <<: *common From 3832cfcc398e4f94e97ce75ddd2aade6fff29347 Mon Sep 17 00:00:00 2001 From: Markus Pilman Date: Mon, 1 Feb 2021 11:28:02 -0700 Subject: [PATCH 243/317] increased version of Dockerfile.devel --- build/Dockerfile.devel | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/Dockerfile.devel b/build/Dockerfile.devel index 606e293fc6..b44ef335b5 100644 --- a/build/Dockerfile.devel +++ b/build/Dockerfile.devel @@ -51,8 +51,8 @@ RUN cp -iv /usr/local/bin/clang++ /usr/local/bin/clang++.deref &&\ ldconfig &&\ rm -rf /mnt/artifacts -LABEL version=0.11.14 -ENV DOCKER_IMAGEVER=0.11.14 +LABEL version=0.11.15 +ENV DOCKER_IMAGEVER=0.11.15 ENV CLANGCC=/usr/local/bin/clang.de8a65ef ENV CLANGCXX=/usr/local/bin/clang++.de8a65ef From 4e81b9275bb177aacb83004ac0ab339f821524d5 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Mon, 1 Feb 2021 10:50:04 -0800 Subject: [PATCH 244/317] Allow the user to diable forward expiry check by setting the threshold to -1 --- fdbserver/Coordination.actor.cpp | 3 ++- fdbserver/Knobs.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/fdbserver/Coordination.actor.cpp b/fdbserver/Coordination.actor.cpp index 4c4515ab26..df7380e480 100644 --- a/fdbserver/Coordination.actor.cpp +++ b/fdbserver/Coordination.actor.cpp @@ -475,7 +475,8 @@ struct LeaderRegisterCollection { return Optional(); if (t != forwardStartTime.end()) { double forwardTime = t->value; - if (now() - forwardTime > SERVER_KNOBS->FORWARD_REQUEST_TOO_OLD) { + if (SERVER_KNOBS->FORWARD_REQUEST_TOO_OLD > 0 && + now() - forwardTime > SERVER_KNOBS->FORWARD_REQUEST_TOO_OLD) { TraceEvent(SevWarnAlways, "AccessOldForward") .detail("ForwardSetSecondsAgo", now() - forwardTime) .detail("ForwardClusterKey", key); diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 0574522c74..80977b1b8c 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -606,7 +606,7 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi // Coordination init( COORDINATED_STATE_ONCONFLICT_POLL_INTERVAL, 1.0 ); if( randomize && BUGGIFY ) COORDINATED_STATE_ONCONFLICT_POLL_INTERVAL = 10.0; - init( FORWARD_REQUEST_TOO_OLD, 600.0); if( randomize && BUGGIFY ) FORWARD_REQUEST_TOO_OLD = 60.0; + init( FORWARD_REQUEST_TOO_OLD, 600.0); if( randomize && BUGGIFY ) FORWARD_REQUEST_TOO_OLD = 60.0; // Set this to -1 to disable the expiry check. // Buggification init( BUGGIFIED_EVENTUAL_CONSISTENCY, 1.0 ); From de700b83f2aa4d0733edcb7098269e0911f6bfd7 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Mon, 1 Feb 2021 21:58:39 +0000 Subject: [PATCH 245/317] Review fixes --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 4 +--- fdbserver/Knobs.cpp | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index a32fd6117c..397a2ab023 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -77,9 +77,7 @@ rocksdb::Options getOptions() { bbOpts.block_cache = rocksdb::NewLRUCache(SERVER_KNOBS->ROCKSDB_BLOCK_CACHE_SIZE); } - if (SERVER_KNOBS->ROCKSDB_BLOCK_CACHE_SIZE > 0 || SERVER_KNOBS->ROCKSDB_PREFIX_LEN > 0) { - options.table_factory.reset(rocksdb::NewBlockBasedTableFactory(bbOpts)); - } + options.table_factory.reset(rocksdb::NewBlockBasedTableFactory(bbOpts)); return options; } diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 9b930b4467..bc5891bfc8 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -324,7 +324,7 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi init( ROCKSDB_UNSAFE_AUTO_FSYNC, false ); init( ROCKSDB_PERIODIC_COMPACTION_SECONDS, 0 ); init( ROCKSDB_PREFIX_LEN, 0 ); - init( ROCKSDB_BLOCK_CACHE_SIZE, 0 ); + init( ROCKSDB_BLOCK_CACHE_SIZE, 0 ); // Leader election bool longLeaderElection = randomize && BUGGIFY; From 1cc8c1d8ecf695c7bd19c343bd7571307ef79246 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Mon, 1 Feb 2021 14:39:30 -0800 Subject: [PATCH 246/317] Guard CD's cross cluster check behind a KNOB controlled flag and disable it by default. --- fdbserver/Coordination.actor.cpp | 21 +++++++++++---------- fdbserver/Knobs.cpp | 3 ++- fdbserver/Knobs.h | 2 ++ 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/fdbserver/Coordination.actor.cpp b/fdbserver/Coordination.actor.cpp index df7380e480..0d7a9af289 100644 --- a/fdbserver/Coordination.actor.cpp +++ b/fdbserver/Coordination.actor.cpp @@ -475,8 +475,7 @@ struct LeaderRegisterCollection { return Optional(); if (t != forwardStartTime.end()) { double forwardTime = t->value; - if (SERVER_KNOBS->FORWARD_REQUEST_TOO_OLD > 0 && - now() - forwardTime > SERVER_KNOBS->FORWARD_REQUEST_TOO_OLD) { + if (now() - forwardTime > SERVER_KNOBS->FORWARD_REQUEST_TOO_OLD) { TraceEvent(SevWarnAlways, "AccessOldForward") .detail("ForwardSetSecondsAgo", now() - forwardTime) .detail("ForwardClusterKey", key); @@ -552,8 +551,9 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore info.forward = forward.get().serializedInfo; req.reply.send( CachedSerialization(info) ); } else { - if (ccf->getConnectionString().clusterKey() != req.clusterKey || - ccf->getConnectionString().coordinators() != req.coordinators) { + if (SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && + (ccf->getConnectionString().clusterKey() != req.clusterKey || + ccf->getConnectionString().coordinators() != req.coordinators)) { TraceEvent(SevWarnAlways, "CCFMismatch") .detail("RequestType", "OpenDatabaseCoordRequest") .detail("LocalCS", ccf->getConnectionString().toString()) @@ -570,8 +570,9 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore if( forward.present() ) { req.reply.send( forward.get() ); } else { - if (ccf->getConnectionString().clusterKey() != req.key || - ccf->getConnectionString().coordinators() != req.coordinators) { + if (SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && + (ccf->getConnectionString().clusterKey() != req.key || + ccf->getConnectionString().coordinators() != req.coordinators)) { TraceEvent(SevWarnAlways, "CCFMismatch") .detail("RequestType", "ElectionResultRequest") .detail("LocalCS", ccf->getConnectionString().toString()) @@ -588,7 +589,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore if( forward.present() ) req.reply.send( forward.get() ); else { - if (ccf->getConnectionString().clusterKey() != req.key) { + if (SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { TraceEvent(SevWarnAlways, "CCFMismatch") .detail("RequestType", "GetLeaderRequest") .detail("LocalCS", ccf->getConnectionString().toString()) @@ -604,7 +605,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore if( forward.present() ) req.reply.send( forward.get() ); else { - if (ccf->getConnectionString().clusterKey() != req.key) { + if (SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { TraceEvent(SevWarnAlways, "CCFMismatch") .detail("RequestType", "CandidacyRequest") .detail("LocalCS", ccf->getConnectionString().toString()) @@ -620,7 +621,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore if( forward.present() ) req.reply.send(LeaderHeartbeatReply{ false }); else { - if (ccf->getConnectionString().clusterKey() != req.key) { + if (SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { TraceEvent(SevWarnAlways, "CCFMismatch") .detail("RequestType", "LeaderHeartbeatRequest") .detail("LocalCS", ccf->getConnectionString().toString()) @@ -636,7 +637,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore if( forward.present() ) req.reply.send( Void() ); else { - if (ccf->getConnectionString().clusterKey() != req.key) { + if (SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { TraceEvent(SevWarnAlways, "CCFMismatch") .detail("RequestType", "ForwardRequest") .detail("LocalCS", ccf->getConnectionString().toString()) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 80977b1b8c..57f42d7e72 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -606,7 +606,8 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi // Coordination init( COORDINATED_STATE_ONCONFLICT_POLL_INTERVAL, 1.0 ); if( randomize && BUGGIFY ) COORDINATED_STATE_ONCONFLICT_POLL_INTERVAL = 10.0; - init( FORWARD_REQUEST_TOO_OLD, 600.0); if( randomize && BUGGIFY ) FORWARD_REQUEST_TOO_OLD = 60.0; // Set this to -1 to disable the expiry check. + init( FORWARD_REQUEST_TOO_OLD, 600.0); if( randomize && BUGGIFY ) FORWARD_REQUEST_TOO_OLD = 60.0; + init( ENABLE_CROSS_CLUSTER_SUPPORT, false); if( randomize && BUGGIFY ) ENABLE_CROSS_CLUSTER_SUPPORT = true; // Buggification init( BUGGIFIED_EVENTUAL_CONSISTENCY, 1.0 ); diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index ecd63b4f96..e466632b0c 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -536,6 +536,8 @@ public: // Coordination double COORDINATED_STATE_ONCONFLICT_POLL_INTERVAL; double FORWARD_REQUEST_TOO_OLD; + bool ENABLE_CROSS_CLUSTER_SUPPORT; // Allow a coordinator to serve requests whose connection string does not match + // the local copy // Buggification double BUGGIFIED_EVENTUAL_CONSISTENCY; From 5fa7c7381024e041270fbe68bc45e9577b3bfb73 Mon Sep 17 00:00:00 2001 From: Jon Fu Date: Tue, 2 Feb 2021 14:30:12 -0500 Subject: [PATCH 247/317] add tracing to fileopen failure before throwing error for more info --- flow/Platform.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/flow/Platform.cpp b/flow/Platform.cpp index 83621887b7..5619dd86b2 100644 --- a/flow/Platform.cpp +++ b/flow/Platform.cpp @@ -18,6 +18,7 @@ * limitations under the License. */ +#include #ifdef _WIN32 // This has to come as the first include on Win32 for rand_s() to be found #define _CRT_RAND_S @@ -2269,7 +2270,12 @@ int64_t fileSize(std::string const& filename) { std::string readFileBytes( std::string const& filename, int maxSize ) { std::string s; FILE* f = fopen(filename.c_str(), "rb" FOPEN_CLOEXEC_MODE); - if (!f) throw file_not_readable(); + if (!f) { + TraceEvent(SevError, "FileOpenError") + .detail("Filename", filename) + .detail("Errno", errno); + throw file_not_readable(); + } try { fseek(f, 0, SEEK_END); size_t size = ftell(f); From 5a28d783b090994b53ccb34f141989525f70b2f8 Mon Sep 17 00:00:00 2001 From: Jon Fu Date: Tue, 2 Feb 2021 14:34:56 -0500 Subject: [PATCH 248/317] add readable description of error to trace event --- flow/Platform.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/flow/Platform.cpp b/flow/Platform.cpp index 5619dd86b2..28fad52ece 100644 --- a/flow/Platform.cpp +++ b/flow/Platform.cpp @@ -2273,7 +2273,8 @@ std::string readFileBytes( std::string const& filename, int maxSize ) { if (!f) { TraceEvent(SevError, "FileOpenError") .detail("Filename", filename) - .detail("Errno", errno); + .detail("Errno", errno) + .detail("ErrorDescription", strerror(errno)); throw file_not_readable(); } try { From 761d9991a3bf664f2f748b74db6eaa48d0e6b410 Mon Sep 17 00:00:00 2001 From: Jon Fu Date: Tue, 2 Feb 2021 14:47:19 -0500 Subject: [PATCH 249/317] change to SevWarn instead of SevError --- flow/Platform.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flow/Platform.cpp b/flow/Platform.cpp index 28fad52ece..a22f9d3cc2 100644 --- a/flow/Platform.cpp +++ b/flow/Platform.cpp @@ -2271,7 +2271,7 @@ std::string readFileBytes( std::string const& filename, int maxSize ) { std::string s; FILE* f = fopen(filename.c_str(), "rb" FOPEN_CLOEXEC_MODE); if (!f) { - TraceEvent(SevError, "FileOpenError") + TraceEvent(SevWarn, "FileOpenError") .detail("Filename", filename) .detail("Errno", errno) .detail("ErrorDescription", strerror(errno)); From d10b452758ff5413e832012d41c5af4543bf3f99 Mon Sep 17 00:00:00 2001 From: Jon Fu Date: Tue, 2 Feb 2021 14:55:02 -0500 Subject: [PATCH 250/317] include instead of --- flow/Platform.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flow/Platform.cpp b/flow/Platform.cpp index a22f9d3cc2..0baf1d2d10 100644 --- a/flow/Platform.cpp +++ b/flow/Platform.cpp @@ -18,7 +18,7 @@ * limitations under the License. */ -#include +#include #ifdef _WIN32 // This has to come as the first include on Win32 for rand_s() to be found #define _CRT_RAND_S From 090eee33e72a20ead91975476dd74d4b02c6d89f Mon Sep 17 00:00:00 2001 From: Jon Fu Date: Tue, 2 Feb 2021 14:58:51 -0500 Subject: [PATCH 251/317] rearrange include ordering --- flow/Platform.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flow/Platform.cpp b/flow/Platform.cpp index 0baf1d2d10..a48b195b0a 100644 --- a/flow/Platform.cpp +++ b/flow/Platform.cpp @@ -18,7 +18,6 @@ * limitations under the License. */ -#include #ifdef _WIN32 // This has to come as the first include on Win32 for rand_s() to be found #define _CRT_RAND_S @@ -26,6 +25,7 @@ #include // For _set_FMA3_enable workaround in platformInit #endif +#include #include "flow/Platform.h" #include "flow/Arena.h" From 17671604c0db71673aad1ce1b710ad3ce603dd5b Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Tue, 2 Feb 2021 12:39:05 -0800 Subject: [PATCH 252/317] Add option to define I/O size --- fdbrpc/AsyncFileCached.actor.h | 13 +++++++++++-- fdbserver/KeyValueStoreSQLite.actor.cpp | 7 ++++--- fdbserver/Knobs.cpp | 11 +++++++++++ fdbserver/Knobs.h | 2 ++ flow/Knobs.cpp | 13 ++++--------- flow/Knobs.h | 3 +-- 6 files changed, 33 insertions(+), 16 deletions(-) diff --git a/fdbrpc/AsyncFileCached.actor.h b/fdbrpc/AsyncFileCached.actor.h index 1ed331fac2..43a03c23a7 100644 --- a/fdbrpc/AsyncFileCached.actor.h +++ b/fdbrpc/AsyncFileCached.actor.h @@ -21,6 +21,7 @@ #pragma once // When actually compiled (NO_INTELLISENSE), include the generated version of this file. In intellisense use the source version. +#include "fdbserver/Knobs.h" #if defined(NO_INTELLISENSE) && !defined(FLOW_ASYNCFILECACHED_ACTOR_G_H) #define FLOW_ASYNCFILECACHED_ACTOR_G_H #include "fdbrpc/AsyncFileCached.actor.g.h" @@ -519,8 +520,16 @@ struct AFCPage : public EvictablePage, public FastAllocated { if (dirty) { // Wait for rate control if it is set - if (self->owner->getRateControl()) - wait(self->owner->getRateControl()->getAllowance(1)); + if (self->owner->getRateControl()) { + int allowance = 1; + // If I/O size is defined, wait for the calculated I/O quota + if (FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_IO_SIZE > 0) { + allowance = (self->pageCache->pageSize + FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_IO_SIZE - 1) / + FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_IO_SIZE; // round up + ASSERT(allowance > 0); + } + wait(self->owner->getRateControl()->getAllowance(allowance)); + } if ( self->pageOffset + self->pageCache->pageSize > self->owner->length ) { ASSERT(self->pageOffset < self->owner->length); diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index b80c8cbd7c..a39e8ddb8d 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -1361,12 +1361,13 @@ void SQLiteDB::open(bool writable) { if (walFile.isError()) throw walFile.getError(); // If we've failed to open the file, throw an exception // Set Rate control if FLOW_KNOBS are positive - if (FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT > 0 && FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS > 0) { + if (SERVER_KNOBS->SQLITE_CACHEDFILE_WRITE_WINDOW_LIMIT > 0 && + SERVER_KNOBS->SQLITE_CACHEDFILE_WRITE_WINDOW_SECONDS > 0) { // The writer thread is created before the readers, so it should initialize the rate controls. if(writable) { // Create a new rate control and assign it to both files. - Reference rc(new SpeedLimit(FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, - FLOW_KNOBS->FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS)); + Reference rc(new SpeedLimit(SERVER_KNOBS->SQLITE_CACHEDFILE_WRITE_WINDOW_LIMIT, + SERVER_KNOBS->SQLITE_CACHEDFILE_WRITE_WINDOW_SECONDS)); dbFile.get()->setRateControl(rc); walFile.get()->setRateControl(rc); } else { diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index d2244fc5ec..a05a524f5a 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -19,6 +19,7 @@ */ #include "fdbserver/Knobs.h" +#include "IRandom.h" #include "fdbrpc/Locality.h" #include @@ -251,6 +252,16 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( SQLITE_CHUNK_SIZE_PAGES, 25600 ); // 100MB init( SQLITE_CHUNK_SIZE_PAGES_SIM, 1024 ); // 4MB init( SQLITE_READER_THREADS, 64 ); // number of read threads + init( SQLITE_CACHEDFILE_WRITE_WINDOW_SECONDS, -1 ); + init( SQLITE_CACHEDFILE_WRITE_WINDOW_LIMIT, -1 ); + if( randomize && BUGGIFY ) { + // Choose an window between .01 and 1.01 seconds. + SQLITE_CACHEDFILE_WRITE_WINDOW_SECONDS = 0.01 + deterministicRandom()->random01(); + // Choose 10k to 50k operations per second + int opsPerSecond = deterministicRandom()->randomInt(1000, 5000); + // Set window limit to opsPerSecond scaled down to window size + SQLITE_CACHEDFILE_WRITE_WINDOW_LIMIT = opsPerSecond * SQLITE_CACHEDFILE_WRITE_WINDOW_SECONDS; + } // Maximum and minimum cell payload bytes allowed on primary page as calculated in SQLite. // These formulas are copied from SQLite, using its hardcoded constants, so if you are diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index a1317cdd9d..045b4ccf5c 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -223,6 +223,8 @@ public: int SQLITE_CHUNK_SIZE_PAGES; int SQLITE_CHUNK_SIZE_PAGES_SIM; int SQLITE_READER_THREADS; + int SQLITE_CACHEDFILE_WRITE_WINDOW_LIMIT; + double SQLITE_CACHEDFILE_WRITE_WINDOW_SECONDS; // KeyValueStoreSqlite spring cleaning double SPRING_CLEANING_NO_ACTION_INTERVAL; diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index a571642af1..f4f7a1e02b 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -92,15 +92,10 @@ FlowKnobs::FlowKnobs(bool randomize, bool isSimulated) { init( MAX_EVICT_ATTEMPTS, 100 ); if( randomize && BUGGIFY ) MAX_EVICT_ATTEMPTS = 2; init( CACHE_EVICTION_POLICY, "random" ); init( PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION, 0.1 ); if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 0.0; else if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 1.0; - init( FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS, -1 ); - init( FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT, -1 ); - if( randomize && BUGGIFY ) { - // Choose an window between .01 and 1.01 seconds. - FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS = 0.01 + deterministicRandom()->random01(); - // Choose 10k to 50k operations per second - int opsPerSecond = deterministicRandom()->randomInt(1000, 5000); - // Set window limit to opsPerSecond scaled down to window size - FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT = opsPerSecond * FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS; + init( FLOW_CACHEDFILE_WRITE_IO_SIZE, -1 ); + if ( randomize && BUGGIFY) { + // Choose 16KB to 64KB as I/O size + FLOW_CACHEDFILE_WRITE_IO_SIZE = deterministicRandom()->randomInt(16384, 65537); } //AsyncFileEIO diff --git a/flow/Knobs.h b/flow/Knobs.h index faa9512b23..ac89f3540f 100644 --- a/flow/Knobs.h +++ b/flow/Knobs.h @@ -112,8 +112,7 @@ public: double PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION; double TOO_MANY_CONNECTIONS_CLOSED_RESET_DELAY; int TOO_MANY_CONNECTIONS_CLOSED_TIMEOUT; - int FLOW_CACHEDFILE_WRITE_WINDOW_LIMIT; - double FLOW_CACHEDFILE_WRITE_WINDOW_SECONDS; + int FLOW_CACHEDFILE_WRITE_IO_SIZE; //AsyncFileEIO int EIO_MAX_PARALLELISM; From 593165679a86d8e759bf1e8f1e8812d1c9bfbc68 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Tue, 2 Feb 2021 12:42:46 -0800 Subject: [PATCH 253/317] Remove unnecessary header --- fdbrpc/AsyncFileCached.actor.h | 1 - fdbserver/Knobs.cpp | 1 - flow/Knobs.cpp | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/fdbrpc/AsyncFileCached.actor.h b/fdbrpc/AsyncFileCached.actor.h index 43a03c23a7..aca82693c2 100644 --- a/fdbrpc/AsyncFileCached.actor.h +++ b/fdbrpc/AsyncFileCached.actor.h @@ -21,7 +21,6 @@ #pragma once // When actually compiled (NO_INTELLISENSE), include the generated version of this file. In intellisense use the source version. -#include "fdbserver/Knobs.h" #if defined(NO_INTELLISENSE) && !defined(FLOW_ASYNCFILECACHED_ACTOR_G_H) #define FLOW_ASYNCFILECACHED_ACTOR_G_H #include "fdbrpc/AsyncFileCached.actor.g.h" diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index a05a524f5a..7cbc44a07c 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -19,7 +19,6 @@ */ #include "fdbserver/Knobs.h" -#include "IRandom.h" #include "fdbrpc/Locality.h" #include diff --git a/flow/Knobs.cpp b/flow/Knobs.cpp index f4f7a1e02b..dac113b5d0 100644 --- a/flow/Knobs.cpp +++ b/flow/Knobs.cpp @@ -92,7 +92,7 @@ FlowKnobs::FlowKnobs(bool randomize, bool isSimulated) { init( MAX_EVICT_ATTEMPTS, 100 ); if( randomize && BUGGIFY ) MAX_EVICT_ATTEMPTS = 2; init( CACHE_EVICTION_POLICY, "random" ); init( PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION, 0.1 ); if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 0.0; else if( randomize && BUGGIFY ) PAGE_CACHE_TRUNCATE_LOOKUP_FRACTION = 1.0; - init( FLOW_CACHEDFILE_WRITE_IO_SIZE, -1 ); + init( FLOW_CACHEDFILE_WRITE_IO_SIZE, 0 ); if ( randomize && BUGGIFY) { // Choose 16KB to 64KB as I/O size FLOW_CACHEDFILE_WRITE_IO_SIZE = deterministicRandom()->randomInt(16384, 65537); From f6342376ab93b3a09a6fd7a6d671275491f4346c Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Tue, 2 Feb 2021 13:31:00 -0800 Subject: [PATCH 254/317] Update the knob name --- fdbserver/KeyValueStoreSQLite.actor.cpp | 7 +++---- fdbserver/Knobs.cpp | 8 ++++---- fdbserver/Knobs.h | 4 ++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index a39e8ddb8d..be43041686 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -1361,13 +1361,12 @@ void SQLiteDB::open(bool writable) { if (walFile.isError()) throw walFile.getError(); // If we've failed to open the file, throw an exception // Set Rate control if FLOW_KNOBS are positive - if (SERVER_KNOBS->SQLITE_CACHEDFILE_WRITE_WINDOW_LIMIT > 0 && - SERVER_KNOBS->SQLITE_CACHEDFILE_WRITE_WINDOW_SECONDS > 0) { + if (SERVER_KNOBS->SQLITE_WRITE_WINDOW_LIMIT > 0 && SERVER_KNOBS->SQLITE_WRITE_WINDOW_SECONDS > 0) { // The writer thread is created before the readers, so it should initialize the rate controls. if(writable) { // Create a new rate control and assign it to both files. - Reference rc(new SpeedLimit(SERVER_KNOBS->SQLITE_CACHEDFILE_WRITE_WINDOW_LIMIT, - SERVER_KNOBS->SQLITE_CACHEDFILE_WRITE_WINDOW_SECONDS)); + Reference rc( + new SpeedLimit(SERVER_KNOBS->SQLITE_WRITE_WINDOW_LIMIT, SERVER_KNOBS->SQLITE_WRITE_WINDOW_SECONDS)); dbFile.get()->setRateControl(rc); walFile.get()->setRateControl(rc); } else { diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 7cbc44a07c..062ef79315 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -251,15 +251,15 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( SQLITE_CHUNK_SIZE_PAGES, 25600 ); // 100MB init( SQLITE_CHUNK_SIZE_PAGES_SIM, 1024 ); // 4MB init( SQLITE_READER_THREADS, 64 ); // number of read threads - init( SQLITE_CACHEDFILE_WRITE_WINDOW_SECONDS, -1 ); - init( SQLITE_CACHEDFILE_WRITE_WINDOW_LIMIT, -1 ); + init( SQLITE_WRITE_WINDOW_SECONDS, -1 ); + init( SQLITE_WRITE_WINDOW_LIMIT, -1 ); if( randomize && BUGGIFY ) { // Choose an window between .01 and 1.01 seconds. - SQLITE_CACHEDFILE_WRITE_WINDOW_SECONDS = 0.01 + deterministicRandom()->random01(); + SQLITE_WRITE_WINDOW_SECONDS = 0.01 + deterministicRandom()->random01(); // Choose 10k to 50k operations per second int opsPerSecond = deterministicRandom()->randomInt(1000, 5000); // Set window limit to opsPerSecond scaled down to window size - SQLITE_CACHEDFILE_WRITE_WINDOW_LIMIT = opsPerSecond * SQLITE_CACHEDFILE_WRITE_WINDOW_SECONDS; + SQLITE_WRITE_WINDOW_LIMIT = opsPerSecond * SQLITE_WRITE_WINDOW_SECONDS; } // Maximum and minimum cell payload bytes allowed on primary page as calculated in SQLite. diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 045b4ccf5c..00d153e164 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -223,8 +223,8 @@ public: int SQLITE_CHUNK_SIZE_PAGES; int SQLITE_CHUNK_SIZE_PAGES_SIM; int SQLITE_READER_THREADS; - int SQLITE_CACHEDFILE_WRITE_WINDOW_LIMIT; - double SQLITE_CACHEDFILE_WRITE_WINDOW_SECONDS; + int SQLITE_WRITE_WINDOW_LIMIT; + double SQLITE_WRITE_WINDOW_SECONDS; // KeyValueStoreSqlite spring cleaning double SPRING_CLEANING_NO_ACTION_INTERVAL; From 45262f670236a56d18213388e123854e4096b406 Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Tue, 2 Feb 2021 14:26:39 -0800 Subject: [PATCH 255/317] Fix comment. --- fdbserver/Knobs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 062ef79315..1a27d4a72b 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -256,7 +256,7 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula if( randomize && BUGGIFY ) { // Choose an window between .01 and 1.01 seconds. SQLITE_WRITE_WINDOW_SECONDS = 0.01 + deterministicRandom()->random01(); - // Choose 10k to 50k operations per second + // Choose random operations per second int opsPerSecond = deterministicRandom()->randomInt(1000, 5000); // Set window limit to opsPerSecond scaled down to window size SQLITE_WRITE_WINDOW_LIMIT = opsPerSecond * SQLITE_WRITE_WINDOW_SECONDS; From 769a3148bad0e6c4c38d12c70ecdd88ac4150b94 Mon Sep 17 00:00:00 2001 From: Chaoguang Lin Date: Tue, 2 Feb 2021 14:36:49 -0800 Subject: [PATCH 256/317] Format code --- fdbserver/Knobs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 1a27d4a72b..4bafa45b0a 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -251,8 +251,8 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( SQLITE_CHUNK_SIZE_PAGES, 25600 ); // 100MB init( SQLITE_CHUNK_SIZE_PAGES_SIM, 1024 ); // 4MB init( SQLITE_READER_THREADS, 64 ); // number of read threads - init( SQLITE_WRITE_WINDOW_SECONDS, -1 ); - init( SQLITE_WRITE_WINDOW_LIMIT, -1 ); + init( SQLITE_WRITE_WINDOW_SECONDS, -1 ); + init( SQLITE_WRITE_WINDOW_LIMIT, -1 ); if( randomize && BUGGIFY ) { // Choose an window between .01 and 1.01 seconds. SQLITE_WRITE_WINDOW_SECONDS = 0.01 + deterministicRandom()->random01(); From 40d855943c17b072f03a9a5da32f60da85efac72 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Tue, 2 Feb 2021 17:33:47 -0800 Subject: [PATCH 257/317] temporarily disable disk stalls in simulation --- fdbserver/workloads/MachineAttrition.actor.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/fdbserver/workloads/MachineAttrition.actor.cpp b/fdbserver/workloads/MachineAttrition.actor.cpp index 519e2755c1..ce0f7382a2 100644 --- a/fdbserver/workloads/MachineAttrition.actor.cpp +++ b/fdbserver/workloads/MachineAttrition.actor.cpp @@ -155,15 +155,15 @@ struct MachineAttritionWorkload : TestWorkload { ISimulator::KillType kt = ISimulator::Reboot; if( !self->reboot ) { - int killType = deterministicRandom()->randomInt(0,4); + int killType = deterministicRandom()->randomInt(0,3); //FIXME: enable disk stalls if( killType == 0 ) kt = ISimulator::KillInstantly; else if( killType == 1 ) kt = ISimulator::InjectFaults; else if( killType == 2 ) - kt = ISimulator::FailDisk; - else kt = ISimulator::RebootAndDelete; + else + kt = ISimulator::FailDisk; } TraceEvent("Assassination").detail("TargetDatacenter", target).detail("Reboot", self->reboot).detail("KillType", kt); @@ -225,11 +225,17 @@ struct MachineAttritionWorkload : TestWorkload { } else { auto kt = ISimulator::KillInstantly; if( self->allowFaultInjection ) { + if( randomDouble < 0.50 ) { + kt = ISimulator::InjectFaults; + } + //FIXME: enable disk stalls + /* if( randomDouble < 0.56 ) { kt = ISimulator::InjectFaults; } else if( randomDouble < 0.66 ) { kt = ISimulator::FailDisk; } + */ } g_simulator.killZone( targetMachine.zoneId(), kt ); } From a0a71ff7f94e10c76706f9cd1045569bfdffb405 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Tue, 2 Feb 2021 17:53:07 -0800 Subject: [PATCH 258/317] simplified the algorithm based on testing --- fdbserver/Knobs.cpp | 6 ++---- fdbserver/Knobs.h | 6 ++---- fdbserver/storageserver.actor.cpp | 35 ++++--------------------------- flow/network.h | 1 + 4 files changed, 9 insertions(+), 39 deletions(-) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 89f30dec34..c954e9e196 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -444,10 +444,8 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( STORAGE_DURABILITY_LAG_SOFT_MAX, 200e6 ); if( smallStorageTarget ) STORAGE_DURABILITY_LAG_SOFT_MAX = 10e6; //FIXME: Low priority reads are disabled by assigning very high knob values, reduce knobs for 7.0 - init( LOW_PRIORITY_STORAGE_QUEUE_BYTES_START, 775e8 ); if( smallStorageTarget ) LOW_PRIORITY_STORAGE_QUEUE_BYTES_START = 1750e3; - init( LOW_PRIORITY_STORAGE_QUEUE_BYTES_END, 760e6 ); if( smallStorageTarget ) LOW_PRIORITY_STORAGE_QUEUE_BYTES_END = 1500e3; - init( LOW_PRIORITY_DURABILITY_LAG_START, 275e8 ); if( smallStorageTarget ) LOW_PRIORITY_DURABILITY_LAG_START = 15e6; - init( LOW_PRIORITY_DURABILITY_LAG_END, 260e6 ); if( smallStorageTarget ) LOW_PRIORITY_DURABILITY_LAG_END = 10e6; + init( LOW_PRIORITY_STORAGE_QUEUE_BYTES, 775e8 ); if( smallStorageTarget ) LOW_PRIORITY_STORAGE_QUEUE_BYTES = 1750e3; + init( LOW_PRIORITY_DURABILITY_LAG, 275e8 ); if( smallStorageTarget ) LOW_PRIORITY_DURABILITY_LAG = 15e6; bool smallTlogTarget = randomize && BUGGIFY; init( TARGET_BYTES_PER_TLOG, 2400e6 ); if( smallTlogTarget ) TARGET_BYTES_PER_TLOG = 2000e3; diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index 4017948aed..5f779a1c58 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -383,10 +383,8 @@ public: int64_t STORAGE_DURABILITY_LAG_HARD_MAX; int64_t STORAGE_DURABILITY_LAG_SOFT_MAX; - int64_t LOW_PRIORITY_STORAGE_QUEUE_BYTES_START; - int64_t LOW_PRIORITY_STORAGE_QUEUE_BYTES_END; - int64_t LOW_PRIORITY_DURABILITY_LAG_START; - int64_t LOW_PRIORITY_DURABILITY_LAG_END; + int64_t LOW_PRIORITY_STORAGE_QUEUE_BYTES; + int64_t LOW_PRIORITY_DURABILITY_LAG; int64_t TARGET_BYTES_PER_TLOG; int64_t SPRING_BYTES_TLOG; diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 13af6c725a..7f71d0c33b 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -96,16 +96,6 @@ private: bool isClear; }; -ACTOR Future increasingPriorityDelay(Future change) { - choose { - when(wait(delay(0, TaskPriority::Low))){} - when(wait(change)) { - wait(delay(0, TaskPriority::DefaultEndpoint)); - } - } - return Void(); -} - struct AddingShard : NonCopyable { KeyRange keys; Future fetchClient; // holds FetchKeys() actor @@ -518,7 +508,6 @@ public: bool behind; bool versionBehind; - AsyncVar durabilityBehind; bool debug_inApplyUpdate; double debug_lastValidateTime; @@ -614,7 +603,7 @@ public: counters(this), tag(invalidTag), maxQueryQueue(0), thisServerID(ssi.id()), readQueueSizeMetric(LiteralStringRef("StorageServer.ReadQueueSize")), behind(false), versionBehind(false), byteSampleClears(false, LiteralStringRef("\xff\xff\xff")), noRecentUpdates(false), lastUpdate(now()), - poppedAllAfter(std::numeric_limits::max()), cpuUsage(0.0), diskUsage(0.0), durabilityBehind(false) { + poppedAllAfter(std::numeric_limits::max()), cpuUsage(0.0), diskUsage(0.0) { version.initMetric(LiteralStringRef("StorageServer.Version"), counters.cc.id); oldestVersion.initMetric(LiteralStringRef("StorageServer.OldestVersion"), counters.cc.id); durableVersion.initMetric(LiteralStringRef("StorageServer.DurableVersion"), counters.cc.id); @@ -695,27 +684,11 @@ public: (currentRate() < 1e-6 ? 1e6 : 1.0 / currentRate())); } - bool checkDurabilityBehind() { - return version.get() - durableVersion.get() > SERVER_KNOBS->LOW_PRIORITY_DURABILITY_LAG_END; - - /* - if(durabilityBehind.get()) { - durabilityBehind.set( - version.get() - durableVersion.get() > SERVER_KNOBS->LOW_PRIORITY_DURABILITY_LAG_END || - queueSize() > SERVER_KNOBS->LOW_PRIORITY_STORAGE_QUEUE_BYTES_END); - } else { - durabilityBehind.set( - version.get() - durableVersion.get() > SERVER_KNOBS->LOW_PRIORITY_DURABILITY_LAG_START || - queueSize() > SERVER_KNOBS->LOW_PRIORITY_STORAGE_QUEUE_BYTES_START ); - } - return durabilityBehind.get(); - */ - } - Future getQueryDelay() { - if(checkDurabilityBehind()) { + if((version.get() - durableVersion.get() > SERVER_KNOBS->LOW_PRIORITY_DURABILITY_LAG) || + (queueSize() > SERVER_KNOBS->LOW_PRIORITY_STORAGE_QUEUE_BYTES)) { ++counters.lowPriorityQueries; - return delay(0, TaskPriority::Low); //increasingPriorityDelay(durabilityBehind.onChange()); + return delay(0, TaskPriority::BehindReads); } return delay(0, TaskPriority::DefaultEndpoint); } diff --git a/flow/network.h b/flow/network.h index eb2105c468..08c24414a6 100644 --- a/flow/network.h +++ b/flow/network.h @@ -90,6 +90,7 @@ enum class TaskPriority { UpdateStorage = 3000, TLogSpilledPeekReply = 2800, FetchKeys = 2500, + BehindReads = 2200, Low = 2000, Min = 1000, From 87aeafb294069007972c39a90b9adc7c56f53f46 Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Wed, 3 Feb 2021 19:58:37 +0000 Subject: [PATCH 259/317] partial refactor to support multiple threads per client library --- fdbclient/MultiVersionTransaction.actor.cpp | 70 +++++++++++++-------- fdbclient/MultiVersionTransaction.h | 32 +++++++--- 2 files changed, 67 insertions(+), 35 deletions(-) diff --git a/fdbclient/MultiVersionTransaction.actor.cpp b/fdbclient/MultiVersionTransaction.actor.cpp index 7dedd2f267..7a86688016 100644 --- a/fdbclient/MultiVersionTransaction.actor.cpp +++ b/fdbclient/MultiVersionTransaction.actor.cpp @@ -685,10 +685,10 @@ void MultiVersionTransaction::reset() { } // MultiVersionDatabase -MultiVersionDatabase::MultiVersionDatabase(MultiVersionApi *api, std::string clusterFilePath, Reference db, bool openConnectors) : dbState(new DatabaseState()) { +MultiVersionDatabase::MultiVersionDatabase(MultiVersionApi *api, int threadIdx, std::string clusterFilePath, Reference db, bool openConnectors) : dbState(new DatabaseState()), threadIdx(threadIdx) { dbState->db = db; dbState->dbVar->set(db); - + if(!openConnectors) { dbState->currentClientIndex = 0; } @@ -701,7 +701,7 @@ MultiVersionDatabase::MultiVersionDatabase(MultiVersionApi *api, std::string clu dbState->currentClientIndex = -1; } - api->runOnExternalClients([this, clusterFilePath](Reference client) { + api->runOnExternalClients(threadIdx, [this, clusterFilePath](Reference client) { dbState->addConnection(client, clusterFilePath); }); @@ -714,7 +714,7 @@ MultiVersionDatabase::~MultiVersionDatabase() { } Reference MultiVersionDatabase::debugCreateFromExistingDatabase(Reference db) { - return Reference(new MultiVersionDatabase(MultiVersionApi::api, "", db, false)); + return Reference(new MultiVersionDatabase(MultiVersionApi::api, 0, "", db, false)); // XXX better choice of thread to run this database on? } Reference MultiVersionDatabase::createTransaction() { @@ -908,26 +908,34 @@ bool MultiVersionApi::apiVersionAtLeast(int minVersion) { return MultiVersionApi::api->apiVersion >= minVersion || MultiVersionApi::api->apiVersion < 0; } +void MultiVersionApi::runOnExternalClientsAllThreads(std::function)> func, bool runOnFailedClients) { + for (int i = 0; i < tidCount; i++) { + runOnExternalClients(i, func, runOnFailedClients); + } +} + // runOnFailedClients should be used cautiously. Some failed clients may not have successfully loaded all symbols. -void MultiVersionApi::runOnExternalClients(std::function)> func, bool runOnFailedClients) { +void MultiVersionApi::runOnExternalClients(int threadIdx, std::function)> func, bool runOnFailedClients) { bool newFailure = false; auto c = externalClients.begin(); while(c != externalClients.end()) { + auto client = c->second[threadIdx]; try { - if(!c->second->failed || runOnFailedClients) { // TODO: Should we ignore some failures? - func(c->second); + if(!client->failed || runOnFailedClients) { // TODO: Should we ignore some failures? + func(client); } } catch(Error &e) { if(e.code() == error_code_external_client_already_loaded) { - TraceEvent(SevInfo, "ExternalClientAlreadyLoaded").error(e).detail("LibPath", c->second->libPath); + // XXX report libPath that was configured; not the temp file name + TraceEvent(SevInfo, "ExternalClientAlreadyLoaded").error(e).detail("LibPath", client->libPath); c = externalClients.erase(c); continue; } else { - TraceEvent(SevWarnAlways, "ExternalClientFailure").error(e).detail("LibPath", c->second->libPath); - c->second->failed = true; + TraceEvent(SevWarnAlways, "ExternalClientFailure").error(e).detail("LibPath", client->libPath); + client->failed = true; newFailure = true; } } @@ -1003,9 +1011,11 @@ void MultiVersionApi::addExternalLibrary(std::string path) { throw invalid_option(); // SOMEDAY: it might be good to allow clients to be added after the network is setup } - if(externalClients.count(filename) == 0) { + + // xxx external client init info + if(externalClientDescriptions.count(filename) == 0) { TraceEvent("AddingExternalClient").detail("LibraryPath", filename); - externalClients[filename] = Reference(new ClientInfo(new DLApi(path), path)); + externalClientDescriptions.emplace(std::make_pair(filename, ClientDesc(path, true))); //[filename] = { path, true }; } } @@ -1020,9 +1030,10 @@ void MultiVersionApi::addExternalLibraryDirectory(std::string path) { for(auto filename : files) { std::string lib = abspath(joinPath(path, filename)); - if(externalClients.count(filename) == 0) { + // xxx external client init info. + if(externalClientDescriptions.count(filename) == 0) { TraceEvent("AddingExternalClient").detail("LibraryPath", filename); - externalClients[filename] = Reference(new ClientInfo(new DLApi(lib), lib)); + externalClientDescriptions.emplace(std::make_pair(filename, ClientDesc(lib, true))); //Reference(new ClientDesc(new DLApi(lib), lib)); } } } @@ -1040,13 +1051,13 @@ void MultiVersionApi::setSupportedClientVersions(Standalone versions) MutexHolder holder(lock); ASSERT(networkSetup); - // This option must be set on the main thread because it modifes structures that can be used concurrently by the main thread + // This option must be set on the main thread because it modifies structures that can be used concurrently by the main thread onMainThreadVoid([this, versions](){ localClient->api->setNetworkOption(FDBNetworkOptions::SUPPORTED_CLIENT_VERSIONS, versions); }, NULL); if(!bypassMultiClientApi) { - runOnExternalClients([versions](Reference client) { + runOnExternalClientsAllThreads([versions](Reference client) { client->api->setNetworkOption(FDBNetworkOptions::SUPPORTED_CLIENT_VERSIONS, versions); }); } @@ -1106,7 +1117,7 @@ void MultiVersionApi::setNetworkOptionInternal(FDBNetworkOptions::Option option, if(!bypassMultiClientApi) { if(networkSetup) { - runOnExternalClients( + runOnExternalClientsAllThreads( [option, value](Reference client) { client->api->setNetworkOption(option, value); }); } else { @@ -1145,14 +1156,14 @@ void MultiVersionApi::setupNetwork() { localClient->loadProtocolVersion(); if(!bypassMultiClientApi) { - runOnExternalClients([this](Reference client) { + runOnExternalClientsAllThreads([this](Reference client) { TraceEvent("InitializingExternalClient").detail("LibraryPath", client->libPath); client->api->selectApiVersion(apiVersion); client->loadProtocolVersion(); }); MutexHolder holder(lock); - runOnExternalClients([this, transportId](Reference client) { + runOnExternalClientsAllThreads([this, transportId](Reference client) { for(auto option : options) { client->api->setNetworkOption(option.first, option.second.castTo()); } @@ -1193,7 +1204,7 @@ void MultiVersionApi::runNetwork() { std::vector handles; if(!bypassMultiClientApi) { - runOnExternalClients([&handles](Reference client) { + runOnExternalClientsAllThreads([&handles](Reference client) { if(client->external) { handles.push_back(g_network->startThread(&runNetworkThread, client.getPtr())); } @@ -1218,7 +1229,7 @@ void MultiVersionApi::stopNetwork() { localClient->api->stopNetwork(); if(!bypassMultiClientApi) { - runOnExternalClients([](Reference client) { + runOnExternalClientsAllThreads([](Reference client) { client->api->stopNetwork(); }, true); } @@ -1235,7 +1246,7 @@ void MultiVersionApi::addNetworkThreadCompletionHook(void (*hook)(void*), void * localClient->api->addNetworkThreadCompletionHook(hook, hookParameter); if(!bypassMultiClientApi) { - runOnExternalClients([hook, hookParameter](Reference client) { + runOnExternalClientsAllThreads([hook, hookParameter](Reference client) { client->api->addNetworkThreadCompletionHook(hook, hookParameter); }); } @@ -1247,12 +1258,17 @@ Reference MultiVersionApi::createDatabase(const char *clusterFilePath lock.leave(); throw network_not_setup(); } + + int threadIdx = nextTid; + nextTid = (nextTid + 1) % tidCount; + lock.leave(); std::string clusterFile(clusterFilePath); if(localClientDisabled) { - return Reference(new MultiVersionDatabase(this, clusterFile, Reference())); + return Reference(new MultiVersionDatabase(this, threadIdx, clusterFile, Reference())); } + ASSERT(tidCount == 1); // threadCount must be one if local client is enabled. auto db = localClient->api->createDatabase(clusterFilePath); if(bypassMultiClientApi) { @@ -1260,9 +1276,9 @@ Reference MultiVersionApi::createDatabase(const char *clusterFilePath } else { for(auto it : externalClients) { - TraceEvent("CreatingDatabaseOnExternalClient").detail("LibraryPath", it.second->libPath).detail("Failed", it.second->failed); + TraceEvent("CreatingDatabaseOnExternalClient").detail("LibraryPath", it.first/*[threadIdx]->libPath*/).detail("Failed", it.second[threadIdx]->failed); } - return Reference(new MultiVersionDatabase(this, clusterFile, db)); + return Reference(new MultiVersionDatabase(this, threadIdx, clusterFile, db)); } } @@ -1270,7 +1286,9 @@ void MultiVersionApi::updateSupportedVersions() { if(networkSetup) { Standalone> versionStr; - runOnExternalClients([&versionStr](Reference client){ + // not mutating the client, so just call on one instance of each client version. + // thread 0 always exists. + runOnExternalClients(0, [&versionStr](Reference client){ const char *ver = client->api->getClientVersion(); versionStr.append(versionStr.arena(), (uint8_t*)ver, (int)strlen(ver)); versionStr.append(versionStr.arena(), (uint8_t*)";", 1); diff --git a/fdbclient/MultiVersionTransaction.h b/fdbclient/MultiVersionTransaction.h index c803032cc7..2f2a89706d 100644 --- a/fdbclient/MultiVersionTransaction.h +++ b/fdbclient/MultiVersionTransaction.h @@ -278,17 +278,24 @@ private: std::vector>>> persistentOptions; }; -struct ClientInfo : ThreadSafeReferenceCounted { +struct ClientDesc { + std::string const libPath; + bool const external; + + ClientDesc(std::string libPath, bool external) : libPath(libPath), external(external) { } +}; + +struct ClientInfo : ClientDesc, ThreadSafeReferenceCounted { ProtocolVersion protocolVersion; IClientApi *api; - std::string libPath; - bool external; + // std::string libPath; + // bool external; bool failed; std::vector> threadCompletionHooks; - ClientInfo() : protocolVersion(0), api(NULL), external(false), failed(true) {} - ClientInfo(IClientApi *api) : protocolVersion(0), api(api), libPath("internal"), external(false), failed(false) {} - ClientInfo(IClientApi *api, std::string libPath) : protocolVersion(0), api(api), libPath(libPath), external(true), failed(false) {} + ClientInfo() : ClientDesc(std::string(), false), protocolVersion(0), api(NULL), failed(true) {} + ClientInfo(IClientApi *api) : ClientDesc("internal", false), protocolVersion(0), api(api), failed(false) {} + ClientInfo(IClientApi *api, std::string libPath) : ClientDesc(libPath, true), protocolVersion(0), api(api), failed(false) {} void loadProtocolVersion(); bool canReplace(Reference other) const; @@ -298,7 +305,7 @@ class MultiVersionApi; class MultiVersionDatabase : public IDatabase, ThreadSafeReferenceCounted { public: - MultiVersionDatabase(MultiVersionApi *api, std::string clusterFilePath, Reference db, bool openConnectors=true); + MultiVersionDatabase(MultiVersionApi *api, int threadIdx, std::string clusterFilePath, Reference db, bool openConnectors=true); ~MultiVersionDatabase(); Reference createTransaction() override; @@ -361,6 +368,7 @@ private: }; const Reference dbState; + const int threadIdx; friend class MultiVersionTransaction; }; @@ -379,7 +387,8 @@ public: static MultiVersionApi* api; Reference getLocalClient(); - void runOnExternalClients(std::function)>, bool runOnFailedClients=false); + void runOnExternalClients(int threadId, std::function)>, bool runOnFailedClients=false); + void runOnExternalClientsAllThreads(std::function)>, bool runOnFailedClients=false); void updateSupportedVersions(); @@ -403,7 +412,8 @@ private: void setNetworkOptionInternal(FDBNetworkOptions::Option option, Optional value); Reference localClient; - std::map> externalClients; + std::map externalClientDescriptions; + std::map>> externalClients; bool networkStartSetup; volatile bool networkSetup; @@ -411,6 +421,10 @@ private: volatile bool externalClient; int apiVersion; + // XXX fixme + int nextTid = 0; + const int tidCount = 1; + Mutex lock; std::vector>>> options; std::map>> setEnvOptions; From f50206aabb63b175c3f9f1e4bd2e9436f64b5b6e Mon Sep 17 00:00:00 2001 From: Vishesh Yadav Date: Wed, 3 Feb 2021 12:10:37 -0800 Subject: [PATCH 260/317] fdbclient: Copy external libraries MULTI_VERSION_CLIENT_THREADS_PER_VERSION times To support multiple threads in for each multi-version clients, we make a copy of external library for each thread in `/tmp/` directory and load that. (cherry-picked by Rusty; there were some conflicts, so this has commented out cruft in it) --- fdbclient/Knobs.cpp | 3 + fdbclient/Knobs.h | 3 + fdbclient/MultiVersionTransaction.actor.cpp | 83 +++++++++++++++++---- fdbclient/MultiVersionTransaction.h | 1 + 4 files changed, 77 insertions(+), 13 deletions(-) diff --git a/fdbclient/Knobs.cpp b/fdbclient/Knobs.cpp index 8dc7499b85..ea4c112ceb 100644 --- a/fdbclient/Knobs.cpp +++ b/fdbclient/Knobs.cpp @@ -170,6 +170,9 @@ void ClientKnobs::initialize(bool randomize) { init( DEFAULT_AUTO_RESOLVERS, 1 ); init( DEFAULT_AUTO_LOGS, 3 ); + // Multi-version Client + init( MULTI_VERSION_CLIENT_THREADS_PER_VERSION, 3 ); + init( IS_ACCEPTABLE_DELAY, 1.5 ); init( HTTP_READ_SIZE, 128*1024 ); diff --git a/fdbclient/Knobs.h b/fdbclient/Knobs.h index 861e3f1853..a8fc57c114 100644 --- a/fdbclient/Knobs.h +++ b/fdbclient/Knobs.h @@ -165,6 +165,9 @@ public: int32_t DEFAULT_AUTO_RESOLVERS; int32_t DEFAULT_AUTO_LOGS; + // Multi-version Client + int MULTI_VERSION_CLIENT_THREADS_PER_VERSION; + // Client Status Info double CSI_SAMPLING_PROBABILITY; int64_t CSI_SIZE_LIMIT; diff --git a/fdbclient/MultiVersionTransaction.actor.cpp b/fdbclient/MultiVersionTransaction.actor.cpp index 7a86688016..b160fc880d 100644 --- a/fdbclient/MultiVersionTransaction.actor.cpp +++ b/fdbclient/MultiVersionTransaction.actor.cpp @@ -18,6 +18,9 @@ * limitations under the License. */ +#include +#include + #include "fdbclient/MultiVersionTransaction.h" #include "fdbclient/MultiVersionAssignmentVars.h" #include "fdbclient/ThreadSafeTransaction.h" @@ -998,19 +1001,41 @@ void MultiVersionApi::setCallbacksOnExternalThreads() { callbackOnMainThread = false; } -void MultiVersionApi::addExternalLibrary(std::string path) { - std::string filename = basename(path); - - if(filename.empty() || !fileExists(path)) { - TraceEvent("ExternalClientNotFound").detail("LibraryPath", filename); - throw file_not_found(); +/*void MultiVersionApi::addExternalLibraries(const std::vector& paths) { + // All paths must be valid and must exist. + if (networkStartSetup) { + throw invalid_option(); // SOMEDAY: it might be good to allow clients to + // be added after the network is setup. For + // directories, we can monitor them for the + // addition of new files. } MutexHolder holder(lock); - if(networkStartSetup) { - throw invalid_option(); // SOMEDAY: it might be good to allow clients to be added after the network is setup + for (const auto& path : paths) { + std::string filename = basename(path); + if (externalClients.count(filename) == 0) { + TraceEvent("AddingExternalClient").detail("LibraryPath", filename); + externalClients[filename] = Reference(new ClientInfo(new DLApi(path), path)); + } } + // // Cleanup temporary generated copies. + // for (const auto& lib : tempLibs) { + // unlink(lib.c_str()); + addExternalLibraries({ path }); + + // Copy external lib for each thread + std::vector tempLibs = copyExternalLibraryPerThread(path); + addExternalLibraries(tempLibs); +}*/ + +void MultiVersionApi::addExternalLibrary(std::string path) { + std::string filename = basename(path); + + if (filename.empty() || !fileExists(path)) { + TraceEvent("ExternalClientNotFound").detail("LibraryPath", filename); + throw file_not_found(); + } // xxx external client init info if(externalClientDescriptions.count(filename) == 0) { @@ -1023,11 +1048,6 @@ void MultiVersionApi::addExternalLibraryDirectory(std::string path) { TraceEvent("AddingExternalClientDirectory").detail("Directory", path); std::vector files = platform::listFiles(path, DYNAMIC_LIB_EXT); - MutexHolder holder(lock); - if(networkStartSetup) { - throw invalid_option(); // SOMEDAY: it might be good to allow clients to be added after the network is setup. For directories, we can monitor them for the addition of new files. - } - for(auto filename : files) { std::string lib = abspath(joinPath(path, filename)); // xxx external client init info. @@ -1038,6 +1058,43 @@ void MultiVersionApi::addExternalLibraryDirectory(std::string path) { } } +std::vector MultiVersionApi::copyExternalLibraryPerThread(std::string path) { + // Copy library for each thread configured per version + std::vector paths; + for (int ii = 1; ii < CLIENT_KNOBS->MULTI_VERSION_CLIENT_THREADS_PER_VERSION; ++ii) { + std::string filename = basename(path); + + char tempName[PATH_MAX + 9]; + sprintf(tempName, "/tmp/%s-XXX", filename.c_str()); + int tempFd = mkstemp(tempName); + + int fd; + off_t offset = 0; + struct stat stat_buf; + + if (fd = open(path.c_str(), O_RDONLY) == -1) { + TraceEvent("ExternalClientNotFound").detail("LibraryPath", filename); + throw file_not_found(); + } + + if (fstat(tempFd, &stat_buf) == -1) { + TraceEvent(SevError, "FStatError").detail("LibraryPath", path); + throw platform_error(); + } + + int result = sendfile(tempFd, fd, &offset, stat_buf.st_size); + close(fd); + close(tempFd); + ASSERT(result == stat_buf.st_size); + + paths.push_back(tempName); + TraceEvent("TempCopyExternalClientLibrary").detail("Library", filename).detail("TempLibrary", tempName); + } + + return paths; + +} + void MultiVersionApi::disableLocalClient() { MutexHolder holder(lock); if(networkStartSetup || bypassMultiClientApi) { diff --git a/fdbclient/MultiVersionTransaction.h b/fdbclient/MultiVersionTransaction.h index 2f2a89706d..0190a72463 100644 --- a/fdbclient/MultiVersionTransaction.h +++ b/fdbclient/MultiVersionTransaction.h @@ -406,6 +406,7 @@ private: void setCallbacksOnExternalThreads(); void addExternalLibrary(std::string path); void addExternalLibraryDirectory(std::string path); + std::vector copyExternalLibraryPerThread(std::string path); void disableLocalClient(); void setSupportedClientVersions(Standalone versions); From b2ffdf47f0b0cbb675ff8f07eb30ec3ea04a87cb Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 3 Feb 2021 13:24:34 -0800 Subject: [PATCH 261/317] added low priority reads to status --- .../sphinx/source/mr-status-json-schemas.rst.inc | 10 ++++++++++ fdbclient/Schemas.cpp | 10 ++++++++++ fdbserver/Status.actor.cpp | 12 ++++++++++++ 3 files changed, 32 insertions(+) diff --git a/documentation/sphinx/source/mr-status-json-schemas.rst.inc b/documentation/sphinx/source/mr-status-json-schemas.rst.inc index c4221a4889..59e40c6acc 100644 --- a/documentation/sphinx/source/mr-status-json-schemas.rst.inc +++ b/documentation/sphinx/source/mr-status-json-schemas.rst.inc @@ -91,6 +91,11 @@ "counter":0, "roughness":0.0 }, + "low_priority_queries":{ + "hz":0.0, + "counter":0, + "roughness":0.0 + }, "bytes_queried":{ "hz":0.0, "counter":0, @@ -461,6 +466,11 @@ "hz":0.0, "counter":0, "roughness":0.0 + }, + "low_priority_reads":{ // measures number of incoming low priority read requests + "hz":0.0, + "counter":0, + "roughness":0.0 }, "location_requests":{ // measures number of outgoing key server location responses "hz":0.0, diff --git a/fdbclient/Schemas.cpp b/fdbclient/Schemas.cpp index ca5f408d9f..2d4a9d23e6 100644 --- a/fdbclient/Schemas.cpp +++ b/fdbclient/Schemas.cpp @@ -111,6 +111,11 @@ const KeyRef JSONSchemas::statusSchema = LiteralStringRef(R"statusSchema( "counter":0, "roughness":0.0 }, + "low_priority_queries":{ + "hz":0.0, + "counter":0, + "roughness":0.0 + }, "bytes_queried":{ "hz":0.0, "counter":0, @@ -488,6 +493,11 @@ const KeyRef JSONSchemas::statusSchema = LiteralStringRef(R"statusSchema( "counter":0, "roughness":0.0 }, + "low_priority_reads":{ + "hz":0.0, + "counter":0, + "roughness":0.0 + }, "location_requests":{ "hz":0.0, "counter":0, diff --git a/fdbserver/Status.actor.cpp b/fdbserver/Status.actor.cpp index ab75527bf0..9732d11ec3 100644 --- a/fdbserver/Status.actor.cpp +++ b/fdbserver/Status.actor.cpp @@ -470,6 +470,11 @@ struct RolesInfo { obj.setKeyRawNumber("query_queue_max", storageMetrics.getValue("QueryQueueMax")); obj["total_queries"] = StatusCounter(storageMetrics.getValue("QueryQueue")).getStatus(); obj["finished_queries"] = StatusCounter(storageMetrics.getValue("FinishedQueries")).getStatus(); + try { //FIXME: This field was added in a patch release, the try-catch can be removed for the 7.0 release + obj["low_priority_queries"] = StatusCounter(storageMetrics.getValue("LowPriorityQueries")).getStatus(); + } catch(Error &e) { + if(e.code() != error_code_attribute_not_found) throw e; + } obj["bytes_queried"] = StatusCounter(storageMetrics.getValue("BytesQueried")).getStatus(); obj["keys_queried"] = StatusCounter(storageMetrics.getValue("RowsQueried")).getStatus(); obj["mutation_bytes"] = StatusCounter(storageMetrics.getValue("MutationBytes")).getStatus(); @@ -1798,6 +1803,7 @@ ACTOR static Future workloadStatusFetcher(Reference workloadStatusFetcher(Reference 0) { readRequests.updateValues(StatusCounter(storageMetrics.getValue("QueryQueue"))); reads.updateValues(StatusCounter(storageMetrics.getValue("FinishedQueries"))); + try { //FIXME: This field was added in a patch release, the try-catch can be removed for the 7.0 release + lowPriorityReads.updateValues(StatusCounter(storageMetrics.getValue("LowPriorityQueries"))); + } catch(Error &e) { + if(e.code() != error_code_attribute_not_found) throw e; + } readKeys.updateValues(StatusCounter(storageMetrics.getValue("RowsQueried"))); readBytes.updateValues(StatusCounter(storageMetrics.getValue("BytesQueried"))); } @@ -1812,6 +1823,7 @@ ACTOR static Future workloadStatusFetcher(Reference Date: Wed, 3 Feb 2021 21:45:35 +0000 Subject: [PATCH 262/317] WIP --- fdbclient/MultiVersionTransaction.actor.cpp | 33 +++++++++++++++++---- fdbclient/MultiVersionTransaction.h | 3 +- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/fdbclient/MultiVersionTransaction.actor.cpp b/fdbclient/MultiVersionTransaction.actor.cpp index b160fc880d..04a7576b64 100644 --- a/fdbclient/MultiVersionTransaction.actor.cpp +++ b/fdbclient/MultiVersionTransaction.actor.cpp @@ -278,7 +278,7 @@ void loadClientFunction(T *fp, void *lib, std::string libPath, const char *funct } } -DLApi::DLApi(std::string fdbCPath) : api(new FdbCApi()), fdbCPath(fdbCPath), networkSetup(false) {} +DLApi::DLApi(std::string fdbCPath, bool unlinkOnLoad) : api(new FdbCApi()), fdbCPath(fdbCPath), unlinkOnLoad(unlinkOnLoad), networkSetup(false) {} void DLApi::init() { if(isLibraryLoaded(fdbCPath.c_str())) { @@ -290,6 +290,13 @@ void DLApi::init() { TraceEvent(SevError, "ErrorLoadingExternalClientLibrary").detail("LibraryPath", fdbCPath); throw platform_error(); } + if (unlinkOnLoad) { + int err = unlink(fdbCPath.c_str()); + if(err) { + TraceEvent(SevError, "ErrorUnlinkingTempClientLibraryFile").detail("errno", errno).detail("LibraryPath", fdbCPath); + throw platform_error(); + } + } loadClientFunction(&api->selectApiVersion, lib, fdbCPath, "fdb_select_api_version_impl"); loadClientFunction(&api->getClientVersion, lib, fdbCPath, "fdb_get_client_version", headerVersion >= 410); @@ -1064,8 +1071,8 @@ std::vector MultiVersionApi::copyExternalLibraryPerThread(std::stri for (int ii = 1; ii < CLIENT_KNOBS->MULTI_VERSION_CLIENT_THREADS_PER_VERSION; ++ii) { std::string filename = basename(path); - char tempName[PATH_MAX + 9]; - sprintf(tempName, "/tmp/%s-XXX", filename.c_str()); + char tempName[PATH_MAX + 12]; + sprintf(tempName, "/tmp/%s-XXXXXX", filename.c_str()); int tempFd = mkstemp(tempName); int fd; @@ -1073,12 +1080,12 @@ std::vector MultiVersionApi::copyExternalLibraryPerThread(std::stri struct stat stat_buf; if (fd = open(path.c_str(), O_RDONLY) == -1) { - TraceEvent("ExternalClientNotFound").detail("LibraryPath", filename); + TraceEvent("ExternalClientNotFound").detail("LibraryPath", path); throw file_not_found(); } - if (fstat(tempFd, &stat_buf) == -1) { - TraceEvent(SevError, "FStatError").detail("LibraryPath", path); + if (fstat(fd, &stat_buf) == -1) { + TraceEvent(SevError, "FStatError").detail("LibraryPath", path).detail("errno", errno); throw platform_error(); } @@ -1196,6 +1203,20 @@ void MultiVersionApi::setupNetwork() { throw network_already_setup(); } + for (auto i : externalClientDescriptions) { + std::string path = i.second.libPath; + std::string filename = basename(path); + + // Copy external lib for each thread + if (externalClients.count(filename) == 0) { + externalClients[filename] = {}; + for (const auto & tmp : copyExternalLibraryPerThread(path)) { + TraceEvent("AddingExternalClient").detail("FileName", filename).detail("LibraryPath", path).detail("TempPath", tmp); + externalClients[filename].push_back(Reference(new ClientInfo(new DLApi(tmp, true /*unlink on load*/), path))); + } + } + } + networkStartSetup = true; if(externalClients.empty()) { diff --git a/fdbclient/MultiVersionTransaction.h b/fdbclient/MultiVersionTransaction.h index 0190a72463..027ca60cff 100644 --- a/fdbclient/MultiVersionTransaction.h +++ b/fdbclient/MultiVersionTransaction.h @@ -189,7 +189,7 @@ private: class DLApi : public IClientApi { public: - DLApi(std::string fdbCPath); + DLApi(std::string fdbCPath, bool unlinkOnLoad = false); void selectApiVersion(int apiVersion) override; const char* getClientVersion() override; @@ -207,6 +207,7 @@ public: private: const std::string fdbCPath; const Reference api; + const bool unlinkOnLoad; int headerVersion; bool networkSetup; From bb5352deb096643a92ad70b282df128c7aaf954a Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 3 Feb 2021 13:52:54 -0800 Subject: [PATCH 263/317] applied clang-format --- fdbserver/storageserver.actor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 7f71d0c33b..2bf3fabf6f 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -685,8 +685,8 @@ public: } Future getQueryDelay() { - if((version.get() - durableVersion.get() > SERVER_KNOBS->LOW_PRIORITY_DURABILITY_LAG) || - (queueSize() > SERVER_KNOBS->LOW_PRIORITY_STORAGE_QUEUE_BYTES)) { + if ((version.get() - durableVersion.get() > SERVER_KNOBS->LOW_PRIORITY_DURABILITY_LAG) || + (queueSize() > SERVER_KNOBS->LOW_PRIORITY_STORAGE_QUEUE_BYTES)) { ++counters.lowPriorityQueries; return delay(0, TaskPriority::BehindReads); } From 4c5079e4f6ed451c8e27aa023f3d859d1ba65c41 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Wed, 3 Feb 2021 21:57:55 +0000 Subject: [PATCH 264/317] Add option to prevent synchronous file delets on reads. --- fdbserver/KeyValueStoreRocksDB.actor.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/fdbserver/KeyValueStoreRocksDB.actor.cpp b/fdbserver/KeyValueStoreRocksDB.actor.cpp index 397a2ab023..6a8edf1f7f 100644 --- a/fdbserver/KeyValueStoreRocksDB.actor.cpp +++ b/fdbserver/KeyValueStoreRocksDB.actor.cpp @@ -81,6 +81,13 @@ rocksdb::Options getOptions() { return options; } +// Set some useful defaults desired for all reads. +rocksdb::ReadOptions getReadOptions() { + rocksdb::ReadOptions options; + options.background_purge_on_iterator_cleanup = true; + return options; +} + struct RocksDBKeyValueStore : IKeyValueStore { using DB = rocksdb::DB*; using CF = rocksdb::ColumnFamilyHandle*; @@ -224,7 +231,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { traceBatch.get().addEvent("GetValueDebug", a.debugID.get().first(), "Reader.Before"); } rocksdb::PinnableSlice value; - auto s = db->Get({}, db->DefaultColumnFamily(), toSlice(a.key), &value); + auto s = db->Get(getReadOptions(), db->DefaultColumnFamily(), toSlice(a.key), &value); if (a.debugID.present()) { traceBatch.get().addEvent("GetValueDebug", a.debugID.get().first(), "Reader.After"); traceBatch.get().dump(); @@ -255,7 +262,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { traceBatch.get().addEvent("GetValuePrefixDebug", a.debugID.get().first(), "Reader.Before"); //.detail("TaskID", g_network->getCurrentTask()); } - auto s = db->Get({}, db->DefaultColumnFamily(), toSlice(a.key), &value); + auto s = db->Get(getReadOptions(), db->DefaultColumnFamily(), toSlice(a.key), &value); if (a.debugID.present()) { traceBatch.get().addEvent("GetValuePrefixDebug", a.debugID.get().first(), "Reader.After"); //.detail("TaskID", g_network->getCurrentTask()); @@ -284,7 +291,7 @@ struct RocksDBKeyValueStore : IKeyValueStore { } int accumulatedBytes = 0; rocksdb::Status s; - rocksdb::ReadOptions options; + auto options = getReadOptions(); // When using a prefix extractor, ensure that keys are returned in order even if they cross // a prefix boundary. options.auto_prefix_mode = (SERVER_KNOBS->ROCKSDB_PREFIX_LEN > 0); From c4b622e7b8f79b8672506f5913ccf0049732c5e2 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 3 Feb 2021 13:58:04 -0800 Subject: [PATCH 265/317] added a comment and updated a variable name --- fdbserver/storageserver.actor.cpp | 5 ++++- flow/network.h | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/fdbserver/storageserver.actor.cpp b/fdbserver/storageserver.actor.cpp index 2bf3fabf6f..ca423ff40f 100644 --- a/fdbserver/storageserver.actor.cpp +++ b/fdbserver/storageserver.actor.cpp @@ -684,11 +684,14 @@ public: (currentRate() < 1e-6 ? 1e6 : 1.0 / currentRate())); } + // Normally the storage server prefers to serve read requests over making mutations + // durable to disk. However, when the storage server falls to far behind on + // making mutations durable, this function will change the priority to prefer writes. Future getQueryDelay() { if ((version.get() - durableVersion.get() > SERVER_KNOBS->LOW_PRIORITY_DURABILITY_LAG) || (queueSize() > SERVER_KNOBS->LOW_PRIORITY_STORAGE_QUEUE_BYTES)) { ++counters.lowPriorityQueries; - return delay(0, TaskPriority::BehindReads); + return delay(0, TaskPriority::LowPriorityRead); } return delay(0, TaskPriority::DefaultEndpoint); } diff --git a/flow/network.h b/flow/network.h index 08c24414a6..7fa4779bdd 100644 --- a/flow/network.h +++ b/flow/network.h @@ -90,7 +90,7 @@ enum class TaskPriority { UpdateStorage = 3000, TLogSpilledPeekReply = 2800, FetchKeys = 2500, - BehindReads = 2200, + LowPriorityRead = 2200, Low = 2000, Min = 1000, From 068647ba1b947e7758b5e97c01083796b7b92ecb Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 3 Feb 2021 14:24:39 -0800 Subject: [PATCH 266/317] updated naming and comments --- fdbserver/Knobs.cpp | 2 +- fdbserver/OldTLogServer_6_0.actor.cpp | 3 ++- fdbserver/TLogServer.actor.cpp | 3 ++- flow/genericactors.actor.h | 22 ++++++++++++---------- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index b9b74bd436..5d375d1232 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -512,7 +512,7 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( REPORT_DD_METRICS, true ); init( DD_METRICS_REPORT_INTERVAL, 30.0 ); init( FETCH_KEYS_TOO_LONG_TIME_CRITERIA, 300.0 ); - init( MAX_STORAGE_COMMIT_TIME, 120.0 ); + init( MAX_STORAGE_COMMIT_TIME, 120.0 ); //The max fsync stall time on the storage server and tlog before marking a disk as failed //Wait Failure init( MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS, 250 ); if( randomize && BUGGIFY ) MAX_OUTSTANDING_WAIT_FAILURE_REQUESTS = 2; diff --git a/fdbserver/OldTLogServer_6_0.actor.cpp b/fdbserver/OldTLogServer_6_0.actor.cpp index 616adb9c75..c29a9e4c47 100644 --- a/fdbserver/OldTLogServer_6_0.actor.cpp +++ b/fdbserver/OldTLogServer_6_0.actor.cpp @@ -1297,7 +1297,8 @@ ACTOR Future doQueueCommit( TLogData* self, Reference logData, st self->diskQueueCommitBytes = 0; self->largeDiskQueueCommitBytes.set(false); - wait(ioTimeoutError(c, SERVER_KNOBS->MAX_STORAGE_COMMIT_TIME, self->degraded, SERVER_KNOBS->TLOG_DEGRADED_DURATION)); + wait(ioDegradedOrTimeoutError(c, SERVER_KNOBS->MAX_STORAGE_COMMIT_TIME, self->degraded, + SERVER_KNOBS->TLOG_DEGRADED_DURATION)); if(g_network->isSimulated() && !g_simulator.speedUpSimulation && BUGGIFY_WITH_PROB(0.0001)) { wait(delay(6.0)); } diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index dd88bdd8ad..910bb1219b 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -1712,7 +1712,8 @@ ACTOR Future doQueueCommit( TLogData* self, Reference logData, st self->diskQueueCommitBytes = 0; self->largeDiskQueueCommitBytes.set(false); - wait(ioTimeoutError(c, SERVER_KNOBS->MAX_STORAGE_COMMIT_TIME, self->degraded, SERVER_KNOBS->TLOG_DEGRADED_DURATION)); + wait(ioDegradedOrTimeoutError(c, SERVER_KNOBS->MAX_STORAGE_COMMIT_TIME, self->degraded, + SERVER_KNOBS->TLOG_DEGRADED_DURATION)); if(g_network->isSimulated() && !g_simulator.speedUpSimulation && BUGGIFY_WITH_PROB(0.0001)) { wait(delay(6.0)); } diff --git a/flow/genericactors.actor.h b/flow/genericactors.actor.h index e85a18bd82..fae052b6c4 100644 --- a/flow/genericactors.actor.h +++ b/flow/genericactors.actor.h @@ -882,24 +882,26 @@ Future ioTimeoutError( Future what, double time ) { } ACTOR template -Future ioTimeoutError( Future what, double errTime, Reference> degraded, double degradedTime ) { - if(degradedTime < errTime) { - Future degradedEnd = lowPriorityDelay( degradedTime ); +Future ioDegradedOrTimeoutError(Future what, double errTime, Reference> degraded, + double degradedTime) { + if (degradedTime < errTime) { + Future degradedEnd = lowPriorityDelay(degradedTime); choose { - when( T t = wait( what ) ) { return t; } - when( wait( degradedEnd ) ) { + when(T t = wait(what)) { return t; } + when(wait(degradedEnd)) { + TEST(true); // TLog degraded TraceEvent(SevWarnAlways, "IoDegraded"); degraded->set(true); } } } - - Future end = lowPriorityDelay( errTime - degradedTime ); + + Future end = lowPriorityDelay(errTime - degradedTime); choose { - when( T t = wait( what ) ) { return t; } - when( wait( end ) ) { + when(T t = wait(what)) { return t; } + when(wait(end)) { Error err = io_timeout(); - if(g_network->isSimulated()) { + if (g_network->isSimulated()) { err = err.asInjectedFault(); } TraceEvent(SevError, "IoTimeoutError").error(err); From ad3de5c9e00e64eb427a3970860d39ae247bbf3a Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Wed, 3 Feb 2021 23:19:26 +0000 Subject: [PATCH 267/317] WIP: seems to work? --- fdbclient/MultiVersionTransaction.actor.cpp | 46 +++++++++++++++++---- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/fdbclient/MultiVersionTransaction.actor.cpp b/fdbclient/MultiVersionTransaction.actor.cpp index 04a7576b64..85c7454e81 100644 --- a/fdbclient/MultiVersionTransaction.actor.cpp +++ b/fdbclient/MultiVersionTransaction.actor.cpp @@ -1076,26 +1076,54 @@ std::vector MultiVersionApi::copyExternalLibraryPerThread(std::stri int tempFd = mkstemp(tempName); int fd; - off_t offset = 0; - struct stat stat_buf; - if (fd = open(path.c_str(), O_RDONLY) == -1) { + if ((fd = open(path.c_str(), O_RDONLY)) == -1) { TraceEvent("ExternalClientNotFound").detail("LibraryPath", path); throw file_not_found(); } - if (fstat(fd, &stat_buf) == -1) { - TraceEvent(SevError, "FStatError").detail("LibraryPath", path).detail("errno", errno); - throw platform_error(); + constexpr size_t buf_sz = 4096; + char buf[buf_sz]; + std::cout << path << " -> " << tempName << std::endl; + while(1) { + ssize_t readCount = read(fd, buf, buf_sz); + // std::cout << "read " << readCount << " bytes " << std::endl; + if (readCount == 0) { + // eof + break; + } + if (readCount == -1) { + // std::cout << "read failed; errno" << errno << std::endl; + throw platform_error; + } + ssize_t written = 0; + while(written != readCount) { + ssize_t writeCount = write(tempFd, buf + written, readCount - written); + // std::cout << "wrote " << writeCount << " bytes (" << readCount - written << " remain)" << std::endl; + if (writeCount == -1) { + // std::cout << "write failed; errno" << errno << std::endl; + throw platform_error; + } + written += writeCount; + } } - int result = sendfile(tempFd, fd, &offset, stat_buf.st_size); + // if (fstat(fd, &stat_buf) == -1) { + // TraceEvent(SevError, "FStatError").detail("LibraryPath", path).detail("errno", errno); + // throw platform_error(); + // } + + // std::cout << "copying " << stat_buf.st_size << "bytes from " << path << std::endl; + // // TraceEvent("TempCopyExternalClientLibrary").detail("Library", filename).detail("TempLibrary", tempName); + // // TraceEvent("Copying").detail("bytes", stat_buf.st_size); + // int result = sendfile(tempFd, fd, &offset, stat_buf.st_size); + + // std::ccout << "copied " << result << " result offset = " << offset << std::end; close(fd); close(tempFd); - ASSERT(result == stat_buf.st_size); + // ASSERT(result == stat_buf.st_size); paths.push_back(tempName); - TraceEvent("TempCopyExternalClientLibrary").detail("Library", filename).detail("TempLibrary", tempName); } return paths; From 89651e2461b1b3606992a50f79ba82e1197f7cd9 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 3 Feb 2021 16:38:13 -0800 Subject: [PATCH 268/317] fix compile error --- fdbserver/Status.actor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fdbserver/Status.actor.cpp b/fdbserver/Status.actor.cpp index 9732d11ec3..e0d582f526 100644 --- a/fdbserver/Status.actor.cpp +++ b/fdbserver/Status.actor.cpp @@ -1805,7 +1805,8 @@ ACTOR static Future workloadStatusFetcher(Reference 0) { From ed7ec2b72886bdd7612fa016e01835d940e86224 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 3 Feb 2021 16:53:08 -0800 Subject: [PATCH 269/317] another attempt to fix compile errors --- fdbserver/Status.actor.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/fdbserver/Status.actor.cpp b/fdbserver/Status.actor.cpp index e0d582f526..684297b77c 100644 --- a/fdbserver/Status.actor.cpp +++ b/fdbserver/Status.actor.cpp @@ -1805,23 +1805,30 @@ ACTOR static Future workloadStatusFetcher(Reference 0) { readRequests.updateValues(StatusCounter(storageMetrics.getValue("QueryQueue"))); reads.updateValues(StatusCounter(storageMetrics.getValue("FinishedQueries"))); - try { //FIXME: This field was added in a patch release, the try-catch can be removed for the 7.0 release - lowPriorityReads.updateValues(StatusCounter(storageMetrics.getValue("LowPriorityQueries"))); - } catch(Error &e) { - if(e.code() != error_code_attribute_not_found) throw e; - } readKeys.updateValues(StatusCounter(storageMetrics.getValue("RowsQueried"))); readBytes.updateValues(StatusCounter(storageMetrics.getValue("BytesQueried"))); } } + try { + for(auto &ss : storageServers.get()) { + TraceEventFields const& storageMetrics = ss.second.at("StorageMetrics"); + + if (storageMetrics.size() > 0) { + //FIXME: This field was added in a patch release, for the 7.0 release move this to above loop + lowPriorityReads.updateValues(StatusCounter(storageMetrics.getValue("LowPriorityQueries"))); + } + } + } catch(Error &e) { + if(e.code() != error_code_attribute_not_found) throw e; + } + operationsObj["read_requests"] = readRequests.getStatus(); operationsObj["reads"] = reads.getStatus(); operationsObj["low_priority_reads"] = lowPriorityReads.getStatus(); From 164ef39254b35030d921d60f55222485d385bb80 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Wed, 3 Feb 2021 16:58:36 -0800 Subject: [PATCH 270/317] more fixes --- fdbserver/Status.actor.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/fdbserver/Status.actor.cpp b/fdbserver/Status.actor.cpp index 684297b77c..eee9333e9a 100644 --- a/fdbserver/Status.actor.cpp +++ b/fdbserver/Status.actor.cpp @@ -1816,6 +1816,11 @@ ACTOR static Future workloadStatusFetcher(Reference workloadStatusFetcher(Reference Date: Thu, 4 Feb 2021 11:16:18 -0700 Subject: [PATCH 271/317] use ARG to storge image version --- build/Dockerfile | 5 +++-- build/Dockerfile.devel | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/build/Dockerfile b/build/Dockerfile index e086e0e4d5..4d656118a6 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -1,3 +1,4 @@ +ARG IMAGE_TAG=0.1.24 FROM centos:6 # Clean yum cache, disable default Base repo and enable Vault @@ -128,8 +129,8 @@ RUN cd /opt/boringssl/build &&\ ARG TIMEZONEINFO=America/Los_Angeles RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/${TIMEZONEINFO} /etc/localtime -LABEL version=0.1.24 -ENV DOCKER_IMAGEVER=0.1.24 +LABEL version=${IMAGE_TAG} +ENV DOCKER_IMAGEVER=${IMAGE_TAG} ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0 ENV CC=/opt/rh/devtoolset-8/root/usr/bin/gcc ENV CXX=/opt/rh/devtoolset-8/root/usr/bin/g++ diff --git a/build/Dockerfile.devel b/build/Dockerfile.devel index b44ef335b5..d9b56e639e 100644 --- a/build/Dockerfile.devel +++ b/build/Dockerfile.devel @@ -1,4 +1,5 @@ ARG IMAGE_TAG=0.1.24 +ARG IMAGE_VERSION=0.11.15 FROM foundationdb/foundationdb-build:${IMAGE_TAG} USER root @@ -51,8 +52,8 @@ RUN cp -iv /usr/local/bin/clang++ /usr/local/bin/clang++.deref &&\ ldconfig &&\ rm -rf /mnt/artifacts -LABEL version=0.11.15 -ENV DOCKER_IMAGEVER=0.11.15 +LABEL version=${IMAGE_VERSION} +ENV DOCKER_IMAGEVER=${IMAGE_VERSION} ENV CLANGCC=/usr/local/bin/clang.de8a65ef ENV CLANGCXX=/usr/local/bin/clang++.de8a65ef From 549e51f7d69ae1d70a803ba73471c51ddc579c93 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Thu, 4 Feb 2021 12:43:08 -0800 Subject: [PATCH 272/317] Fix usage of the new knob value. --- fdbserver/Coordination.actor.cpp | 12 ++++++------ fdbserver/Knobs.cpp | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/fdbserver/Coordination.actor.cpp b/fdbserver/Coordination.actor.cpp index 0d7a9af289..92e99a6e88 100644 --- a/fdbserver/Coordination.actor.cpp +++ b/fdbserver/Coordination.actor.cpp @@ -551,7 +551,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore info.forward = forward.get().serializedInfo; req.reply.send( CachedSerialization(info) ); } else { - if (SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && + if (!SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && (ccf->getConnectionString().clusterKey() != req.clusterKey || ccf->getConnectionString().coordinators() != req.coordinators)) { TraceEvent(SevWarnAlways, "CCFMismatch") @@ -570,7 +570,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore if( forward.present() ) { req.reply.send( forward.get() ); } else { - if (SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && + if (!SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && (ccf->getConnectionString().clusterKey() != req.key || ccf->getConnectionString().coordinators() != req.coordinators)) { TraceEvent(SevWarnAlways, "CCFMismatch") @@ -589,7 +589,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore if( forward.present() ) req.reply.send( forward.get() ); else { - if (SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { + if (!SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { TraceEvent(SevWarnAlways, "CCFMismatch") .detail("RequestType", "GetLeaderRequest") .detail("LocalCS", ccf->getConnectionString().toString()) @@ -605,7 +605,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore if( forward.present() ) req.reply.send( forward.get() ); else { - if (SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { + if (!SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { TraceEvent(SevWarnAlways, "CCFMismatch") .detail("RequestType", "CandidacyRequest") .detail("LocalCS", ccf->getConnectionString().toString()) @@ -621,7 +621,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore if( forward.present() ) req.reply.send(LeaderHeartbeatReply{ false }); else { - if (SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { + if (!SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { TraceEvent(SevWarnAlways, "CCFMismatch") .detail("RequestType", "LeaderHeartbeatRequest") .detail("LocalCS", ccf->getConnectionString().toString()) @@ -637,7 +637,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore if( forward.present() ) req.reply.send( Void() ); else { - if (SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { + if (!SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { TraceEvent(SevWarnAlways, "CCFMismatch") .detail("RequestType", "ForwardRequest") .detail("LocalCS", ccf->getConnectionString().toString()) diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 57f42d7e72..dd3993689e 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -606,8 +606,8 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi // Coordination init( COORDINATED_STATE_ONCONFLICT_POLL_INTERVAL, 1.0 ); if( randomize && BUGGIFY ) COORDINATED_STATE_ONCONFLICT_POLL_INTERVAL = 10.0; - init( FORWARD_REQUEST_TOO_OLD, 600.0); if( randomize && BUGGIFY ) FORWARD_REQUEST_TOO_OLD = 60.0; - init( ENABLE_CROSS_CLUSTER_SUPPORT, false); if( randomize && BUGGIFY ) ENABLE_CROSS_CLUSTER_SUPPORT = true; + init( FORWARD_REQUEST_TOO_OLD, 600.0 ); if( randomize && BUGGIFY ) FORWARD_REQUEST_TOO_OLD = 60.0; + init( ENABLE_CROSS_CLUSTER_SUPPORT, true ); if( randomize && BUGGIFY ) ENABLE_CROSS_CLUSTER_SUPPORT = false; // Buggification init( BUGGIFIED_EVENTUAL_CONSISTENCY, 1.0 ); From c017b51d6640d9d1bb1b69eaa99ec1ac1f6bcc06 Mon Sep 17 00:00:00 2001 From: Xin Dong Date: Thu, 4 Feb 2021 13:35:40 -0800 Subject: [PATCH 273/317] Fix typo --- fdbserver/Coordination.actor.cpp | 12 ++++++------ flow/error_definitions.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/fdbserver/Coordination.actor.cpp b/fdbserver/Coordination.actor.cpp index 92e99a6e88..95491a1608 100644 --- a/fdbserver/Coordination.actor.cpp +++ b/fdbserver/Coordination.actor.cpp @@ -559,7 +559,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore .detail("LocalCS", ccf->getConnectionString().toString()) .detail("IncomingClusterKey", req.clusterKey) .detail("IncomingCoordinators", describeList(req.coordinators, req.coordinators.size())); - req.reply.sendError(wrong_conection_file()); + req.reply.sendError(wrong_connection_file()); } else { regs.getInterface(req.clusterKey, id).openDatabase.send(req); } @@ -578,7 +578,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore .detail("LocalCS", ccf->getConnectionString().toString()) .detail("IncomingClusterKey", req.key) .detail("IncomingCoordinators", describeList(req.coordinators, req.coordinators.size())); - req.reply.sendError(wrong_conection_file()); + req.reply.sendError(wrong_connection_file()); } else { regs.getInterface(req.key, id).electionResult.send(req); } @@ -594,7 +594,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore .detail("RequestType", "GetLeaderRequest") .detail("LocalCS", ccf->getConnectionString().toString()) .detail("IncomingClusterKey", req.key); - req.reply.sendError(wrong_conection_file()); + req.reply.sendError(wrong_connection_file()); } else { regs.getInterface(req.key, id).getLeader.send(req); } @@ -610,7 +610,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore .detail("RequestType", "CandidacyRequest") .detail("LocalCS", ccf->getConnectionString().toString()) .detail("IncomingClusterKey", req.key); - req.reply.sendError(wrong_conection_file()); + req.reply.sendError(wrong_connection_file()); } else { regs.getInterface(req.key, id).candidacy.send(req); } @@ -626,7 +626,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore .detail("RequestType", "LeaderHeartbeatRequest") .detail("LocalCS", ccf->getConnectionString().toString()) .detail("IncomingClusterKey", req.key); - req.reply.sendError(wrong_conection_file()); + req.reply.sendError(wrong_connection_file()); } else { regs.getInterface(req.key, id).leaderHeartbeat.send(req); } @@ -642,7 +642,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore .detail("RequestType", "ForwardRequest") .detail("LocalCS", ccf->getConnectionString().toString()) .detail("IncomingClusterKey", req.key); - req.reply.sendError(wrong_conection_file()); + req.reply.sendError(wrong_connection_file()); } else { forwarders.add(LeaderRegisterCollection::setForward(®s, req.key, ClusterConnectionString(req.conn.toString()))); diff --git a/flow/error_definitions.h b/flow/error_definitions.h index a5140aac06..17ede8f659 100755 --- a/flow/error_definitions.h +++ b/flow/error_definitions.h @@ -72,7 +72,7 @@ ERROR( connection_idle, 1049, "Connection closed after idle timeout" ) ERROR( disk_adapter_reset, 1050, "The disk queue adpater reset" ) ERROR( batch_transaction_throttled, 1051, "Batch GRV request rate limit exceeded") ERROR( dd_cancelled, 1052, "Data distribution components cancelled") -ERROR( wrong_conection_file, 1053, "Connection file mismatch") +ERROR( wrong_connection_file, 1053, "Connection file mismatch") ERROR( broken_promise, 1100, "Broken promise" ) ERROR( operation_cancelled, 1101, "Asynchronous operation cancelled" ) From 5e80e16802e4afec257c05d205678a6bb83ca619 Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Fri, 5 Feb 2021 13:05:33 -0800 Subject: [PATCH 274/317] Revert "CDs reject requests from external cluster or requests need to be forwarded based on an old forward request." --- fdbserver/Coordination.actor.cpp | 115 ++++----------------------- fdbserver/CoordinationInterface.h | 2 +- fdbserver/Knobs.cpp | 2 - fdbserver/Knobs.h | 3 - fdbserver/SimulatedCluster.actor.cpp | 14 +--- fdbserver/worker.actor.cpp | 2 +- flow/error_definitions.h | 1 - 7 files changed, 18 insertions(+), 121 deletions(-) diff --git a/fdbserver/Coordination.actor.cpp b/fdbserver/Coordination.actor.cpp index 95491a1608..541ba965a2 100644 --- a/fdbserver/Coordination.actor.cpp +++ b/fdbserver/Coordination.actor.cpp @@ -428,18 +428,12 @@ ACTOR Future leaderRegister(LeaderElectionRegInterface interf, Key key) { // (they are always derived from a ClusterConnectionString key). // Forwarding values are stored in this range: const KeyRangeRef fwdKeys( LiteralStringRef( "\xff" "fwd" ), LiteralStringRef( "\xff" "fwe" ) ); -// Forwarding time are stored in this range: -const KeyRangeRef fwdTimeKeys(LiteralStringRef("\xff" - "fwdTime"), - LiteralStringRef("\xff" - "fwdTimf")); struct LeaderRegisterCollection { // SOMEDAY: Factor this into a generic tool? Extend ActorCollection to support removal actions? What? ActorCollection actors; Map registerInterfaces; Map forward; - Map forwardStartTime; OnDemandStore *pStore; LeaderRegisterCollection( OnDemandStore *pStore ) : actors( false ), pStore( pStore ) {} @@ -448,21 +442,13 @@ struct LeaderRegisterCollection { if( !self->pStore->exists() ) return Void(); OnDemandStore &store = *self->pStore; - state Future> forwardingInfoF = store->readRange(fwdKeys); - state Future> forwardingTimeF = store->readRange(fwdTimeKeys); - wait(success(forwardingInfoF) && success(forwardingTimeF)); - Standalone forwardingInfo = forwardingInfoF.get(); - Standalone forwardingTime = forwardingTimeF.get(); + Standalone forwardingInfo = wait( store->readRange( fwdKeys ) ); for( int i = 0; i < forwardingInfo.size(); i++ ) { LeaderInfo forwardInfo; forwardInfo.forward = true; forwardInfo.serializedInfo = forwardingInfo[i].value; self->forward[ forwardingInfo[i].key.removePrefix( fwdKeys.begin ) ] = forwardInfo; } - for (int i = 0; i < forwardingTime.size(); i++) { - double time = BinaryReader::fromStringRef(forwardingInfo[i].value, IncludeVersion()); - self->forwardStartTime[forwardingInfo[i].key.removePrefix(fwdTimeKeys.begin)] = time; - } return Void(); } @@ -470,31 +456,18 @@ struct LeaderRegisterCollection { Optional getForward(KeyRef key) { auto i = forward.find( key ); - auto t = forwardStartTime.find(key); if (i == forward.end()) return Optional(); - if (t != forwardStartTime.end()) { - double forwardTime = t->value; - if (now() - forwardTime > SERVER_KNOBS->FORWARD_REQUEST_TOO_OLD) { - TraceEvent(SevWarnAlways, "AccessOldForward") - .detail("ForwardSetSecondsAgo", now() - forwardTime) - .detail("ForwardClusterKey", key); - } - } return i->value; } ACTOR static Future setForward(LeaderRegisterCollection *self, KeyRef key, ClusterConnectionString conn) { - double forwardTime = now(); LeaderInfo forwardInfo; forwardInfo.forward = true; forwardInfo.serializedInfo = conn.toString(); self->forward[ key ] = forwardInfo; - self->forwardStartTime[key] = forwardTime; OnDemandStore &store = *self->pStore; store->set( KeyValueRef( key.withPrefix( fwdKeys.begin ), conn.toString() ) ); - store->set( - KeyValueRef(key.withPrefix(fwdTimeKeys.begin), BinaryWriter::toValue(forwardTime, IncludeVersion()))); wait(store->commit()); return Void(); } @@ -535,8 +508,7 @@ struct LeaderRegisterCollection { // leaderServer multiplexes multiple leaderRegisters onto a single LeaderElectionRegInterface, // creating and destroying them on demand. -ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore* pStore, UID id, - Reference ccf) { +ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore *pStore, UID id) { state LeaderRegisterCollection regs( pStore ); state ActorCollection forwarders(false); @@ -551,18 +523,7 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore info.forward = forward.get().serializedInfo; req.reply.send( CachedSerialization(info) ); } else { - if (!SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && - (ccf->getConnectionString().clusterKey() != req.clusterKey || - ccf->getConnectionString().coordinators() != req.coordinators)) { - TraceEvent(SevWarnAlways, "CCFMismatch") - .detail("RequestType", "OpenDatabaseCoordRequest") - .detail("LocalCS", ccf->getConnectionString().toString()) - .detail("IncomingClusterKey", req.clusterKey) - .detail("IncomingCoordinators", describeList(req.coordinators, req.coordinators.size())); - req.reply.sendError(wrong_connection_file()); - } else { - regs.getInterface(req.clusterKey, id).openDatabase.send(req); - } + regs.getInterface(req.clusterKey, id).openDatabase.send( req ); } } when ( ElectionResultRequest req = waitNext( interf.electionResult.getFuture() ) ) { @@ -570,91 +531,44 @@ ACTOR Future leaderServer(LeaderElectionRegInterface interf, OnDemandStore if( forward.present() ) { req.reply.send( forward.get() ); } else { - if (!SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && - (ccf->getConnectionString().clusterKey() != req.key || - ccf->getConnectionString().coordinators() != req.coordinators)) { - TraceEvent(SevWarnAlways, "CCFMismatch") - .detail("RequestType", "ElectionResultRequest") - .detail("LocalCS", ccf->getConnectionString().toString()) - .detail("IncomingClusterKey", req.key) - .detail("IncomingCoordinators", describeList(req.coordinators, req.coordinators.size())); - req.reply.sendError(wrong_connection_file()); - } else { - regs.getInterface(req.key, id).electionResult.send(req); - } + regs.getInterface(req.key, id).electionResult.send( req ); } } when ( GetLeaderRequest req = waitNext( interf.getLeader.getFuture() ) ) { Optional forward = regs.getForward(req.key); if( forward.present() ) req.reply.send( forward.get() ); - else { - if (!SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { - TraceEvent(SevWarnAlways, "CCFMismatch") - .detail("RequestType", "GetLeaderRequest") - .detail("LocalCS", ccf->getConnectionString().toString()) - .detail("IncomingClusterKey", req.key); - req.reply.sendError(wrong_connection_file()); - } else { - regs.getInterface(req.key, id).getLeader.send(req); - } - } + else + regs.getInterface(req.key, id).getLeader.send( req ); } when ( CandidacyRequest req = waitNext( interf.candidacy.getFuture() ) ) { Optional forward = regs.getForward(req.key); if( forward.present() ) req.reply.send( forward.get() ); - else { - if (!SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { - TraceEvent(SevWarnAlways, "CCFMismatch") - .detail("RequestType", "CandidacyRequest") - .detail("LocalCS", ccf->getConnectionString().toString()) - .detail("IncomingClusterKey", req.key); - req.reply.sendError(wrong_connection_file()); - } else { - regs.getInterface(req.key, id).candidacy.send(req); - } - } + else + regs.getInterface(req.key, id).candidacy.send(req); } when ( LeaderHeartbeatRequest req = waitNext( interf.leaderHeartbeat.getFuture() ) ) { Optional forward = regs.getForward(req.key); if( forward.present() ) req.reply.send(LeaderHeartbeatReply{ false }); - else { - if (!SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { - TraceEvent(SevWarnAlways, "CCFMismatch") - .detail("RequestType", "LeaderHeartbeatRequest") - .detail("LocalCS", ccf->getConnectionString().toString()) - .detail("IncomingClusterKey", req.key); - req.reply.sendError(wrong_connection_file()); - } else { - regs.getInterface(req.key, id).leaderHeartbeat.send(req); - } - } + else + regs.getInterface(req.key, id).leaderHeartbeat.send(req); } when ( ForwardRequest req = waitNext( interf.forward.getFuture() ) ) { Optional forward = regs.getForward(req.key); if( forward.present() ) req.reply.send( Void() ); else { - if (!SERVER_KNOBS->ENABLE_CROSS_CLUSTER_SUPPORT && ccf->getConnectionString().clusterKey() != req.key) { - TraceEvent(SevWarnAlways, "CCFMismatch") - .detail("RequestType", "ForwardRequest") - .detail("LocalCS", ccf->getConnectionString().toString()) - .detail("IncomingClusterKey", req.key); - req.reply.sendError(wrong_connection_file()); - } else { - forwarders.add(LeaderRegisterCollection::setForward(®s, req.key, - ClusterConnectionString(req.conn.toString()))); - regs.getInterface(req.key, id).forward.send(req); - } + forwarders.add( LeaderRegisterCollection::setForward( ®s, req.key, ClusterConnectionString(req.conn.toString()) ) ); + regs.getInterface(req.key, id).forward.send(req); } } when( wait( forwarders.getResult() ) ) { ASSERT(false); throw internal_error(); } } } -ACTOR Future coordinationServer(std::string dataFolder, Reference ccf) { +ACTOR Future coordinationServer(std::string dataFolder) { state UID myID = deterministicRandom()->randomUniqueID(); state LeaderElectionRegInterface myLeaderInterface( g_network ); state GenerationRegInterface myInterface( g_network ); @@ -663,8 +577,7 @@ ACTOR Future coordinationServer(std::string dataFolder, Reference stateServers; }; -Future coordinationServer(std::string const& dataFolder, Reference const& ccf); +Future coordinationServer( std::string const& dataFolder ); #endif diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index df329d27ef..90150f2f18 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -609,8 +609,6 @@ void ServerKnobs::initialize(bool randomize, ClientKnobs* clientKnobs, bool isSi // Coordination init( COORDINATED_STATE_ONCONFLICT_POLL_INTERVAL, 1.0 ); if( randomize && BUGGIFY ) COORDINATED_STATE_ONCONFLICT_POLL_INTERVAL = 10.0; - init( FORWARD_REQUEST_TOO_OLD, 600.0 ); if( randomize && BUGGIFY ) FORWARD_REQUEST_TOO_OLD = 60.0; - init( ENABLE_CROSS_CLUSTER_SUPPORT, true ); if( randomize && BUGGIFY ) ENABLE_CROSS_CLUSTER_SUPPORT = false; // Buggification init( BUGGIFIED_EVENTUAL_CONSISTENCY, 1.0 ); diff --git a/fdbserver/Knobs.h b/fdbserver/Knobs.h index b108f36646..e90b06c06d 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -538,9 +538,6 @@ public: // Coordination double COORDINATED_STATE_ONCONFLICT_POLL_INTERVAL; - double FORWARD_REQUEST_TOO_OLD; - bool ENABLE_CROSS_CLUSTER_SUPPORT; // Allow a coordinator to serve requests whose connection string does not match - // the local copy // Buggification double BUGGIFIED_EVENTUAL_CONSISTENCY; diff --git a/fdbserver/SimulatedCluster.actor.cpp b/fdbserver/SimulatedCluster.actor.cpp index ccbb3014ad..0ace285664 100644 --- a/fdbserver/SimulatedCluster.actor.cpp +++ b/fdbserver/SimulatedCluster.actor.cpp @@ -1133,7 +1133,6 @@ void setupSimulatedSystem(vector>* systemActors, std::string baseFo TEST( !useIPv6 ); vector coordinatorAddresses; - vector extraCoordinatorAddresses; // Used by extra DB if the DR db is a new one if(minimumRegions > 1) { //do not put coordinators in the primary region so that we can kill that region safely int nonPrimaryDcs = dataCenters/2; @@ -1142,9 +1141,6 @@ void setupSimulatedSystem(vector>* systemActors, std::string baseFo for(int m = 0; m < dcCoordinators; m++) { auto ip = makeIPAddressForSim(useIPv6, { 2, dc, 1, m }); coordinatorAddresses.push_back(NetworkAddress(ip, sslEnabled && !sslOnly ? 2 : 1, true, sslEnabled && sslOnly)); - auto extraIp = makeIPAddressForSim(useIPv6, { 4, dc, 1, m }); - extraCoordinatorAddresses.push_back( - NetworkAddress(extraIp, sslEnabled && !sslOnly ? 2 : 1, true, sslEnabled && sslOnly)); TraceEvent("SelectedCoordinator").detail("Address", coordinatorAddresses.back()); } } @@ -1170,9 +1166,6 @@ void setupSimulatedSystem(vector>* systemActors, std::string baseFo } else { auto ip = makeIPAddressForSim(useIPv6, { 2, dc, 1, m }); coordinatorAddresses.push_back(NetworkAddress(ip, sslEnabled && !sslOnly ? 2 : 1, true, sslEnabled && sslOnly)); - auto extraIp = makeIPAddressForSim(useIPv6, { 4, dc, 1, m }); - extraCoordinatorAddresses.push_back( - NetworkAddress(extraIp, sslEnabled && !sslOnly ? 2 : 1, true, sslEnabled && sslOnly)); TraceEvent("SelectedCoordinator").detail("Address", coordinatorAddresses.back()).detail("M", m).detail("Machines", machines).detail("Assigned", assignedMachines).detail("DcCoord", dcCoordinators).detail("P1", (m+1==dcCoordinators)).detail("P2", (assignedMachines<4)).detail("P3", (assignedMachines+machines-dcCoordinators>=4)).detail("CoordinatorCount", coordinatorCount); } assignedMachines++; @@ -1200,13 +1193,10 @@ void setupSimulatedSystem(vector>* systemActors, std::string baseFo // If extraDB==0, leave g_simulator.extraDB as null because the test does not use DR. if(extraDB==1) { // The DR database can be either a new database or itself - g_simulator.extraDB = - BUGGIFY ? new ClusterConnectionString(coordinatorAddresses, LiteralStringRef("TestCluster:0")) - : new ClusterConnectionString(extraCoordinatorAddresses, LiteralStringRef("ExtraCluster:0")); + g_simulator.extraDB = new ClusterConnectionString(coordinatorAddresses, BUGGIFY ? LiteralStringRef("TestCluster:0") : LiteralStringRef("ExtraCluster:0")); } else if(extraDB==2) { // The DR database is a new database - g_simulator.extraDB = - new ClusterConnectionString(extraCoordinatorAddresses, LiteralStringRef("ExtraCluster:0")); + g_simulator.extraDB = new ClusterConnectionString(coordinatorAddresses, LiteralStringRef("ExtraCluster:0")); } else if(extraDB==3) { // The DR database is the same database g_simulator.extraDB = new ClusterConnectionString(coordinatorAddresses, LiteralStringRef("TestCluster:0")); diff --git a/fdbserver/worker.actor.cpp b/fdbserver/worker.actor.cpp index 6c85dd941f..44d2a6a7b2 100644 --- a/fdbserver/worker.actor.cpp +++ b/fdbserver/worker.actor.cpp @@ -1756,7 +1756,7 @@ ACTOR Future fdbd( if (coordFolder.size()) { // SOMEDAY: remove the fileNotFound wrapper and make DiskQueue construction safe from errors setting up // their files - actors.push_back(fileNotFoundToNever(coordinationServer(coordFolder, coordinators.ccf))); + actors.push_back(fileNotFoundToNever(coordinationServer(coordFolder))); } state UID processIDUid = wait(createAndLockProcessIdFile(dataFolder)); diff --git a/flow/error_definitions.h b/flow/error_definitions.h index 17ede8f659..2041ce9578 100755 --- a/flow/error_definitions.h +++ b/flow/error_definitions.h @@ -72,7 +72,6 @@ ERROR( connection_idle, 1049, "Connection closed after idle timeout" ) ERROR( disk_adapter_reset, 1050, "The disk queue adpater reset" ) ERROR( batch_transaction_throttled, 1051, "Batch GRV request rate limit exceeded") ERROR( dd_cancelled, 1052, "Data distribution components cancelled") -ERROR( wrong_connection_file, 1053, "Connection file mismatch") ERROR( broken_promise, 1100, "Broken promise" ) ERROR( operation_cancelled, 1101, "Asynchronous operation cancelled" ) From f636913f92745d4ae3335928051741ec3939006d Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Fri, 5 Feb 2021 13:37:57 -0800 Subject: [PATCH 275/317] Fix a trace event name that has a space in it --- fdbserver/workloads/SnapTest.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbserver/workloads/SnapTest.actor.cpp b/fdbserver/workloads/SnapTest.actor.cpp index aaed65ce11..e284685f7d 100644 --- a/fdbserver/workloads/SnapTest.actor.cpp +++ b/fdbserver/workloads/SnapTest.actor.cpp @@ -86,7 +86,7 @@ public: // variables public: // ctor & dtor SnapTestWorkload(WorkloadContext const& wcx) : TestWorkload(wcx), numSnaps(0), maxSnapDelay(0.0), testID(0), snapUID() { - TraceEvent("SnapTestWorkload Constructor"); + TraceEvent("SnapTestWorkloadConstructor"); std::string workloadName = "SnapTest"; maxRetryCntToRetrieveMessage = 10; From 0650ff1a414f0b98d8d077d3eafe6a9275d78a78 Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Fri, 5 Feb 2021 15:54:51 -0800 Subject: [PATCH 276/317] Increase the maximum length of the error strings logged by test harness. Make it more obvious when errors are being truncated. --- contrib/TestHarness/Program.cs.cmake | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/contrib/TestHarness/Program.cs.cmake b/contrib/TestHarness/Program.cs.cmake index 69fdd9bb36..c90d542f9b 100644 --- a/contrib/TestHarness/Program.cs.cmake +++ b/contrib/TestHarness/Program.cs.cmake @@ -609,12 +609,14 @@ namespace SummarizeTest public List Errors { get; set; } int maxErrorLength; int maxErrors; + bool errorsExceeded; - public ErrorOutputListener(int maxErrorLength = 100, int maxErrors = 10) + public ErrorOutputListener(int maxErrorLength = 1000, int maxErrors = 10) { Errors = new List(); this.maxErrorLength = maxErrorLength; this.maxErrors = maxErrors; + this.errorsExceeded = false; } public bool hasError = false; @@ -623,8 +625,18 @@ namespace SummarizeTest if(!String.IsNullOrEmpty(errLine.Data)) { hasError = true; - if(Errors.Count < maxErrors) - Errors.Add(errLine.Data.Substring(0, Math.Min(maxErrorLength, errLine.Data.Length))); + if(Errors.Count < maxErrors) { + if(errLine.Data.Length > maxErrorLength) { + Errors.Add(errLine.Data.Substring(0, maxErrorLength) + "..."); + } + else { + Errors.Add(errLine.Data); + } + } + else if(!errorsExceeded) { + Errors.Add("TestHarness error limit exceeded"); + errorsExceeded = true; + } } } } From 618585f9dd2d89c8d1b7f9bb13643d1fbbaef011 Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Fri, 5 Feb 2021 15:59:14 -0800 Subject: [PATCH 277/317] Fix a bug in simulated coordinator selection that could allow an unreliable process to be chosen as coordinator despite the intent that this not happen. --- fdbclient/ManagementAPI.actor.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fdbclient/ManagementAPI.actor.cpp b/fdbclient/ManagementAPI.actor.cpp index 5f51c82c16..df8e686e9d 100644 --- a/fdbclient/ManagementAPI.actor.cpp +++ b/fdbclient/ManagementAPI.actor.cpp @@ -989,11 +989,12 @@ ACTOR Future changeQuorum( Database cx, ReferenceisSimulated()) { for(int i = 0; i < (desiredCoordinators.size()/2)+1; i++) { - auto addresses = g_simulator.getProcessByAddress(desiredCoordinators[i])->addresses; + auto process = g_simulator.getProcessByAddress(desiredCoordinators[i]); + ASSERT(process->isReliable()); - g_simulator.protectedAddresses.insert(addresses.address); - if(addresses.secondaryAddress.present()) { - g_simulator.protectedAddresses.insert(addresses.secondaryAddress.get()); + g_simulator.protectedAddresses.insert(process->addresses.address); + if(process->addresses.secondaryAddress.present()) { + g_simulator.protectedAddresses.insert(process->addresses.secondaryAddress.get()); } TraceEvent("ProtectCoordinator").detail("Address", desiredCoordinators[i]).backtrace(); } @@ -1208,8 +1209,7 @@ struct AutoQuorumChange : IQuorumChange { continue; } // Exclude faulty node due to machine assassination - if (g_network->isSimulated() && g_simulator.protectedAddresses.count(worker->address) && - !g_simulator.getProcessByAddress(worker->address)->isReliable()) { + if (g_network->isSimulated() && !g_simulator.getProcessByAddress(worker->address)->isReliable()) { TraceEvent("AutoSelectCoordinators").detail("SkipUnreliableWorker", worker->address.toString()); continue; } From 8547abbbe4734c1ffd967ec7de7b53284e6db596 Mon Sep 17 00:00:00 2001 From: Steve Atherton Date: Fri, 5 Feb 2021 21:26:39 -0800 Subject: [PATCH 278/317] Bug fix: In simulation, KVStoreSQLite can outlive its process during a simulated reboot so its file references must be cleared explicitly during shutdown instead of implicitly during destruction. Re-enabled a useful trace event. Some cleanup, removed unnecessary member var initializer and removed unnecessary method. --- fdbrpc/AsyncFileCached.actor.h | 8 +++----- fdbserver/KeyValueStoreSQLite.actor.cpp | 2 ++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fdbrpc/AsyncFileCached.actor.h b/fdbrpc/AsyncFileCached.actor.h index aca82693c2..c93a7b0861 100644 --- a/fdbrpc/AsyncFileCached.actor.h +++ b/fdbrpc/AsyncFileCached.actor.h @@ -230,8 +230,6 @@ public: return filename; } - std::vector const& getFlushable() { return flushable; } - void setRateControl(Reference const& rc) override { rateControl = rc; } Reference const& getRateControl() override { return rateControl; } @@ -252,8 +250,8 @@ public: } auto f = quiesce(); - //TraceEvent("AsyncFileCachedDel").detail("Filename", filename) - // .detail("Refcount", debugGetReferenceCount()).detail("CanDie", f.isReady()).backtrace(); + TraceEvent("AsyncFileCachedDel").detail("Filename", filename) + .detail("Refcount", debugGetReferenceCount()).detail("CanDie", f.isReady()).backtrace(); if (f.isReady()) delete this; else @@ -303,7 +301,7 @@ private: AsyncFileCached(Reference uncached, const std::string& filename, int64_t length, Reference pageCache) : uncached(uncached), filename(filename), length(length), prevLength(length), pageCache(pageCache), - currentTruncate(Void()), currentTruncateSize(0), rateControl(nullptr) { + currentTruncate(Void()), currentTruncateSize(0) { if( !g_network->isSimulated() ) { countFileCacheWrites.init(LiteralStringRef("AsyncFile.CountFileCacheWrites"), filename); countFileCacheReads.init(LiteralStringRef("AsyncFile.CountFileCacheReads"), filename); diff --git a/fdbserver/KeyValueStoreSQLite.actor.cpp b/fdbserver/KeyValueStoreSQLite.actor.cpp index be43041686..f67894cfe9 100644 --- a/fdbserver/KeyValueStoreSQLite.actor.cpp +++ b/fdbserver/KeyValueStoreSQLite.actor.cpp @@ -1897,6 +1897,7 @@ private: dbFile->setRateControl({}); rc->wakeWaiters(); } + dbFile.clear(); if(walFile && walFile->getRateControl()) { TraceEvent(SevDebug, "KeyValueStoreSQLiteShutdownRateControl").detail("Filename", walFile->getFilename()); @@ -1904,6 +1905,7 @@ private: walFile->setRateControl({}); rc->wakeWaiters(); } + walFile.clear(); } ACTOR static Future stopOnError( KeyValueStoreSQLite* self ) { From 5c4863b33ef482eabddff063fb2ac7af0288da6c Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Fri, 5 Feb 2021 22:07:40 -0800 Subject: [PATCH 279/317] Fix unit test that set coordinators to fake processes that the simulator didn't know about --- fdbclient/ManagementAPI.actor.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fdbclient/ManagementAPI.actor.cpp b/fdbclient/ManagementAPI.actor.cpp index df8e686e9d..7271398b3e 100644 --- a/fdbclient/ManagementAPI.actor.cpp +++ b/fdbclient/ManagementAPI.actor.cpp @@ -2020,6 +2020,10 @@ TEST_CASE("/ManagementAPI/AutoQuorumChange/checkLocality") { data.locality.set(LiteralStringRef("machineid"), StringRef(machineId)); data.address.ip = IPAddress(i); + g_simulator.newProcess(format("TestProcess%d", i).c_str(), data.address.ip, data.address.port, false, 1, + data.locality, ProcessClass(ProcessClass::CoordinatorClass, ProcessClass::CommandLineSource), + "", ""); + workers.push_back(data); } From 53d8bd57998ae55ba9a10d828e58328d158cc442 Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Fri, 5 Feb 2021 22:36:54 -0800 Subject: [PATCH 280/317] If a quorum change has to retry, it's possible that one of our previously chosen coordinators could be rebooting. --- fdbclient/ManagementAPI.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbclient/ManagementAPI.actor.cpp b/fdbclient/ManagementAPI.actor.cpp index 7271398b3e..c97da70b0c 100644 --- a/fdbclient/ManagementAPI.actor.cpp +++ b/fdbclient/ManagementAPI.actor.cpp @@ -990,7 +990,7 @@ ACTOR Future changeQuorum( Database cx, ReferenceisSimulated()) { for(int i = 0; i < (desiredCoordinators.size()/2)+1; i++) { auto process = g_simulator.getProcessByAddress(desiredCoordinators[i]); - ASSERT(process->isReliable()); + ASSERT(process->isReliable() || process->rebooting); g_simulator.protectedAddresses.insert(process->addresses.address); if(process->addresses.secondaryAddress.present()) { From 84be77958ec65be1ca174724886d5aec9612ccad Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Fri, 5 Feb 2021 22:47:49 -0800 Subject: [PATCH 281/317] Add a simulator guard --- fdbclient/ManagementAPI.actor.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/fdbclient/ManagementAPI.actor.cpp b/fdbclient/ManagementAPI.actor.cpp index c97da70b0c..d36223d69a 100644 --- a/fdbclient/ManagementAPI.actor.cpp +++ b/fdbclient/ManagementAPI.actor.cpp @@ -2020,9 +2020,11 @@ TEST_CASE("/ManagementAPI/AutoQuorumChange/checkLocality") { data.locality.set(LiteralStringRef("machineid"), StringRef(machineId)); data.address.ip = IPAddress(i); - g_simulator.newProcess(format("TestProcess%d", i).c_str(), data.address.ip, data.address.port, false, 1, - data.locality, ProcessClass(ProcessClass::CoordinatorClass, ProcessClass::CommandLineSource), - "", ""); + if(g_network->isSimulated()) { + g_simulator.newProcess(format("TestProcess%d", i).c_str(), data.address.ip, data.address.port, false, 1, + data.locality, ProcessClass(ProcessClass::CoordinatorClass, ProcessClass::CommandLineSource), + "", ""); + } workers.push_back(data); } From c326c263a8bbae2536c845d2b727be23820a7828 Mon Sep 17 00:00:00 2001 From: Evan Tschannen Date: Sun, 7 Feb 2021 22:58:11 -0800 Subject: [PATCH 282/317] Updated knobs to enable low priority reads when durability lag is larger than 200 seconds --- documentation/sphinx/source/downloads.rst | 24 +++++++++---------- .../release-notes/release-notes-620.rst | 10 ++++++++ fdbserver/Knobs.cpp | 6 ++--- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/documentation/sphinx/source/downloads.rst b/documentation/sphinx/source/downloads.rst index e4de4ac711..5729a4ba1c 100644 --- a/documentation/sphinx/source/downloads.rst +++ b/documentation/sphinx/source/downloads.rst @@ -10,38 +10,38 @@ macOS The macOS installation package is supported on macOS 10.7+. It includes the client and (optionally) the server. -* `FoundationDB-6.2.29.pkg `_ +* `FoundationDB-6.2.30.pkg `_ Ubuntu ------ The Ubuntu packages are supported on 64-bit Ubuntu 12.04+, but beware of the Linux kernel bug in Ubuntu 12.x. -* `foundationdb-clients-6.2.29-1_amd64.deb `_ -* `foundationdb-server-6.2.29-1_amd64.deb `_ (depends on the clients package) +* `foundationdb-clients-6.2.30-1_amd64.deb `_ +* `foundationdb-server-6.2.30-1_amd64.deb `_ (depends on the clients package) RHEL/CentOS EL6 --------------- The RHEL/CentOS EL6 packages are supported on 64-bit RHEL/CentOS 6.x. -* `foundationdb-clients-6.2.29-1.el6.x86_64.rpm `_ -* `foundationdb-server-6.2.29-1.el6.x86_64.rpm `_ (depends on the clients package) +* `foundationdb-clients-6.2.30-1.el6.x86_64.rpm `_ +* `foundationdb-server-6.2.30-1.el6.x86_64.rpm `_ (depends on the clients package) RHEL/CentOS EL7 --------------- The RHEL/CentOS EL7 packages are supported on 64-bit RHEL/CentOS 7.x. -* `foundationdb-clients-6.2.29-1.el7.x86_64.rpm `_ -* `foundationdb-server-6.2.29-1.el7.x86_64.rpm `_ (depends on the clients package) +* `foundationdb-clients-6.2.30-1.el7.x86_64.rpm `_ +* `foundationdb-server-6.2.30-1.el7.x86_64.rpm `_ (depends on the clients package) Windows ------- The Windows installer is supported on 64-bit Windows XP and later. It includes the client and (optionally) the server. -* `foundationdb-6.2.29-x64.msi `_ +* `foundationdb-6.2.30-x64.msi `_ API Language Bindings ===================== @@ -58,18 +58,18 @@ On macOS and Windows, the FoundationDB Python API bindings are installed as part If you need to use the FoundationDB Python API from other Python installations or paths, download the Python package: -* `foundationdb-6.2.29.tar.gz `_ +* `foundationdb-6.2.30.tar.gz `_ Ruby 1.9.3/2.0.0+ ----------------- -* `fdb-6.2.29.gem `_ +* `fdb-6.2.30.gem `_ Java 8+ ------- -* `fdb-java-6.2.29.jar `_ -* `fdb-java-6.2.29-javadoc.jar `_ +* `fdb-java-6.2.30.jar `_ +* `fdb-java-6.2.30-javadoc.jar `_ Go 1.11+ -------- diff --git a/documentation/sphinx/source/release-notes/release-notes-620.rst b/documentation/sphinx/source/release-notes/release-notes-620.rst index 4aad02f1a8..1b05ca9e58 100644 --- a/documentation/sphinx/source/release-notes/release-notes-620.rst +++ b/documentation/sphinx/source/release-notes/release-notes-620.rst @@ -4,6 +4,16 @@ Release Notes ############# +6.2.30 +====== +* A storage server which has fallen behind will deprioritize reads in order to catch up. This change causes some saturating workloads to experience high read latencies instead of high GRV latencies. `(PR #4218) `_ +* Added ``low_priority_queries`` to the ``processes.roles`` section of status to record the number of deprioritized reads on each storage server. `(PR #4218) `_ +* Added ``low_priority_reads`` to the ``workload.operations`` section of status to record the total number of deprioritized reads. `(PR #4218) `_ +* Backup to locally mounted filesystems now appends to files in large block writes, 1MB each by default. `(PR #4199) `_ +* Changed the default SSL implementation from OpenSSL to BoringSSL `(PR #4153) `_ +* SQLite now supports configurable disk write rate limiting. `(PR #4259) `_ +* If a disk operation takes more than two minutes, the system will treat the disk as failed. `(PR #4243) `_ + 6.2.29 ====== * Fix invalid memory access on data distributor when snapshotting large clusters. `(PR #4076) `_ diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index da59d8f9e1..3cc70c1f0c 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -453,11 +453,11 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( SPRING_BYTES_STORAGE_SERVER_BATCH, 100e6 ); if( smallStorageTarget ) SPRING_BYTES_STORAGE_SERVER_BATCH = 150e3; init( STORAGE_HARD_LIMIT_BYTES, 1500e6 ); if( smallStorageTarget ) STORAGE_HARD_LIMIT_BYTES = 4500e3; init( STORAGE_DURABILITY_LAG_HARD_MAX, 2000e6 ); if( smallStorageTarget ) STORAGE_DURABILITY_LAG_HARD_MAX = 100e6; - init( STORAGE_DURABILITY_LAG_SOFT_MAX, 200e6 ); if( smallStorageTarget ) STORAGE_DURABILITY_LAG_SOFT_MAX = 10e6; + init( STORAGE_DURABILITY_LAG_SOFT_MAX, 250e6 ); if( smallStorageTarget ) STORAGE_DURABILITY_LAG_SOFT_MAX = 10e6; //FIXME: Low priority reads are disabled by assigning very high knob values, reduce knobs for 7.0 init( LOW_PRIORITY_STORAGE_QUEUE_BYTES, 775e8 ); if( smallStorageTarget ) LOW_PRIORITY_STORAGE_QUEUE_BYTES = 1750e3; - init( LOW_PRIORITY_DURABILITY_LAG, 275e8 ); if( smallStorageTarget ) LOW_PRIORITY_DURABILITY_LAG = 15e6; + init( LOW_PRIORITY_DURABILITY_LAG, 200e6 ); if( smallStorageTarget ) LOW_PRIORITY_DURABILITY_LAG = 15e6; bool smallTlogTarget = randomize && BUGGIFY; init( TARGET_BYTES_PER_TLOG, 2400e6 ); if( smallTlogTarget ) TARGET_BYTES_PER_TLOG = 2000e3; @@ -483,7 +483,7 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs, bool isSimula init( MAX_TPS_HISTORY_SAMPLES, 600 ); init( NEEDED_TPS_HISTORY_SAMPLES, 200 ); init( TARGET_DURABILITY_LAG_VERSIONS, 350e6 ); // Should be larger than STORAGE_DURABILITY_LAG_SOFT_MAX - init( TARGET_DURABILITY_LAG_VERSIONS_BATCH, 250e6 ); // Should be larger than STORAGE_DURABILITY_LAG_SOFT_MAX + init( TARGET_DURABILITY_LAG_VERSIONS_BATCH, 150e6 ); // Should be larger than STORAGE_DURABILITY_LAG_SOFT_MAX init( DURABILITY_LAG_UNLIMITED_THRESHOLD, 50e6 ); init( INITIAL_DURABILITY_LAG_MULTIPLIER, 1.02 ); init( DURABILITY_LAG_REDUCTION_RATE, 0.9999 ); From b70c69e0998475a726a846685913b3d376311c6e Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Mon, 8 Feb 2021 10:42:07 -0800 Subject: [PATCH 283/317] Address review note that some variables need to be set earlier. --- cmake/FDBComponents.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/FDBComponents.cmake b/cmake/FDBComponents.cmake index 3ae609ee67..ec26c07dd8 100644 --- a/cmake/FDBComponents.cmake +++ b/cmake/FDBComponents.cmake @@ -22,14 +22,14 @@ else() find_package(OpenSSL) if(OPENSSL_FOUND) set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR}) + set(WITH_TLS ON) + add_compile_options(-DHAVE_OPENSSL) check_symbol_exists("OPENSSL_INIT_NO_ATEXIT" "openssl/crypto.h" OPENSSL_HAS_NO_ATEXIT) if(OPENSSL_HAS_NO_ATEXIT) add_compile_options(-DHAVE_OPENSSL_INIT_NO_AT_EXIT) else() message(STATUS "Found OpenSSL without OPENSSL_INIT_NO_ATEXIT: assuming BoringSSL") endif() - set(WITH_TLS ON) - add_compile_options(-DHAVE_OPENSSL) else() message(STATUS "OpenSSL was not found - Will compile without TLS Support") message(STATUS "You can set OPENSSL_ROOT_DIR to help cmake find it") From 449e4b98b4617773b6bfcd2ff9ca031071e32a89 Mon Sep 17 00:00:00 2001 From: "A.J. Beamon" Date: Mon, 8 Feb 2021 12:06:51 -0800 Subject: [PATCH 284/317] Attempt to fix a build warning that's now blocking the compile due to werror. --- flow/Arena.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/flow/Arena.h b/flow/Arena.h index 15ce742f00..ca34cf9b86 100644 --- a/flow/Arena.h +++ b/flow/Arena.h @@ -679,7 +679,8 @@ inline bool operator==(const StringRef& lhs, const StringRef& rhs) { if (lhs.size() == 0 && rhs.size() == 0) { return true; } - return lhs.size() == rhs.size() && memcmp(lhs.begin(), rhs.begin(), lhs.size()) == 0; + ASSERT(lhs.size() >= 0); + return lhs.size() == rhs.size() && memcmp(lhs.begin(), rhs.begin(), static_cast(lhs.size())) == 0; } inline bool operator<(const StringRef& lhs, const StringRef& rhs) { if (std::min(lhs.size(), rhs.size()) > 0) { From 9e9bc4abe5200305bf5083cabcd17e023dc3ed97 Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Mon, 8 Feb 2021 21:20:37 +0000 Subject: [PATCH 285/317] Create one client thread for each one that was requested (assumes local client is disabled) --- fdbclient/MultiVersionTransaction.actor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fdbclient/MultiVersionTransaction.actor.cpp b/fdbclient/MultiVersionTransaction.actor.cpp index 85c7454e81..fc35169853 100644 --- a/fdbclient/MultiVersionTransaction.actor.cpp +++ b/fdbclient/MultiVersionTransaction.actor.cpp @@ -1068,7 +1068,7 @@ void MultiVersionApi::addExternalLibraryDirectory(std::string path) { std::vector MultiVersionApi::copyExternalLibraryPerThread(std::string path) { // Copy library for each thread configured per version std::vector paths; - for (int ii = 1; ii < CLIENT_KNOBS->MULTI_VERSION_CLIENT_THREADS_PER_VERSION; ++ii) { + for (int ii = 0; ii < CLIENT_KNOBS->MULTI_VERSION_CLIENT_THREADS_PER_VERSION; ++ii) { std::string filename = basename(path); char tempName[PATH_MAX + 12]; From a56184c0b73e012d186736a4cee68b055c433881 Mon Sep 17 00:00:00 2001 From: Russell Sears Date: Mon, 8 Feb 2021 22:01:48 +0000 Subject: [PATCH 286/317] log TLSVerifyFailure as a warning (severity 20) since it generally indicates a miconfiguration or important network problem --- flow/TLSConfig.actor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flow/TLSConfig.actor.cpp b/flow/TLSConfig.actor.cpp index 10e44ddc17..eb438299ac 100644 --- a/flow/TLSConfig.actor.cpp +++ b/flow/TLSConfig.actor.cpp @@ -778,7 +778,7 @@ bool TLSPolicy::verify_peer(bool preverified, X509_STORE_CTX* store_ctx) { } if(!preverified) { - TraceEvent("TLSPolicyFailure").suppressFor(1.0).detail("Reason", "preverification failed").detail("VerifyError", X509_verify_cert_error_string(X509_STORE_CTX_get_error(store_ctx))); + TraceEvent(SevWarn, "TLSPolicyFailure").suppressFor(1.0).detail("Reason", "preverification failed").detail("VerifyError", X509_verify_cert_error_string(X509_STORE_CTX_get_error(store_ctx))); return false; } @@ -801,7 +801,7 @@ bool TLSPolicy::verify_peer(bool preverified, X509_STORE_CTX* store_ctx) { if (!rc) { // log the various failure reasons for (std::string reason : verify_failure_reasons) { - TraceEvent("TLSPolicyFailure").suppressFor(1.0).detail("Reason", reason); + TraceEvent(SevWarn, "TLSPolicyFailure").suppressFor(1.0).detail("Reason", reason); } } return rc; From badb2a330b4b8d77a683110ecb6340b61f6c23b3 Mon Sep 17 00:00:00 2001 From: Aaron Molitor Date: Mon, 8 Feb 2021 19:18:08 -0600 Subject: [PATCH 287/317] update version to 6.2.31 --- CMakeLists.txt | 2 +- versions.target | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ca7257d26b..2a915a9642 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ # limitations under the License. cmake_minimum_required(VERSION 3.12) project(foundationdb - VERSION 6.2.30 + VERSION 6.2.31 DESCRIPTION "FoundationDB is a scalable, fault-tolerant, ordered key-value store with full ACID transactions." HOMEPAGE_URL "http://www.foundationdb.org/" LANGUAGES C CXX ASM) diff --git a/versions.target b/versions.target index 75e3f0fe92..ee2b5ae8e7 100644 --- a/versions.target +++ b/versions.target @@ -1,7 +1,7 @@ - 6.2.30 + 6.2.31 6.2 From 45728d0108351947df9c815d2630262d9743461e Mon Sep 17 00:00:00 2001 From: Aaron Molitor Date: Mon, 8 Feb 2021 19:18:08 -0600 Subject: [PATCH 288/317] update installer WIX GUID following release --- packaging/msi/FDBInstaller.wxs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/msi/FDBInstaller.wxs b/packaging/msi/FDBInstaller.wxs index 8e97797d6e..5a0856e20d 100644 --- a/packaging/msi/FDBInstaller.wxs +++ b/packaging/msi/FDBInstaller.wxs @@ -32,7 +32,7 @@ Date: Tue, 9 Feb 2021 20:56:34 +0000 Subject: [PATCH 289/317] change client thread count from knob to fdb.option (to be more consistent with other multiversion client options) --- fdbclient/Knobs.cpp | 3 --- fdbclient/Knobs.h | 3 --- fdbclient/MultiVersionTransaction.actor.cpp | 19 +++++++++++++------ fdbclient/MultiVersionTransaction.h | 4 ++-- fdbclient/vexillographer/fdb.options | 3 +++ 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/fdbclient/Knobs.cpp b/fdbclient/Knobs.cpp index ea4c112ceb..8dc7499b85 100644 --- a/fdbclient/Knobs.cpp +++ b/fdbclient/Knobs.cpp @@ -170,9 +170,6 @@ void ClientKnobs::initialize(bool randomize) { init( DEFAULT_AUTO_RESOLVERS, 1 ); init( DEFAULT_AUTO_LOGS, 3 ); - // Multi-version Client - init( MULTI_VERSION_CLIENT_THREADS_PER_VERSION, 3 ); - init( IS_ACCEPTABLE_DELAY, 1.5 ); init( HTTP_READ_SIZE, 128*1024 ); diff --git a/fdbclient/Knobs.h b/fdbclient/Knobs.h index a8fc57c114..861e3f1853 100644 --- a/fdbclient/Knobs.h +++ b/fdbclient/Knobs.h @@ -165,9 +165,6 @@ public: int32_t DEFAULT_AUTO_RESOLVERS; int32_t DEFAULT_AUTO_LOGS; - // Multi-version Client - int MULTI_VERSION_CLIENT_THREADS_PER_VERSION; - // Client Status Info double CSI_SAMPLING_PROBABILITY; int64_t CSI_SIZE_LIMIT; diff --git a/fdbclient/MultiVersionTransaction.actor.cpp b/fdbclient/MultiVersionTransaction.actor.cpp index fc35169853..b4554510ca 100644 --- a/fdbclient/MultiVersionTransaction.actor.cpp +++ b/fdbclient/MultiVersionTransaction.actor.cpp @@ -919,7 +919,7 @@ bool MultiVersionApi::apiVersionAtLeast(int minVersion) { } void MultiVersionApi::runOnExternalClientsAllThreads(std::function)> func, bool runOnFailedClients) { - for (int i = 0; i < tidCount; i++) { + for (int i = 0; i < threadCount; i++) { runOnExternalClients(i, func, runOnFailedClients); } } @@ -1068,7 +1068,7 @@ void MultiVersionApi::addExternalLibraryDirectory(std::string path) { std::vector MultiVersionApi::copyExternalLibraryPerThread(std::string path) { // Copy library for each thread configured per version std::vector paths; - for (int ii = 0; ii < CLIENT_KNOBS->MULTI_VERSION_CLIENT_THREADS_PER_VERSION; ++ii) { + for (int ii = 0; ii < threadCount; ++ii) { std::string filename = basename(path); char tempName[PATH_MAX + 12]; @@ -1203,6 +1203,13 @@ void MultiVersionApi::setNetworkOptionInternal(FDBNetworkOptions::Option option, externalClient = true; bypassMultiClientApi = true; } + else if(option == FDBNetworkOptions::CLIENT_THREADS_PER_VERSION) { + validateOption(value, true, false, false); + disableLocalClient(); + MutexHolder holder(lock); + ASSERT(value.present()); + threadCount = extractIntOption(value, 1, 1024); + } else { MutexHolder holder(lock); localClient->api->setNetworkOption(option, value); @@ -1365,8 +1372,8 @@ Reference MultiVersionApi::createDatabase(const char *clusterFilePath throw network_not_setup(); } - int threadIdx = nextTid; - nextTid = (nextTid + 1) % tidCount; + int threadIdx = nextThread; + nextThread = (nextThread + 1) % threadCount; lock.leave(); @@ -1374,7 +1381,7 @@ Reference MultiVersionApi::createDatabase(const char *clusterFilePath if(localClientDisabled) { return Reference(new MultiVersionDatabase(this, threadIdx, clusterFile, Reference())); } - ASSERT(tidCount == 1); // threadCount must be one if local client is enabled. + ASSERT(threadCount == 1); // threadCount must be one if local client is enabled. auto db = localClient->api->createDatabase(clusterFilePath); if(bypassMultiClientApi) { @@ -1489,7 +1496,7 @@ void MultiVersionApi::loadEnvironmentVariableNetworkOptions() { envOptionsLoaded = true; } -MultiVersionApi::MultiVersionApi() : bypassMultiClientApi(false), networkStartSetup(false), networkSetup(false), callbackOnMainThread(true), externalClient(false), localClientDisabled(false), apiVersion(0), envOptionsLoaded(false) {} +MultiVersionApi::MultiVersionApi() : bypassMultiClientApi(false), networkStartSetup(false), networkSetup(false), callbackOnMainThread(true), externalClient(false), localClientDisabled(false), apiVersion(0), envOptionsLoaded(false), threadCount(1) {} MultiVersionApi* MultiVersionApi::api = new MultiVersionApi(); diff --git a/fdbclient/MultiVersionTransaction.h b/fdbclient/MultiVersionTransaction.h index 027ca60cff..c28af5fc13 100644 --- a/fdbclient/MultiVersionTransaction.h +++ b/fdbclient/MultiVersionTransaction.h @@ -424,8 +424,8 @@ private: int apiVersion; // XXX fixme - int nextTid = 0; - const int tidCount = 1; + int nextThread = 0; + int threadCount; Mutex lock; std::vector>>> options; diff --git a/fdbclient/vexillographer/fdb.options b/fdbclient/vexillographer/fdb.options index d7463e5845..2c7e6574d5 100644 --- a/fdbclient/vexillographer/fdb.options +++ b/fdbclient/vexillographer/fdb.options @@ -109,6 +109,9 @@ description is not currently required but encouraged. description="Searches the specified path for dynamic libraries and adds them to the list of client libraries for use by the multi-version client API. Must be set before setting up the network." />

      kY2!{Zw{_s^gFJfEuAcJsZ` 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�RYs?xe6DG0=jRXr9*H-}{QNg|5*O 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 z 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 l=kZ|X3FsjOG+)e>Cxb!<}e|uwsJYJi9 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�IUW08(Qb<xi6SU8GZ|HB@y`omYZnpv3tfm?(3e@YX+ z`b^nMst~3KOy8)mw`OFqV@3AM^;h( zH|a;zk=a_^V8h+c`z}EBVILX)AE(RHGYE14mc9%aN%iaHpr7IsY64&Okqg|>&UP63 z5U|<{kU2sIX?=yI@v^;dt}aZLy$(Vs8!YV#=I6IpqGK=!EeJ|>VjRBww_1?6CFHbZ zR>oB2?gt+Z6pph9U|Pxbg=PnfQYLWr=LO%3|0w6LoTiJ6wnn_gF;L9!;xlR> zOc_V10YKv=G7P}54d=%icmQe(+#H{XSg=go8QJ&;u3DII`&jbmpP%aQgks2ayL8C@ zKc5Mie-zOgXrJT(E29rEA5cr7phw-Q_VECQrqMt_hL#^YeaMfR)$`Ng| ze5RPjA7={pYdP^XP(m<-uz<(rtx!WtOQAjyt5O~TV0IAWdLAIVGAI<$If82W@Iao) zxXHP5ZgxP+C~HJ?O@u+}%GT3^^3mz@@lP*|rJT23S-F}zeOi}or$Sg`hif1yL9%U{ zdQ!Y(QoRlvqjg}A(*CvtX6)OqalF?pFEx=Vm##OkXp_#OnRUqMVcBL zNOzL`L9`C1*x_!;z~Sgny2)-wsT*mTX;POrS5h;I>}nYMGB)>H+dXNcsmsOFTvYjS z^S*r~!Um3Q*M*09t+|(Wbv+O^aH*TFTcwIIczMm`k%>_3#GzufCEvdE>vgkl*q!TU zF3CR}pmM33nT#F}8t#(+l60bsVGNa?@hRJ5@vIhwm^))B$3upkgxc==TeRITnZuXJ z|J*IP9CLU)mh$BMpi_Z~*yQ!tLuPHE-@pqQf(6h~1#Zgb|8eMU5{^wy$~Za}q5MQX zW`1oP@|*qmAX2~vPGMn3Kd2*LkZiHu_?2k(5y$fJ)RfquS4UlBAzP0?)vZ))t%GoCrumVG`CPE=0cdkc z$;gmGF(@@PHCE49{>u-wu)RN-^y0g|Do^x#^gpNqfR~cCHiwv)7&wKI-5H(6oM%AT z0THnwQ)d-j`+O@yw^Fk^Q)_ZvH|KDHMUOm8(;S(hdbX6m#Z{0eas9cz+*$5qvjQ_z z>;p~l_z_wLVuvX>@+a{NY96%}ht;n+Fuv8Jy_Bfh^_&H7MorqrCY&ui?)}P7&O{!@ z-_;4Prvz2Kvtd2e>|xXrkpevCLOWd_YqXGkTpZy0*cnY3YhYze>7Q@zfQOuQ?J=7(@~*%e_?6RiOZ_a?Ui$;g5M%4$V&L|{po3NK4*j! z%`#c;>43D;b)b>ruz)qk`MbLUq26`Bs2Mg28b@JJSGeIJC(6vsye$DBu6d>%bRXf3 z)QD`AVrmZIapo)nb7#5LG?Ac8{5v|X1vKzj3uKHoIztyLhsyV)=*4eA_QnQzJF7>z%zW%4e@gJ$9 zR}KbZ{xZm^h6Nu;t=#T^5Dm!R&pWzJc{@L!jhDr`><9R79}l!TfIs8WXFOM}sfRF* z<7kZPK)r%at#TIK0( z2g%!5@w9p!>dvuGUxi3qw_-Oud|AqGmg!otS{e*1fgbG77V@rcTO~9-i=jW0+(bTk zJRMu2YM}b`>X~V~PZ^3$#id4{)Wm|+F3@1H)z~-ofi7H9;aQy1cEf!q%VK7UVTk-+ z#f^U*IhHn~MuNtT0Seb{Sm??gIbl$@OZV-r^jED=%4*PY8e)X{;^!CbH!a_K{B$$U z`=We#Bew7wf%e=A^7KuRW+fN!&HFOKkqkv8cGSohI$zYUI`YQmzR|NAbQYEao>E-b z+lo><=c-pO-)0cles2rB{F0#HOBuiQ@A1rC*4-BP0O+0|lYw(iI zClN>ES6bk!q@Tm{NkP#JiKSJsm1}b$B_~9Jtg_;O*1A4yAJ3Iq!fWMivT}N;kmMd( z4K>-os@bROsA$n6a5BGWwtxW_$>vnoK;8cs!ty{dS}a3WTKYahdN9d7VgQt?PsG~{ zeBW1o!Hgw!r(~EXF9gVqb(;ts?eiwve8hd)o+FP&xGep2J!z>tc#ZGOFYC+2d6F96 z>AY#7`vt$}^I2M5FE4(gykj*?Z^I^50}&K~q4xL8ijC-p5#Rv_TzDzS$WYr2q^x*f zGg~}6*)Pi=d}F~|*r4j8x)*=|rP^YJ*Kb-PG6!h<2g0Z-!S3WMFH5a2kzK|O(~Pgc zT3ctK2}3;aKg>s+=ZbTB>x_7qP!2Vy=QExisWSGR?c`*fU(UXM`T0RP+tTGAzS8eP zE^9nyJem)tRC&5iGi~g^5@kDP87??!ap&YXYJNGRu&&oZd)vtwElB# zw~&VwqnWC*i`z{FF^K=k#nd-V*h>;~`jw2)htYEl%uFH&$X65hwHpsdT+?ARQ+ZMP z-tneI!iVDwyV>J416puC%emI!u9cIcIJ4r(^#!+-vkp^lVZEd}Q9);J!0n$P@Sf_Q z_41QJ@@nZ979339pB*zfKEA?J0xfexV9HiGQ0()*6c2zicehkX6p;=SaQUP%G}sn} zv$Uj7GKZotU6%Zm?U=W~)k{&A728t4WKra1){_+zJ9aneT@?k5LF(iby$DALXSKPE z>%QaiBNb;@=Lb)Q)|O?<9#rcwwHqxX&ph~X(}Rp;(~vjRZMUY~cU*hqc^Q}Ulc-5Q zlb!AnACsGLvqqC-+wxcD3cG5pJ;qS z|DT0696$@5@8uPLQC9b!emtoZ_$JCjbN%DdJXUGt@w$ zT^v35y$cz#w;ZBXgh79@9$fq36Sp7^a0Y@(1#iD8??A*ltTpbliI$AveE8ZfN7wtV zf+01xVqTBkw`;E6bNfuyrDD6GJo6?+u8lY+ru{4P>XMNVq;AUeEw ze%XJ-`sfDkRRG9KM={KXf0YDXlAx%lsnvPJhXZUDZe!K-LI2PelCbZ2P|ynjQ3jH; z+H~5*u0uCBWF=Ve_Z&GjLY-X+SdOx)H&t#fbC&#??dg#;0E(G1x9i^Jnxa@h`QRI^ z{#|V1Vb=LZy@;1j5;%J@@6%;$BJ#1Pyw1*%H~J^~_Psci%Prz%d{TKVSyb&lH))hx zl*VJrZhd~XEaLogyWOi5i)h|e86;Yplqc|Khtlz87f+xqEt--qVm}UTJqsS5_KSf{RDKamSR5w{84fiF0L>NPR;AL%p2!#Aay+mq`0&k zrmMA!j|?oRpy3h6FN`4J9#FYcD~SIn8Hd_Dw_6OUzSKP~?N<(oG#s-d@s zXRkFqRXCWR-WjW!^(sm9Nt4*_m=o3}sx0iw7fv=BPij2wp0R7XMPoO7F_BrboFX_| zI^1zF(+T$2uW;3mIGMgi{ElkUo_|alkX7{u0$FIimMkU!Il5>Scl`2AAy7s@8+=?^ zAJ{)UfI8Q6q&{OG0Qb#GcT5>nSyDL_D$!wkj}K`lBjUn9uTw?s3BuIEB`XPSL5Jjr zO#7D$O$*ju%d6`$=vh0h+8FM}yG3wDz^Nf3>*J0|^SS8~>%Q`J7GYc#mWvsreBmPh zT`iDfpe{nV;(&|azHjGA!hOq{550FZzQdF7DnJ6p!?h8gTxq(pVrd~&@+o&O-g*42 zQ_Po+PFq&e3>#XSOMVTKItYI1`AE*@B*U#N1xpQ8#S1-Qz$*xWqbp_h@nh=CLOq`0 zQo9sBh@r}SCH*}2AeA&3fXJ_ZA3z9o=+vL7%CtU^rS++Z^CUufA7G95n?!?vkT_1X zkTcKdV>J5~x(pct$C!0VZ9$ldi4&fI!tnT7nARi}H8Gc=36Z#NJkMp6?X? zIe!|+oDX7gVXh}csIw1DIM}$zT}I6dPPn*VdnuejuU~;RY7=bjFA;9J5lnPYQv+T= zNO1FW!rp7DPY<-YO+FzY2zrIje_1n3N1RAyvDUuo4exm+PRHSf$lgnOS-z+QXdI9}cdbWh_J%bI%MhPu z*58ZSK_WY&E7dA0_;N%$Gn6|2oJP8^3YQ#O%ZAUEi0xKD=g9Pz!mos6bxX&=VMP@O8~la-EuN=!yrsOqGf^yitA`%9e3qI z5cdG!3!I@3>h||?OECa8LOc+tUI*X2dDDBR;8aGwAp~Z&Q<=r$vQ(^i%Y~BXo-K3# z$i46+do(5I)>O_LQ?JX^ugA*1Mm~Si96F^MiT`tB8)%=qov`Qr*3N6}5qrYLly>PL z*YO19NA@3edRSvo4mf;R~*{c9O2E6hX;>DoJs;~UZF_JBf?%N5h7Y3bnu(}SP z2)Lg?2Ae4UxGo83mK&#ME2=)o*bd@18lX1HT@In4gmuZg9m6p1@gQgXVlEm=9d3mL z)LN&4T*YCX|m zH@tFlRX)kssM-soBeWbNK~^<)P*O~l7+U;^iUvymfnV`G@B#Y$kmvV@4*_$86$s&} zHXz#MOVR#aJ)BF&wa?t`DwM5|yWS|8)g1AH(4t>3ss(D(@l)HNa!P46Q3^6RAEXr$ zzTwa6X)+AYO&V2xBU>rb1@%1b`Gq&1s-C9wc-e2h)O{=fhl-c#3)?AVu(aE^uj$k` z0X&SA(EBA;;)er~WjnWsNK{~Y3t+BDB zZFpbt=f8d(2XxDq9jzrpfj_asfV)I2PVH+i$tTF~M^|EQy=4!fmXPVd(jLRKm_MnP z@yH4ZFu1mF^V@U6p@Q>xz~b}joxF8IgQfO!(;R>Ra8Sm=ku@2Tv@?Ef|?`jZufFVWG_-UL@mwRvpEB%Mcnn3I$k z9rWgX2rr+zNi{(!sT)XiD3}p*7C-IDg9;ZH@c?1Vt)@c?$&nTPAnTi&J^r0Bs&{UC zI45G|Dbf^4Kj~9?naBQ|ai8ROcs0}9dO1Aysr=~~e!-o~)DGWcb<7jKyS?I?!JZ~% zhvRmo^7P*vJFu6ceNSOX7%(ta8q?N;N{jsVVvLC(b8Kapq z1q?$@fc^Dc@`f5%Q-$-_v4jU)ouMMy2{7xto;l8y4uqmTN(>w4%4Z8PtSlF+9;vj` zVGgCzJ#a~1O^6kXVBNY6DdrWtxBJZFD`Eu$(?_h;aG)CU|pKL&aX`$>YKy@767m>eOcsi|4J@azCMYE&LUG&D4OK?bmxw;1he zi)OzPC-u&FrzuI15GIwv81{ERS2^0r$hMdvmJBr!L*jnPk{2)G)L*}R-du`@PDn5KWB`q4v%9TaKv+HKo!$`G zeN;$Y7l4TK<3>>NWAGJKl_>Rtp z<=eAX>aOK2tq6wD+Kc91`}7j8G->9`$9_A!QbGfiSW9Z@ ztwNY8xqh?to3M+;+G%j9#GD_hvUu}I%YRnIb2pN<{;($M2a_HeIi~6QJ0*ioTbtI>W4=)sV@->T(z2ApXjgFze zaIrF~bnf=+%W)bQ)p95i8mP(y+eE?{GCHvKSAPpS@dYS1wRn5~8Q=IVtAr+>F2WC# z@xv=x*M^`Rhb!^d+`w>Ge7@;>EeZy92I8DBLyl6OH29Bclt zOdais?Z%#P;H3{iIq3iV)Vdhzgs*gkCol_w9uiqvKaOVLTF~msBM`=*8h#^^c_+`A z^0*XU?O?;P$n$!=GrQke$=cZ<-GoA{x}_=lzORB)+j2K5J~(a?VnlL&n(oedw z>5;>+nz~0b=TiT?d_4^BV)wTst;)p11RoT?h6VxkZyf+OUq zT`n(d4w_Dble=ZaMeaI49 zWaH1<>n8Dwd%91~)jKo|-#Up~!YXlwdhWR!I!$BbpS_XFWfkZ_8A{ zcX_<~V!kErP&fW@s56*qAVYp|+<33mi=$uhRgMTBDU8!d*9 z@FdXzI6T=EL?-Tz8I8;SU%tRz7#y$Q6&(YJGrwTXsItEcF?%RLV!Pv{$bZ>ePDMw( zRa>pBU9J}8W0d9Zv)bVTN&8IqWc2=vfXJ%& ztoy9hdE&0LOYDd=mGtDv;h;Ej-gn7F>_zwcjYjYI@Xj<{U-Ko9*)S@A|Ca6jKWzE5 zy?;aswpAYCKcq6{bpCA{w!=j0Tk1iAo7 z{A+hpoB5$Howwg;URa<1{QUNJE7{!}f6*IhEVi3NMn91AN(kNL(aIBxRJMCK;ceZw zW3U&@gO3Gc=qFeM@`EASy{2TLyrqQvD>1PrhLM+mU%X4)KDP@dIBcA24n{>yO*W6U z_cY@kKbJjrbE-i+I}V~FVSp*5dX#;M=Y29!dckeG#%Cm?zd>SHK2&SyzVg36um5{< zgOi{Pli_0&8F*DZ-A!1SBR8;N`mA0E01wfsm2{-|!=s!)nBilbGc;+GAqC#+By}7m zQ*_Tn*TId>o-le6)&Dn7atP1rZX{g(Qh=akHA(|qF~VIw;xoG<{iC5dB%CQIb*|aq z>+{>Z12LK#Z2}-4!)BfPf3sP~0IhLJ%E(if6o0}7k&LO zw0`^N&I@#fr^A?PNJtm9Z(bpUOjpNlNj>A=Iixz(fAMT_dRgF!a@_e%MgBg|aag&~ z-tkPzDG8OCJKb5~F|GS8WR%Wq2#|#(ME~RN2^kbUvG?$=*s;VxoFwrKr$4<7BTa~q zCiCUP>+;0J#0Qk(kmv}EaE}czVEjZ|!57G4=C6#N>(4m%1F3#UbezXv z=&js`++mkF;Zo2rAiW{WyBDr(<4-|O$MJL{2%kLv#YUkm*!F+eFY`%Bgxv^z^J8f` zO;tus^T07h#N(VljMEwW>pgj@!5KSqjt2s>2F1yUjsF(GeD(9l*}gJ|bcFtU>(RtL z2dYleGBUeGzX73}8C6<=*74%2y!c&sW4jzoXkJ5%eyaTBQ(TJ#oO173&lBa;no^ZK zX=wA5va9xClFxh1srp|5xJM!qM;Heb@uGpW=7Z9(n&)gES&Hdmezximc8&UZ{rmR zc%mQ6b8dRynpQ}8W(IF8ahBua+0`W(!SF#`5EkR|$gRn`(C+p&s?{aN@{nklC0{@` z{tx8VTZT5`a18yH763}?s^d1(x#J9Q-IEP2B?4(Li$wTZIvxo5bdj%Ou-Z$&l?A!w$;D)WDp>#K(QI~1B_2v&-c zH{dy1+VClSbT)gwBxhPqtUhzc#}ISac}Ut=_|%r*U<5mqGPLz<_j2KGaklGG`ERs0 zPRqm+0eq|vFWH3u*?>=G9iogyGoJnv_6yddu8umoC-?lfP$S^!s^-OufdEc855thg z@|w8v1sqEiy!ew9pI^`w=zbcD%C^?yPvo9*2Vcbm4$ULn_BLTEAqz@ z)4dM_5Tk(@z<2&Jst$N8(iqCrf39pxHWYv#_Wz&LuO$jVJ!q|d>AYZR?aJ*8xvFV7^Gb#^xAaS9FK#=gPx}0f z(k>nqVA#1~kkPbYBt)5(m1l4cB2U-D?wk)U(mVB7LNnVREE&@GN|6Ljpf6v{6ifYw zhK5yyE-AhdQE4FdUI5?p@rw}8KWzFP&$}Qkh0OKqW_0`lRpjNKZ*(KPE1AA{1W&21 z-5tX@n0SBeY~!6W_Tavcst_(p)<@{v0X#A_E`;yP7EM#Ug4-Fkg;T3F@9Us5U#lDZt-8U19ZVG$oGBt+{)ZxHME&3AKGBaJ zeWDyxR8ktHT-&E(og_}1=Sd-(xLBU|kis%?QIOdKh!mxZse<6H;$ych7xwlqq^SWN zq1VOI`7uWFckrL}r zsm~x^fzAOPJn=H7Zu+rRuYtekCqNkOZ2l-Pc38K@{Mq(*(lYucpsNyjEdGXm$|2)1 zGY`1gr-$!${n=N6Cx$^V9^1OSRJf#|xs@CrUsKE|DyqlBbG@T+=kuHI{;as#&EJ~} z3)YG&Ly_PoV0}Eulq+vz54hrFIXtdKc!51&;($iyy`OXJcJIqB{VIlnC(1&pM#>8j z-pw~Fo_(zCD#nrIC~Xd}wnZKkAm3~kY&lM^u!^+GfAS~o*z^`#_vjgXe~#Afz)$u; znmvBqF{*EFqp6z}6+(K8wsv-619dy`^6?R}KQc11Y8vDd+4}jJJ(djhvdX{jmhi~> zMPZh_yY2m#-mYwyOf0eVl~u0cbF`XXzAAw)D~WPg?F@u;|37_f!h>9jAOM6!CAfzH zp6$KSSwITEz$O@P5<%)I&^g&kVwgz=k5^;o??-cBhe%l!PwI>f0XtnP>GZ3O+p~rX z(>zU4mi%L0+$)-6S7n?qv|SZ5gX#r~Qw6P=uh)Dydfq({f0{xFt8bD-VN~6LIb;?~ zWB4(7*6o!k_q_6X(A7NIAE^1eCbRLA{!=W-? zd+K!VOz_3YvPjnXemUsKhVN4L_rWFNo@}@tbAw3iiB)$vT3)>dCBK?|H+SN|0%vQi zpKZr?6gO3Lq~b!S>z%&g)7!92X+HYUt)1NR1vTnkQ21+r4)I8nJ@Ckppw~vX{4-F1 zWdIK4+NTR$+B{GxK%Z}Jj3+64&xb=}sW}bGfA;JUzPm<8)XRC@v!+#&v(Y_~KxOYVU;l%(E|9bk_j635 z*!nu$+TovrY@7N`h1_l2)oV&zl?zH6Pn&b)B{7;H!aV@I`g+jL|J`W?))iTahgqO& z_3%t>n(`zAVL{epP)fGE!t=n>3>&_RP#tD{M747+c$zd1WU)|aNLGT9mwIzUZ(|IeLhdOVk-z$#r{q%hYy2;j0R}y7q{_;A{X?zh0^}n#8%O z&Q>n#ZoKQ`K+mZb;RkX&V#jpcJ0|+enp82|S*&4B0-?QW&1BtGTL_S8Ej;O89C3!T z`V;+EoK5HrmKfRvmjXOWk6+rMmw`jO92qDKR=oyi?PLdO?+SrejMNmjywFuj1^r2S z;+>9Xa^+I({u}k=6%jCyo9G`3jixWhpS@)`(HyziwuXM9yPG8_4!OIve|R5Av$^NA z`a8W|iiXuMTzcuq!e*p`)mMMTS30|}$0+hojPP^=_>N3vQK!CN7r22D+^NBllh3f6lf@5V{eHDV&9crQLa%u^ zx*lL__W|6^ounfhgot3PO8ouaNKpm=h?-o|FWhPvd23dHZQ5=@|<5i zP9T~J1h{~YGmJO>B7GecS5H01t!C5Y2P`;D;4kiRClQ z%h}fkORjGn9ItXqYQITO@~Id@Hf7q*1y0kQrbzT;iq zD{;A)Ha%sj)^vl+8hOxEvof$H0j42S`)$sDybCcPEkOn#lSlAvf?#GNkswUD1C05X zOV_}1(1@sS$cMAwW!m^r3wDR=pe8ijLsbqbTp_5JxcFBu(U9=?(T6&2xWidKnF;)n z2$uHJQkgn?Ie{;POHGfyl&tsr9@r>a1#oyt{bUO=8aSBG+%zopY8{7ml%2UIn1Akc zs)SZz7T8%@tzCJk*;%i#6Yp|Qo(ULDe)_3&yaI>yqv)0L^c$sa!@L1$P>dgT|CaS` z+FCOuROT1z0L>T-BHF7}Pg`{J0jGkd#9cT{gTLzl!nVRKB_l8I&;1HX9?w>-S`U{g zQ$n~}IG&2;y~aO5;p%{cmA_VmQTD(M+r=OMplqb?%_h(D8wZE`lsAc`N5nsQ31iwZ@He$&qu>)nP>N zPLQ3p*61zIFBm`bqM}it|SL@SFFwyZflDiYbZw0220AHxNkg zpD}utPEEDr71Kv_eJZ~Y3U!{;DdQ`CE7SU=i?z!MAYCE52K*>;zGf)i8s-j}kszGr zD^my?*u86dEV3oi@k+xHh}WC1G5%ZUen14NYtfFrLW^*LZKFWCsoG^- zz3%7?W3LdJbYFUnRq+rLqU*R-LX3%8kDxghXcHBTZ0*m~=v%*vi_VqWdw252)pVo1 z6@qNk$WCR;-xqS)o!_Hk-_c!aO`v>vOZWaZ>9;8fvAi#yg4zd`j_nIZjI4Rt;)RGR ziyrP1>>)Z@ts>(^s~L*yjwMEGJQ%^5*U)e4%=M5AmxIWIqAQRU72> zKi$K=U?}Tcx$@QB3)%wA%Pf?2n&08$Z@ z({hG&4xvdGcboVj^j(_uIe_e|L~M~5ykbu9iR$^#wm*rLd7^DKR3jhTcfl0v_zIMR zMdPK=V9*xQp$G0uO&05ig}|Hzox~O9Olf)2Uf}s$NA>E+jp5|M8P8e zRv|jRLWq=3N7(|9du92WeC0$hxu*>ua zy|UmSF*8{<{&eC=9=tQpd8qyPT8yeyvxX5&Mb_1wx@a=dm2Z`{uxit$aQQ0{%#2}& zni1|q9$|s5Wtn(S-Bf=`%wEhFVp9W0tLfRUz2MOc$6GRs%>mI1G9k$CE7|qc4;{m3 zN^TL0b~^I#J4oJ>y>b$=D>{*T|DatYqrnJl^*r$&dxCi=)(cGvSMW-c6*AV66Z~^j9{2`MNDV;>u#Lk z6u4=zPH`7>J~e`q1+2Znfv@TNaIc5#(tgK;(Bo5%A}T_QtNa z`g6UTg?s*5SWOL%^47g~x*1{5UnC_-CU!I}Br}p@5D1j@-ZQ$b*lWWUJ9P+@ud7Y5_g6tl zf5=9VJq3grI!J%HL1R}7t|28l?hLLl3{(DzqiP*Tc!lO92HzZ$%Mxk(&MmF}m`&fc24G>zwDc@)!qAT@I- zS7nd(>zkIwE;lVB8pLNrELCR;A}x0GGL+PDY@Zj~lBoJ;yA)MH$>DHM0gc;2AX11% z0G$9cV4mZ26954t4G_2OOZm@EZ!uXL0VKxKZ~IaKst9OSYbTPODp&t03XCrMjp;X` zNQw3JBSHVL#t?Eb{W3tSl@6NJ$1*fv9W&G$UHT;f6p&eHKkS0cq3E?%e8f zo8zGtmi+Wr`y4fKQWmU-{eNh0$ve>o>;fsviByZnC*y2516QV`FSs}Zb$y(mfby#~ zjs_jfwic)A99iGw`-*;(`d)Jyg8JIwZgizY0ML@IouVoXz?Z=wd9dDe?$Hv^TL)#(9CgQtH z^7ko$VCBQUb__=>49;E|82-WJ?CgA|>g<6O5>u~BNJ7Z>sIVqX%9ys_^XZr5;z73f z$|uVX{#rj)lzlS##=~wNIG@kVOGRXubicr6G)OciimlpWY~|Q?s?eB(O(cTnNqB%0 zSvplib~l=xGPz34P6rxkks!wsmZsr`j z)%_U3(^MFOM?KPkZ)0m(WumVABU`$SBeq?Rv zAw5+kY*gV>04wpBcd^V_ic6~oN&jkGP#j>H$M0FQujdq{;R+Rw)v($V%MqHmLdQ%j zJsvX2Sap*wkj^PJ z%F`*9c3rnV9mz0&K7)yxOyJ$vK67_F)%(#}1B@R*d}<5!=m~It&|zS7W{SJgroJ|L zJ~?kON6RtXuTR0bZu(B_iE@*QEP`P&mmQx#sX^FaiPu_HC+(EA!dKr{uZ7+_a(X|x zZ!)c08Dui3JHAj-nQJoW-m1a1A~!>(a5%lY{`>e9RhFsZi##&$T1^&uW?o|ihw^Mq ze8!w-xm}~#72nv2e(K_T^Ys=7mzi1|Re+rf=421xzWt6e{#GpB3RkcfybviGggqzL zZ9vUCmU7{`FgM+!=Wy<9@DRcjsQ}D*00Nr0CoJvP``!9|Fg65{!Q;pAoN8t<&BR8_ z6nt50&BWwyl~w~oGh=D4bhrnIMG>V6(53Mfh8v`~OVi7KYRRtb9k{2Yjs2L%Nk znDekM9-s<2uP-0c%f#G+F)H{8Kq7#X-1sS@pb+lsyDJr@9iclM$$=yBLNsN{W4*^i z3TjzN@MhjxF;PC8{@Yz`<+L@ZwjjHM$pr|STAmt@N0|y#b_Cws34Bqd7O~67a?w5Z zzu5ckaIV|-|A;b@WR;!l2w7!*$|ftDjK~&6_Uh9>b|gi1_9lDF$R>Md%ieqZt~U}r z-Q)QlzdxVjaCE=#&wE_gbMq#(`zP}buHbu({lO)o_uid7?KIYHzWTlplL_tXl`;MWeyq{m2$b|Q z70;{@v=EUZT-{7?a8A?RZoP!X=rM#4ff%s>!@nbd5)pBU?IP^fs@7aE&)9CBZf}&; zc;{qSa!B&5)1Fe^SW-;C?ZBR@n!K#66g~nX63PWK*t1iAeF2k46G@G$c@P&TB$^r* zH`sdl#5RQtfQK1$}lu&MxlA>Eo zQNT2u_h=@pH z*r@|__2R52s0Vlub`deTOYTl?QOA|i=%Ol(x#RSg=79QJFFi#A55xlf{Se*?wuM5u zK!b8Kx$7Ltg|9)+b`<)B?t)ERPsj`0_QK=(Xc8eC<1Ly}UE`f3aE#P3^3qX!Cl`Me zmgIa2o{rjS>hF0^5E_m&GNPA}JQGSF7_TTGI^`2oFu~&#oB&_Hcx&@1kFl#h&vNV2 zw1{8Q>2aroEl4Iz8SEH{%6|C#QA_Xww4ATL9dBAp5Ld2g7RwiFr;LMkVg(VZGF6D= z9mu77Kr5L%MYh6_tVf~V1PLQbU~mq)O2&mS9^KUyZv%rp_hf+o{CQt3Chq|8$h)K) zOd%}`zQM-!krR}8;CX=F30o4Upo6?SO-D_>vc892yMgoge%%Gdwj-WVqH;g!lKC-2 zNT4-1)YDSoMlMZ3RvL}+1x%MZdI$-nH5q{H_Sw$K%WxH3K>oHjZH(Z4YYY$<2d{i} z?5`Ps{vpCrJrMoFdJ(w-|M8w@wN(z$xSY*-&2wO>L zWU9!}OLBKho+N3tDhND-eL$Mdu0e_etHS`nP!Xys0xt;#ANvH^t7k|-I3jmWe3xtw z(WuzLW>WGqgUUxv1v2o>^ovTi8_aPD>Z#VElS=UY!D-S1Rrh|CXK|4%l?$<<%1XE~ z9l9ZH1T@C*k-&<}FIvL~ktjOPQAdKU?2c3B_-IbpDU0i1zzrOy`lyfWm$WeW?4*9G zh5x_&MiekOw1VRF$6B<(^U?GhZ*H;tSDipYc}PQ6O2vO)9{U%`q~$?3;tg-Ig6hP- z`byhXFcjO$JL1P^{8a(=Tq3K;@Ym>$hWV!pmoM}dFM{9RqEH?C>2Le9 zLY}(Xju|y;*z=*7KkgT`7Xe;~Q= zN8npoqSpVC&L_Gbe-H3T{=B#Zo7i&+35=MAqdr3yC65tj)_R$G6K{_uxrE$^y^8>b zPR9TS!?{8iq@ow?g)6d8j>ky zEMD}_;p`JE%o+Lq!??lHHa0{yI$-`HPba8?8?my${BaUn_fh$11KlUW42k}oV&F`K zK#BVEkJ_HzeJ;^W?!31dch17wXJMzI$drS(zdTUdf79yc|D3mxF zeKvas;QR^7pgg1oAGXXgB)Q0mY?yO9W+WHn)wL`*%%_0+ZOgdtp zf{|GPLz_!@0|W92$Hiq527CbLr4i=Y2&5opl2ZvMm*NIWYu8f5?kntXU~MkIKHnvui7LtYLT_7U-{uvx+ck zs|R?${#=w7L?+nnk|*`L;J^LAf-bUab^p$^))&u=*jJcpw0ne6*|n!kXHH1B^cBdH zBRygRo?HTWa^tsj`<|Tc0`M%)Z#N+UPY#d+-D`0sXcVnEu&ut1n5hT+0#o5J(eAil zTK6GsG;x4q_du*Crv$i(_VD>5Mvlk>2Ug(q(GojW14zLpu^kT}8;k+%W^&t5>?Ah4 z8xJ^~nT0kk$X3xvlsrjeWo$m`Y8UEFj{5%}7{@34*|3&#PW%y5X+*!juJsbbA85LO zjz17`T>%G94t%@dC8`tb3A027C;M7fDKw(A#sl&vc_lhx0UyWV#v&Eh>y!O>7UP32E@(LpbT zX#wfRjm#oPM5>_x%0wm7w$E(|l$+Pv%b6yTj!7gfa9N*V7w;Ug0=n41SK6AXm9>g^ z)I4+me|`K*zSVk*s;xY)5WiQ22G&o2$F#2iRi|%F@;e3Z!+OkH#AW-A65N2RVEbsw z8eNU&J7NJ6$~kJXQr(-ELG*US*1x-mH3tK>C_L11ub zRkV)r0$>oNAa3uFtlzE3Uwo2`A9UmLQ2Y_j0;7wEx*`81ocS-_IYCMAOe_h+I~F{Z zV>E_k0h67+BF}X+y1&0Ly9QizHh;|Eu{PfVw;e6Obo{5kr6@i;Gux5ILa|5EUhyZo zIqYjJJJdyX@@{|&|Gp!C&Cx=3de>3`Wq$(4_Rf4!!yv=cde{`6sLuZ zMFa4QY~q7sH2>Fqisgh?;gP=0ldx0YO@JiV7>HtqMA^Tk^YP(H`$HJWOvx}_1|U7d zn-(XrkTbS^@woG#E(V<`&+^;bI%wcsX#+5rwm8MER!$a+MA$w#nD78C1jL>0hXsMqNtqn$^OT!8#AsuTv9p~{IN^vy{Y%-r$z$)Rz zPeN)9PrC@>uxmC`lrYWDzz0S8XMjrMNv45lqr*5oLw@PmGbBP)aLDwr+pVuakZZwQ z$0-^X4ZO-v!dWnaAa^b3)G5SV5Zu-D`55f`gkusbeHQqD)>1O>C-{_|9t)?Gcuss* zP6#-GnwzTVz(7LbVQ5q!#4XKfU_>h&&wU0x{|4FLmyAa2|1YXQvI(g0l`T^fshGNAz*%6=LVX^{%Vc?M#1eXMa&T%d>Bt5)h zsh3rqj81xTG*sZpujnTLPi_pTs1qrN1r0|I4#FYabI+-Ou=oO^i{5{}9}ZO_ch42^ zs$mk6t6=i5sU_0HwO9K4t+#t^lKp?E71;rMRTqR3ju0 z`;j|d%s%{uCnCL5cf30pk58}edk{#XT)2b|R9!pV1fb1nuV+gOea#vBAzEu7a6l@A zGCN?}+D|fQ-UR0JOEt|20XjyaW6A}o3oIBN40s6xw)V@hwY~wLjxgZ%Gbzj|~F zMhgs$So6hWcn@F@5PsP#fBxNyoIt+EzI_?cz4~~f08rW=bR(YNyyvme{at@xDv)a=X%PyRy(6RRf8)v#Y5)F02ZBcIVnF=< zb0q)ti!#d76q|y1vWm(wC(l=F(PhPD=6Hl>`y=-XnNpbe(3S`TtMra0SAYfIUldHaNz5$YsG-?My`avfKHkL=OUZWz^-*DUxay zCsVP;4im)@DMm&DR*K6jmcklRiUN%#b{c~`zUgHJBMvoKF~a;y>uLJYAaMiJgoR~O za|Y~4v9e|gu(GWcW8TfiS(SR_^lEW8lrYHkKe-_%5@t13X+87}KSo7$_$6)H{7~rM zb$TClnEpf^7s!14f!S3^pWMg8X&0=A(jz0RTDs*xZfSj0-!S+Mox%m6OX(LxeER~_ z9qW=4O!Qr&ZYN1tK=Q@1lr9eRS$O0Fu(?N#{C~R+Mvi0asebbEb~0 zE+l-Dk|my#791m-cgfa(=gB3#L%jb1a(EP}qv&#?hK$^e?UCnJj(ma9jikIKM4+vQ z^i72(%Jlg|IdVn@f$S+hnoBR_(w-kPhKCFnV*DOhKQTl9K^-v9_8Qo1_Lxk87@Z@2 z90DQ$oB(G8ffLXnLpjYZdG`prw$OVkCjH19!nMxSvp>V%?hbsn%1vf2D8!^fYEWdt4Q=&+t*fUAIL zKmL_W>sg4Bom8nq8d9$tqKXGrhh68)8+QyndWK7|wCe!k0V#rD?>#Do`#XR=m$JV< zdvDjj0^!jAkZ})n5WF|{DBmaq3bw33e!@bLRUw+lH7Ea?BG zLI7YQvojvr0=xDjNdSoSuSZ~B$i1;4`&9!AD0Q-5NdTH81DDq*BFoyg6pin%=N{!} z{t*@s^^@%Edy@m&D;RT<@+;-1y%3O-LzyU^TNS@CLS zbB2vtxN-gYQCaWZp7+)zGPyJH&PQRCTnfyf!`O@AenxJ*Emx$DJP25#4PAu3oZw{G zM?fRSnCLvvy_Y~iDBmW%fQCv(nYtP+9=W48a5ppWM^!OTbiw)|3jmQk`Eswf?`-+U z#hdVq$TwSltN6(skTg#$+z5@>=_izBbK0!!$CEwpr2TUs`y>*>>Rb=i@UR#V4`6NC z-1du{Nf}TTThT&Y23|Dn$}#B$lAwl?BUAXNv=00BdZ5zYuvC=Ud$Udh=ABXeBTBYA zjDJa6h|!RcU-_)v_&TmCB=|tLLB%1V#F;Ym^$OqS!}zi6qItGv%c1-e43>6-t#wmJ zETx@|u$%cdLAyPrzO`PmoHyFs(U-1;4|N zRRlQ3me^(o7-!fcG~>LvF{Py>@p~2~WxOtx(=2?4{Yk%Iz1Ussp0sBt6(6tn(ca)L z?>g==O1`z^-772G*k-etiMKpr?1)TQ3L~h6;rl)cSvMc5|8{9_`33r3NKjS3{?a8t z!^^`6skSG~RjkJ|!nSLFD)3BLuj{2Pn(KLX`c$IIYW0$wt$e9h#1u{Bxapdv3#6J% z94_BcNSVdE-crU9YB_7hX5O%Q-vj7|S|#d%&;t);JyN8!(Zvxpd1rVeOKIKP>cE;D z=?vTu^0JSvM(`Xr4rD&B51?CrmY}=rehvesfGEz$M`h85j>mZDZ9uZ^6>Kg#bD>;E z_>qPM@FDsiiZz_>)UWgGrO)q9>xXQ7c6D~1VWt9-&GZh@fk&-5b9t?KVIl>vQ3Jo< ziI`{V9fsjOv(rz^uBIK-Cu4Qs{Ss4X<4eNPvqJ^wCSLEl8byd1Po}5IfySr^-QhZ+ zF~8ItaG#AH%5DqRek|1P4Qcdxm)q#!96d%bo0JUDtUDqPVTeb=oiYjGD}z)vb6q)f zW5ql9nVq0^v~Mk5AiZ;(@7&cM2)oRWbJwnVgLx(PO{nIraxJ&xO)`xEXjo~F!g`|V z6NEf4K4#QS9plv?%gMT*8VNB6UZHmGzI zD8#S&^M|85f4-2`filn+_A50C^}I_h%nw5OWvkE+5>N;4z}O%Z=`7Q9=2ts^{@S6{ zl#7F{<>{nNhic%x;VymjQV~#8s|HK2{L>3BZ$MEj^7`X87`6fem$)M4W{^+&SKXHL z2R8pB7O~TIh0h~`>?%0(%GV67p$soCef>)}gsvRX1AY&gGhmlDFs9xUxb>*(bRi|N zK-oRq>hJu!mM+AS!X?)Fh>VIXs?QULq^_ZB)ySB-jr2h=)FE|lA=`4XS1fu5<2Vop zX;1EPaYPf@iV0}T-ck&|j`#v9S&_>e^Cw4d9$rXeAQq~&S4C?$Qb!Z5b{pz@v4h|> z5>a*UvEtp%H9@v+E+`)Xo*u=Xn3{BrBHc`w=*tV=6J@K$Hu9zJu>R#qzuwVY>ADvpu6jh4NMvV2YE$-S2%#?Lj2=?k7zswv+)thNQ*Y&gkx~ zA&RZM!*;FqB)CKZKs`hw)1AJ)`U>X|6IZNniV1b3_ z#LVT`yzndC>I)(I4!hMlYW_9A*_pyuLmgP!`?uk)WscM~Y>oCRb(}LbkZE!FGI27| z0bG*iIgk$65lSo^4b9TXxExQ5!7!{niKVyd#4LMbMlkF?P|+I7IFi4XN6_&J0}X5= zllw%fqy=`5d0tTj{issA0Q}?dcN;Mv#?lcbm3!M-iCg{hFWwpIlaRJ(>`J0Kym*MS z?-SvD_!E8IB%au4N^8wO_X1F{Dkf(;a+$4(usyb*Ij5)PBY{H=9N7%6kn5%*u{M5^ zW`Gz8vUn_poaiU9N(fRG@3Ka7M*0ZXEOXYOb+HL5=W&z46LuW}^t)eLn>^LkHnNztYkQ zsLoc(Usd4wu?Mmd>NcXR9zm>HA3p%@UxK0#^TdtzEv=;#C#Kfv86Ce6^E-9xQ)_su zY}nZWAC3@iQ%@SLg8I^CncvVVBa!yNu)X8*+jl=LPU|O_8D>==;ec$8?$VC$R!46Z z(^%n3^gKn7?+<#WmjD`Gk;eHY^5C{d{BvE`HQk~yAYS=a@z#fEx`YYwmH94p@l!|R zoi9?Grvdn9{Mg9o^?Hkxxen3o2+K~&e6M!m%6{Bnt!SXexLx>k^+V`uR6D-n&!Ym^ zmp~1#o{8z#(~vz3%L1Ndow7N@Q7~ST!Fqh{>c;6%$njN*h2=l~GLU}FOFVOP=qU^a?1-d!hAqEPJ1x=L{n-}aBOw=+6h$8Qt+%9b%g>L;Ei_uI-{sk?e-(5E z)03w6(vPE5s`LP2bxVDK)3$tb{;i#rpmzKMPDo2Pom;ljK`MjxS`5(CLm}87mJ0Ga zwM?2k#T{Dtr7^X~=AY{vg$}Ug*E?ZGqhHdtwW*`x^K4dIw0DuSk1$BQL|96~RRzZ} zj|uysVsRrCe(gH0J!kz7*`@}yAoUiOjOMV=_Z!9|xn#b( zir(CGgIB(Q4AB6p>&RR@nb6P0S6WDk5g7kA5HnfTYhFw+yn2%fsz!qd@JiFhx~W!0 zTZ)9dg;~Zx?^3eVfrx^%P9&_+nOeJoTFP^z2NhJZNegInKXNZh*ovwVV-Dc+5Gn|0 zPkHEnWMU(zlya*qYoUp-v1et?7U0)52aaa2Fm8`$X0rmIlw0tkkXhHFe%JnxGF7W( z3oF5=RsyDjuUUa_inOYAE|WEAFV88qHetrE5cOuY>|<_JYK+WFKYif_ zlC522wt0(ehcRcifX1N4T>D61ectX=QJ+!hM6n~wQtML<`}DEOweo0>}laXL@aw{s*wiWy=s-oKrOVE zPV@EZ+&7cm-L|qf4R|67qm>FY`jDYmXE!A=Ioec=(MfWK7me~3{T@I4UVviE=DGTt z8{gjB&tJ2=9Mt>qP4A~SV{J^1W_318nan1oy9Q+yhY~J`SdBfZXg_JOQ=KYU@kNqd zGK2(_Fx5qT42amHorJFZSWR0a;x?-b9nY%k;~Fa*RgKfiSK!8}<=d^1OPeIt94ZN4 zKdo(-%F{{WhHQ*kL9mLMSebn% z13s}z>U(yXZW?>2t|vZnx2Becs!u-?wAYiVG&Pwmx8V}K@0NjaQ<;Vf0g%!7>=uaJWL+!fiTmp=!5B$f5%H0s>w z(ZdOG&e+Cw!d82gCv3|m`4L#CoV@v$J$l|ay5MX+NN1T|!WLiVQsh#Jri*R`K5bfH zUV4i;d!qn29FX>Us^K&0+>ao6p2&?)DeG*{i}LEm;@NPn6w zc@Q5QhS6Tn0I9v(oC{uwkt|rh2_+*u#5oy`7g>1hYj59=U&`j5FQX z2~L|7AD^4grP~dUv(Vl1Bw$!tWw_3MSf%-dMZ^7o%I3yWyUVNub|H^$Wdfsnb)&<^ zYN$)lMBnG@Avx1u2X*J9XN3k4&O1%%UGCM#u5@bYWZJa9O9*1WQjAW2KJQGcAT6<(0>!^ zzkoGvj;2js!xvhtci}3IF5V7i9!-5Z;QZb`V^Di;rx@!M;kM<9VaN(T^WLL@etD(6 z?OsY6kyK_AK~+lz(_-vUdF%Aysc(E;Pe%15y}kH$(?#?&&7c^$u7&p^1V{s84r8*; zOc=m9X_M~bg20x~a9XPh@blAKuX$e;HS23j(A#lS+8hj+rb~1xB7AlB{msWTyCt0@ z#+X?yS_nP-Y0f(@W*)Tm@S{qRg=`lnmU}3wsT9Ox#cbK;ZH9XJ*)z*7z8wT9ArV%I zAdaCMx)(du0I~9~>DwII(S5^r;p?lC=q(d3wt+kfc~$CZbN#^}!(+*Y^!fT7)xEV4 zIr+vzqjZ$|u)zXZW{{J~CGVaqd}8Mpq&Ize>3R+=L7+-jfG6vl-p=gh7gb(3=?>~3 zSBNuNWV6+HRif4G`E%;wa~|9-lTRkpSE`gO<@3z@MyT9##~pP(dC#3+;@o}el(@Z2 zXhkC)@|4Ad4XAm9wh@E&t_bOM@-%wRDbn=abSbY(>(lc(6;z<9_ z;bDhVo+#eq$oW%*XV0HTB)W-%4vZVyH1#8ha&Q@AOex-rwS1c$FRopVc-Z^=G}^dB z2PU)LdPFkro@$Qdwt?N?y3Y2!o5%h1F%ELr)3z~g{mWYUF*#F%^Z3XZdhScIK7 zABYXAN}cyWZM1)I_ty3@mUjI?Ix->IPTbgGKITpD{epy!j~Tr9!)u%m6(5Wppxygu z;O4B7U9C=Y;aJ-HjX)oM|7rE$nBh}^P_o;L4E@-lc6Wl!RX-<*O(tT{) zlYN?^#;JuN>uoCw(gu7Umogsdn!OlZ^e#5+@xEG=|G@T{%W0P(Ot+cRRZTk@yi^_> zqfWj~5}|yax4x(Pnz*m8S`Ro0va;i)G_d}~^a&sTqohkpQMir$=emIuzHr^`5T~xa zn}cH?q}=uOJ4v*`W+8~$v_9O61x7#SB8Qtb1jn_DuNUlb+O{(gwtjlGXAK;V387r_ zfugj!!4_vaf*c*iKNo#B6`TC_Zs7WBC@b1_gTZ|5wTg5Ax=GV3=U4uc; z+=*l7_`RrXZsmt*(}c=`wDCs$Bj(YsEabV8-w)yBTMekD0fN5nPU{ZEh!pJ>pKI@z z#*DPLSwc8Q3WCwa#Xg1RTMcsWsd6bYk2F@>lmc>@eYN4j&qJ_*y#(ZHbUs0@*4@=6 zwe_u00G6+jtYXECgOEa`sI$WTuj-rmCEcogayil&RvtY|UClSvKD??r%Msu}Om`qe zf6N9cC*SMamq?K0ow3p&H8S1Nj9<;J>){yN`QjO;l_5qUJ$H)l?D-1P@>w?Ts`P78 zG}j59*p?1aHn(z`mtSHzh!fyxSdeXI-yScnhz60ZZMJb|ziZ_}Qrdi>6<$$Afq`9@ z2sTK7=p=5}{kZzdICLDiK(zBjSxz))*ncqK84q;mcbYVC8F`16>tuOx{Lb5Uxiafs zyd(}Rk9M5tL9Y+Z-yul16b?&i^vkxaI-HT)f(S+ao%5s}(UaPXPit+)op|IEk$evI zK=~17pHV<%x|5{SmkI!Hy`P|;r!fgUtUra-AZ_Mxg4nPaKge-mM#NW#igzmZ{YtlY zw8?1uULkcz!Rp+-ihLRCXRje)_c+15ePIWY+-nfYsTHidw#a&OvqTpzGhD5FFRDoo zY=K8q5twN4muZ%Vgc4GxcO}(uB?xS`vBln0?h<^ zd0@{-jWHwpNNlqcy{UP9c5UlkI%p7ONbNmbn7oS}O9u!p&qhRWGIBU+#?HefigPGA zNgc?b%&ZF<8 zO=8>5=&hp|B5iG`tqp|-Nwg7hlmvlQ!u+-C`a~Se1eMuB!=K`sSpj$hfe*9EV1`?e z?%{l(SY|lG-co4VSP;JOQ!612DJvYw$+Hbpe$+g|gBp8Vu$VrYx^U~IYyeCFEJXyC z8)NGLb%ia@gr{iB((lZRI~VD)q=5;O7P_nwA8?_-VhI$N#=075-qv3#xJQW;F8~mh z|GAgCM}YLdy72G>d4RMh*$O8-=3n#w^NxBE0$iz(=hbe%N3j0?k zt{MOMwD*(R@)IQ5;DGXal}wB7iJrx}!m1+IswPv^aCoKys+NcQ31q!)Mv_lug3|n? z_#g9X$&9B8|8c&7JQ+y%qMf;o{j>f35kcCvsr4mT!*wNl$4J1m5jIRf5HW*0_qu&N z^uCT~8z@RH(l_m9m{xWN@m-MVoTEsAoPctS+GU2NwOaG+f1ai=A_+J+>wNdcQECI~ z0;n*6`DSTjl@)0#rTJ%5qJ18+?Bsy7>7XeQw-hQ+CNZ4Dic!8{(>;v(VeQS@0org= z9}loF<-{QVgT6k&fa%l5ZD48CL13`2?zgZzH=7F6#-_l6A;MVd22|!@P^;?fxZA6)3pu{OZ~f==>JuD+ zbE7V=R&G*ulsotE5jJ-O#g9s~j0yHcSXGpt_L9V9gmO@?OCYzH3D6kuqTwmcL$Z03!{dO<5xQgWObHo1AZuwO;cEi{_@*dy^4E zC&c6g2M-Ak#{p^Adt|65Cbxhr%tY7x!^HKGxaN!}@{?YYyw);xH#bh_d(2s{7fp1f zk`t)v2@JoCYi4r1$BGvsgjGKr8JJq3vMm1nbvZmD!bPGg*s^R zz-+FDXLMYKySv2SxSB)u=>R(*D|A=>B-b2~eW^RSH#Ukr`;%t!rv>=0+|u2Bl`Yir zIXB-!Z70*JeC(`aPHj%~k0tF=uHxd_9Ezh7lYQWhwU!)BH@p zbA#8Ir&%Eai^M;$d%vEjt<^rotJ0f@6{F}lwmh*u%y_l}nu+n=rdv3|W^?=Y(n0m% zsNp|d{9I#s!XEmV!;5Acl-7c;L9+p}*C=di>OiH{%{ltrjLubwW#jv};(XTAkTkG0 zI@;D1e}6Z_=glgE@frz~gWPOP3k^Q$nuNv_p2i_s{Lxf6>76zmuV_3FA{=-ryDCE) zsMclLhb}h6PI-I^j+>rbZz-ipKRA~4$j<3mDs^I>=*)kbE3lR(7D9o64bM+JDUFE; z>N8yJ{btHwau+?w+J|a?(Zn;+>u5=in$YS*Huf_A>UNpwT-?)&?stoQtP2n6!F)Dt&9;-Ow2Qo%$EDTMX!^Pxe_KK{ zxNEV8GHtRJ|C35I@CwXx3~{KRUD6x4@H%iK=3r;D2i{w1A`v#69oh!SPxlmzQ=23IBc2 za^hPjNdljQW(+uJN9?cdJYt{p)ng%rMD6yDR{w?uNQ)ypJO~2rDgcIbM?sZj1t@_s z9%AL-q58N4id_Ct)7l_K+pH9DKLIMjgpd@R9G(~#?d8YWvVfc|^I8Gny$W4_k+6OQ zM<}3o?VEa60fmWBVAf8^i-o<$r*#yW{htOIszre)A|fS{$CeA^#}$P^ zhF)O#si20bl)#`y?e?AL^|v~rCUcJmRS;eTaiXifzK6asT>+aQm}3V`o6x^Z>N!j$ z^kuzW|063~AXTGBwM)T`N(Os{CoTVC-Pih~ zj41X$g3#Ycb};sIV7>f;lLG&5Z<~P-jq2=+Pp|(pu774h7XV|>76SjbxBsW+|5NjS zma*fq^*=TLpPK*C3jUR|g8$E(|IeHMm2mu7lK$t-k6YZoK~2Bi`ky!d_ugF24`yX$ z#l1NZxd8UIF8_kb*Sl9_+?D>G>A{`5LF^1*e_Il}=`>;PIh#iJoz)&j0z$%sxQ*^# z%g8l-0A#&Qfp${1VUJL@hwzJC8=ZESbf)f_o15>Ee(CP+)|&0jU3iXPK(^X#l#_HhNSVma8~omJm|Z`E`U&(waH@T~u}LxB#t_;qrdR#eil*iH`M%4+ z=iz9mKoX<&3_>)3EJdcIq$C>gOs9S!kL&Q$sI7@VTImn(17Ugwp*7x#vI7EQ8@=>v zLIJDUJ(kdoI*}r^E#*er_J)k@`&U4ShxaBenH6Zq9d%*#VkP>!k)R({U|65T|KoBP%2- zVS!`XN#z=4go$y*-_c(_{Olqvh>1dnqknCKwa+%q07UG4j(~{hvh|f?`lfEI;SHLSFIghU4*7(Q3r8;w$gT=Ll>d=zCsjpLO4Tvs8 zW?y|!*}=AmzM2^R&P&!e?P=DI_dh67W%YiO;q>sRxXH{wYhm?~Wuq>=5`7>ELgU*DOAD)^Idva8Q_CH#(4b@OE z-G5#mP_!Iny)&hu5uF*kzfc^dH5zscaMyHQt1W2;8i zwagJ(cCcOYN^)6U3fLea2->j>egpknfaX%sS|Q{0+!5a!DH0Y)@rt1DD_)-OfI%aZ zLad%kuOhbUO_h-J;sB?9=ny?A$NEx<(^L*il~hf#o-27?+*R;Y(ONurq5_1$@wQ6?uipyRKRA9huQJ)2QS8<*Y{DErE-EW56tU z`huyvH9$9`KL$=hGv8OB#sB?j%|{05z@Mb5LS|8=Hx`|-fGIg|GJYt6INE8eXP^?{ zEKw@|hr=0Rz)sQmtZc~Y>FH5O1?2-H?czY7DK0MFYtffO=;kvX5 z5KKV3t%?EB=B*kKx-L<95D~!huybbfriOs)|KhW=TccQXF(%lu+h<9Pc6)@H@A5d% zKOgskVdA-oJu|l}dU&{E2m3d`1R+6t*##{l`K#q(53fqc5eoR3CU5~u;xb)6rM{LY zvU_R#=Y0IHFJMs(p%>kyoHkpYtaj;P)|!D+ORH|5C1#zrXF0wH!109U3i*5~rXv#` zqdIqNel@lthjHhH>N)ZJt;xwrw+}3Ol|Vzz%3F-Q5v~NP#2jlsjtCURef`5Jcp@-M z4;d020S)9_06``%olW`;z3Sk{wqiu|_4P3WV=*y3P1Ne5?ajmPxEx7}K{pWmd}XSm z3jBZv&g1ncT#y|u)H1yd-LsDQ#jQHbC{~%4d%=|m}3DJ31Py;g83e`+->lGN3WbdQ$^e_ z1x#xWI4#wRCLxN{cPVwmo;;WN0kB@K04aFJ+s(|(0KX?CU}oO#ahYXv&wp4qrJ16W zLW)8q(@>s!W5iE~Pce66ENJ+XpCrM~vjtk~XIGQU;X#`Lb5mwuyw zI`qSc|F-1YZ4iuTSYTnZBcmY=(k2Cx}iTaibaZrjrXD?TRY6Gs461n5Ss#e_e22d(75WwDW7=wB|S5!H(mK>5TT^bb71nBrA>JWG^>W(?W};MM$iM-w2aj zmMbzZRRYqwG=T5B6hC79@ji!CgOu=+Sc8=B)Liv|o$s*CBA5JP_It4+Uv_$M76)(; z-A?Lnwv+i3QXUrg4J=^yjBwsI+le6RAfjsv9kD7IDWKWN7c=Xl+}OG4T|6Ez>3{#4 zSi_*NdC5qI&vt`catG96kL7z~scJpe1+|>V5BBEFB3C3FVrlf`?Xg-fS;A~=_JpLmKs#ntwtq$3azOuU4^711f3YD8apebuYH zQVT~LS$vvdNJy|cJ}oRl>q|d6-t<=?Ph2+U*#@h<@md?JkPllSw^$kr{P%K`*MfnD zNN&_~v&8hiLJ|q9NBJD}OnC_jhwm+hF9?avF!Bb5zAJjj6 zcBd9gnCOj{*X2I5T80nn^&A7e;4p$~*rXTX$e#dT+ax~TY~}$Hp9WK3w!l|v-Hy7d*jb$Amd-bxEX8Q+DlORV}n{CvhG&k&-JMeg7j zHz|H`fbpSf)@!RNj6{Dn)AK!P{rBmUEXq%lA!yo|RXF!`M zx;J5Z2SNLT&buezNQS~5u=ThhuGqpTYkr0KlNJe%ikT8qx}CeQ@24FW7_vIaXUDaP z7W_iDKSgym^6mAinb)(WEjoyQnm%{=28Cky9*7S;{onX@Xx@K0o-Fq4LKg_6d~=WGZ^(qp(I-cG2Vcs6=Ex_xW6IOkX zWrn_25}JA-mtK@vm<8tjA=>A`omXp0oXc|q1A~od(z@ky9GBabv_04R-gwvnS1`QI z98$4WRs6-CfLqUDbNTgNRqUWsu;5 z$=0~@PCrf|^vz`TTqjoBT+iw;F*hw-Q5fT-$xu>vaL}p?&@}em!1@fZso6*GwImL8 z_!G7Q1pe<~zAGHx^DH(n^xnGf?ApnbXQi||PO!7JRMIi_wms}Nit z{4u%tAUMbE)+?9E9(qjKEl&(OW0I=Jsa0?1NFh?d5Q+UyRbHRajyYYaEbWnWO_Scb z^MQ*_`WJhi$`2F6>(8E0R5DaQbBtxjKR=8#m6WZ1!=S)>#m$qW|0Z@QezU?9deQmr zoC3YZkcIc(Vir{G6PPN6NKxFRE=7`WS2=CFZ~+J6aKqf4m!Xnu-BF9w=@Mzw>B_2! z1kI1$Pflm4gpxa`O)%F8hn^WWOgZOUfQQyOk*zg@;8g919)ikESgn~9OwppWrNm|X z9e#GGsN$2TpB9x;jL4bPlA9PpvQ4B)z#sX=^jHiu25Igh??}$yZ6_VpUe;?Gs9e_x zP_ukJXW)9VZKXqFKueRXOJqBGzQ>SC^P}zV#yE$^6MIK%(g%s!$jb@LLi`#R%n_A@ z%hzcyGo5|5hQG@s*<&@}K)ksic$;ua>n;n}j=nC63B`56kW5V9k^cUIANNSI~F)Q5$WA9ldr176oMr349V~c87cLdeJgWdYmWYf zUl)Pl$&lUh-|(yM?N+^3ruV^2I*Xn@R%d67qqzDL{$Qc==Nkwl)ens+5Gg-={;G;J zOzBV5;qU`~~CchY`h;dUt^x zhv09jSe^G6d6w!}+Ke8SsYrz4)83(dLysbm?h`lmA=!@)&q(vlU3=jh)gb|eHj;P- zSFs*@J#79Yms?~n^VTi7Xme5o??L?y>*vsTz#l7QEEh-Jn^HCku_+&f(r2`7ijZ>$ ziYijwd5Lht;C;$T8{rf3$JjFfkiAjDV_Pz*#RkW$xeKHw$PqT3 z$I9}iy8FKAUK_R)w@f|%+d!3XpR7V`Cuvs*WTZu@F?jK=*e%5y<-?p9wZe`2hMZkF8!G2e!}!Lee3$ujTJMjXYK=R>liLsY#$_F?nMlH^YLE1BFg3@;0C)NRp2+Osexouf8!hV z{BG@5bj;FfmDc=Kx~;m`X&9Lfj795O_ZjLkT&15-Ale&pYFL`N4^Z`^{WIchV4B!Q}!Et636vH6q|@pe_b3i?!E0L zVHXlx{g=G=SZ?E3TxI6G7k@sMWmBYRTHEUul{wG1w-^)Xni$Aaa#zmT6V%CSCJDWL zS%asnYTHV@BphL^VbG6cPM8xKfn(Axic?Q6^Z8zvrg}oxJkY>+n-?k85i%M0f)f)U zTj|B5I6No(A&CZAP>YqSY%>IxDfzlzjK9J;3ME0-@?mwibY%)Ls;C-4QvAk2mPYOt zAB|=>O`=XssY(o{RtbfA3SzhTG!iQ83nBNo(xm}BY=#FDdCV(`EZghiS!3K?8%Oc6Q zL_3c=t)B>8D&A8>Pz!;~^!8-0d835d8>jVv;_V7!K0E@3(a?dt-L**z9bDtEuzP~~ ztku%o)dE_~^u^(E8CtIgaPEtZ5vOB@r>B>}<0j{Q_SIIC{c6*@9cpid#F_X36Z#pVb zvbBVbUaQw#N@A>c@1-;^R=dAIy!28klk8o!5$&+swdAIBQ`awRm}u4)`fC$Rn{O3R z^W%n;8~Lf=;TSWu<4YAzZbWc?=YE@2w70vJ4CW>i zP2su&b=kr_cft{N+-~SZwYa&|C@n;sM!7Ay#8yw%)0yl*Em$@NPMD~ESM^ir2+@WWHb4BuicSUYaeZ&ZVaTF~wV_Ct zMz=NH(Efv)($|0l7cJp?b+v49F~}6eUswc`dYz~YTeaCtiqHfU>cLlgD#ONj_pUZpJ(>kg=SQ;|TEi~+&eA~Q#0D3ndANT+ z-KbIreew2UF5cHWlNGFh!r(6h6P`8AXA?i4qpQ4}y?HMui-o2W#>68K%b7bdn+wCz z1?Ng;uA(<-Jo8s)l%A^nmKC^oW;3?OB>&MPi|4Qli6zc2IdP1`9tX!!mY)My}ty0Yv}AzwGzZn}(XOm{2)~iie82Zlcj=`_DINUg@vE zeI9Vaa?cD9FgUc`v|lm>p~+Jj8CBZO63(0SyNXFpn|Yb-D%YMXK8w(#?F7+3n~Jt4 zTVQe{C`91c^(TF~idaxkxcp6AP-4giV#x$6(&FZA=`11^-Mc~AQ4Bc7-F6NL(n~nT zns3nuJ}zgoIV93{hCK>oa@g!nuadrpAs-^R)pRy?SUn_vvDQ?M{^B^3wHR<`tYBROPVe6eCHyRD89k^V`el!Lp_)0(l}#Qr(6nMnN(_~P9BSFl<%|drP?f3Q`e_?q-cL&z)h_y!^BwXF!lFzXPw zVzAGef=vI!p7wcv_@QycHSTs}t-W%DfQ~NU>{Lw(h!O9fW>N71U{09X_U<_bl8l1t zBQ}=ehqnTsO9Yo$R;Q_--d-8re7g4cVW^s5LMWNquxzaB3e6FrFZt_z1HZAuwD2B+l~ZSK7Cb%`43X$FS$ zCOX27&s+|W=Y+3UIuu0B`)$UfOmB}V$)?8LQ)p(BjtFEkQi$GuDv*K34&t{5Gu&6` z7eJCTDxo{RYW|K~`RC-NV2M&)5c_3jl$zcwSCvteOD%n0ch50#(ZgRxgbO%4qv8OS zU{%%9F>p-f`CTADweC>DvCXPJt%@We{Y%C<$~SZfZd~vD*UysLGx?1s=g-EsUrFJ) zG9JeL7H`uC9hp$+>ReyG)y$)^kCJZ`Z;6+l5i`0{=k~3nL^xPsd$3{yM1S?%*dF_F zZG*@ul5V$`2@B^P09x)zw6UPk!Ldm-m|Hp|s1zIIJ^tEfy< zQKZD`;u@?rvLQzrnb1SeJ!FY)g@DV_7{x2Pg~(yKIjQWTI>BI@F#5Hm&%P>D+~o=w zYXeTjfz;==q6!tumNeBIN|y^OxEP4L@05;#{ELDA_&nsrIH=8moN6Y=C^uGxFtm$@ zrw)4u^^rVny8VHjX&+sxxR(%pRZ_oy?!XBA_OF^p$wYHxFun0Z6-x9ok}ub9EXZH= zx;cbGU3PzRRLi0Rq@{~%KZ4Wd-eV&~I90t^riSxo{7AP8B~Ty@pQm|1tI!P*JvB|ETl; z(hZVIH%JIWgMc929TJjK(%qe+bT>#yJJJqPf;5PLbV!3Vo@;!b_dEaf{ok|JS&PL| z)+jUg?0a8(|7xm-MWBHO_>AO{B6d=+->p)i=uhe`4zA92H)ZR-M61=K*t=jK$Zo-Z zcyH#Y5N9_ItqSYoyNdb#emr`D`tQUMBx!h-H{STI^P-pbE-4`)5m1iU%rrmwHV^%Y z*RvunNObfH>Ley!N$p665igu>Pf%INvCKtF%E%ZUn*p4{oxv|F&h`4Bvy%voidh;N z=V%&fUfl2EFnyx%-m2_H*}CwjhtJwnVCcd};w$M!u8Pda4ZPU(VY_`hWgpkm4Ocp% zA^WA=@rk}?JL>>rAvw!VBt8gj+xxv;N0R7`>rYX?Pdg(YMz9hPqj%%Jg7j!3spUbW zcr^p2u?>+#2Tw9CmhOJHsDONtl~e+Tpgq~>q3A+SzIH3qw1OYghR%D_Ms6dm ziOkX*`%N<@ZWdOL-}^55qxu&2`rGckI-An{2!>YCmUrMo9Yx{<#!Nq7Aa^DsfMJim zPxoTS?rp4`Nk32U8{>YC0mWG1d_+y{9(RP|RT>ImYeUc@)IVO`%vvV4;Rr2^>5oDK z%3AxEL$2d2Z=Sjw^kLQap6T3^FYcYjV(?q#dH)PuUBzXkfR#eqj<(Zzl9O8e_Ea;{ zMhjbL$?pTvD1C+|bDm!V5q+;REU}ARF6{QEpzSj`>MCK}dEaU{5xpvNk1wueJga7D z-+{|6&9YeV63OBZZ}ahD#iMuZw*lufW*kvA(rF_rKFb;1q6XE%9|5V}8$BNPg!Ih& zf^&Suc-}xNjc?d<4|ejEN+Okf)x0{&H^y@k@LI%)?7V`0pkhZV&6R~M;rAoY9r?`s zqMQqUfBm$UqO<^*kR)ZA#=z^n7ExZB6vbHQQm40p!ru7!$828EX1Ld3N?W%Ng0_FZ72#uHJxEqm600)c^ z4y22D5YS>38-Q_zYOuw!i#^}^V9D}mVR?)j6H_m>dp-_N&XUzn)bqQeP|FdVs^3yH zu8n{P4quRf&u&#k3F+lo^^)$QAACADf!Zv+V(2DR8fQQ9kERf${oh0*%y zhp#xNv&WpBYl7OSsy+2q(T}>Q&P6|ixFA9YITx;dnb?%pUjAU-Fp@*xk6<+8E0gp7 z5=}O%3|&MkM4fKfPghJL3Knno8W||YKakC6l0P*Z6<&=~HlPi*A-B9gJj&6&Rfy|m z;HA3!gMRT)KZ zzJ||*W&kzfiaC~xO>ZO==eTYmY^cxWQBPkL9T4@EK=( z2blrVqAy^rIX>KdS-n_I)a54YHa`&|Adi*JSNp_8!5S+?07Wf$ zus6yknt^ey_!lWr$mhILrLJsdaXE_EHKlu#-? zPC$bIH(C~7c0E`y_LYoN-q&8~KT@czQ+{0}R-57Yc!IXfS0-{uCJ&CU^ljg=2(MXd zPKDxJ=`#eGyW*qmE1*7c9U_$~h0tI&iIc7X{PN?%?yhk3wUu|0B=xJ#W9Zilktk&8 zeYa!>OOpVGi`rvbxElk<5!2B5HAC8ZRjt#{HxEY{IH2{!Vh4xsQ~Est38*pjJK6YK zX#D0uOWiX2v&S6+J348Ug;Tnw#-9?uU@QtBhd}J)7>r(+Bzk5-NH(kpqBZ2gmYQlk z7n=pdX1gd`wFSvZyoKc+{>(vJm13t=&sNiqx|iXD1N*FvnW=3vsfen}KNsDVVIVk8 zHlj$!4@Ci=$IEvTG^0CgOpK;3sD9FQqR!N%ne>@hjY#rnIMBvLsj=9)7}j0*A%1JkGof*TYiX==c9SMt?y){7NL} zbCOf`N%f~b^1(PJ5tD3T(2t#w5AgBKx0A3z_u@0Okezqst+76x*Ih zj(#+j8a5t{EayaOq0B+J{_+D?AszAgo-6;$l}A_U9iO&q$V=7oLSMLSJ&e}K5NQd! zsUt0|!HAZQYD*{LlSrvX`TeaWye!k5>Q(mdB*sB)YXe?oBJ;&!mSu`iU6LATpE-3k zOH@ySj~JZZDwGAK!n=UWtK;};kOjLF6I!d|%cGlge%%Zg8MxtL>OFBnXBLwv-`v8RJYv}@#s6v2Hb&L2KsOY05SZEBAIYc-l*66G^!mEB<*cd4tBql zXy(fMbots(x9($6rc3f36FQ@LPdQ&L0GzeF8ReXK6_;ft5*@M~2Elqw3ILN7<~+yF zL{C&yTp5(GqrSn~OtO96I3&G-D)w0ipg&6X+G)sK!pAF7i1WSiS8)2Q`BG;76bbbt zbvyNXMT&)x{qwfcq$NZx`i&bucb>C7+wAh~%8;Vd(SDeki7ozt$E>`nPx)C^IR z1GJxKR-Gxz=Akw#o~8S9+gZwqSmqympW#>!6`cnBh^2cO^IBmt21_>aAy}b?9bij@9Qc z`DkusPnE_-6|skAx+}QQvJx6Q^5ch6m2W$|zQ^_P+tWWirN0%}-UHeuO)q~wB)I>U zX30r+z1N@uljCfpMVQyNT5WIBg^GQQ6i&v??!8sQ)A%Nli&h4-EZ7tBqXpsuJaWP$ z73f8#M;q97Wg05d;2M==qah{7GJ#52rpQW4=5nyya>ob;-MOHP&wG%s3Hy3e{?}mv-UhJ)nWJtbT#FE1jY%NAEH-3v?N8l&(pd+WSpqSZQZ)t@SR`wwi4su}CK|cZ|MpkwL z^!Q5zhuPfd2PJ2Lp;jC+X531a*{+q;rYL0W*H$PTLcP-d?bN~%R!#0*VXf(;gJSg4 z-l>;Ttr|nvxxr>{;{TqB;2b=LH0u0etyRt*(nPHf(`t0~1h}1)*a_*$goBy4?sdA1 zSMjr;8BESjFp7x@iB@q(!Cv7aKe0kd)8deOv6f{+&=>>mxFSxZ$e+EDZ)*ZLAm;k% z)FSS-+c(nO@4#~Vc**ai;+()lS2}ED!b*xq{J>;6z#Scp%8R7|_K@0Vt6!JAchd!C6W^xE5S*$67S5q?*^fN17DQNoOZuw8(gB7h%5g?Kvq|MD zl$GCLt{p%5t#;a!W}Ix395T|r`@U)#!=Hr(g!-3Dq2@8CO*HyO2zy13U;~7%tG84KgN5vk zKQ8ZGC>aZzxj(=-%Z-sEpEa(#z{CmZBVex}Sy=0k&{8iS$q6#st;G>DN7>obP3 zWW-(fAQ$Qe-6Jzh!%Iw!&T#FIVB^WGX=WO^J)?4lxg4S%BZya(`2=#_o@$wIm`1z1 zsf&ffNr!-wmQN4DA@-nK4!)@RWtB+Js0<{~T<{-%kS0N+ zs+$=Mc_l|dAN?YSV-){zLk-R@$2VH&@5MDfAKa>`@}y+T^#qz$UF}D(L;>LR!{R2S z5F^vT+orkSFe3c8iQ}-OOvc7y)(A<~$_z71D*vnPGVA7azCNJvb1(@dQu{SCAJmi6XsVx$IcK$d|qzOLMM@1}8M(|rX=uUdzov8riwufm3& zZ}PM?CLfLm*$v;8AEnO_4cYOfsW!HofVIW$&O2G2+9NHK?21jUKp(&;z4U5jO(i=g zQS~BWXid8wUOQ7) zlE0`gT2obQ%8wL4g&d>g<=FQlwK0Ki)ZoP#N`cWNWw(Y8dy(JzuGI+jvWcNN5JPKS zzSU0+wSZakAagWz%mHy`S$g!j>Z0&BJCrz9+XJql)W*>=09kusObo(57*5IXz@JaM z*?QXzYu2&u24m(HHVM*mjn0N`W-j&!hoqb81N5;2%7hp#)Ih7nWc=*@zhE82U&jU@ zddP+IVK08T;KPQnr$b_DF-V_ChceP3>F#TzVWhek0Z3`Rg{Twyu0|x z_m_EpLo<48Kp;?O%EZP@ywR=;Zom#xOxZiR#{XSIx!heQpGafZp(=j)LZ*4TkaP!W z==;m??1*3l0hjAIfh|8?XQia5|NErI6uNdKnwmpKfQGsz=Mu`U5H#+S-Fys)5`$aaSbmJ}g%s5o!+tutn^-x(wkV1`m}3$6;UdE4rA!!<4{ zSH7{%L6x>}{Tcxfy?l!&HQms?(g3!HHzRD#4hfsAw~?15{|p9$sE0Uxp58#`G6F-H zIOrR*jH{>fqrQq)`A;>jffg6aoR%{f2KZCOPr5COKK2<72ID<4pI$q2qESKl(+L{H ze$N&$E;Wei34Oa-C^yUvi7$!r?<0^;tC5!Ri9Ml@d@!E${yhqL#l${JT;iv*X~UA3 z;GU@IgJFKX*FZ*HzTO-AYRe}({Up&md96-3?M3-mn4T_|{I zPSW6x*Rz_~NoKwwF<@0v;Bb5ibzY(N2(`av!>%qkdm-{K({hMfeWz*9J`24)o!B`i zU+Rve4VcxfHUAEJ*;gQ@iV%r>(B(@5Ehzp|={0o?_Ri;WE0tJ+U>?y|;CG$SlSXb` zN-xn+I_%r=?e)bBiy6O#LWM?H3X04v`x8diVqH1t-x-l3F>_j-(#u4k8s+3Y8WmNM z*99~jHT?dzZ(M8TqCJ#zD5Re8-VCTaE*AU09_>PwHh(hUGh%cp<7vrNDoTsq!B|pV-V-jLJ@utAr~ddXsN~u` zK&!4oI%Nj%sO~z*2&p70H^aro9ngJ$g%M30d?~bKnU~x?0;3MjQ;U%$Q=qYu@^bi4OE8H*YF&fhM>tC zchvulwoddQ`2luCQ99gUl8j`$sB`rXBzhFzdN zBax+3?JkYe7!a5-DpIK{bkuufCrF1EOEid!qetAx@y76S^-dcTki&Erl~d-C)UV4m z{CWlIo|UYB0s<$&;$ErbDH-MA-YY)Rok5?o0b)4h-)iK6=-rl0>(sRY>T}AOsiSC` z!5vX4K`$w~Syt1vV(tKKQRuP?mpjZaI+MfK)$ZN^!$YlB*_s?amcDI4_+-2OvlZ~G z5eh+pKb6u016LA2cw)D>budl6=znh9#IYdLSU-0UPYK^=CO0+Vy%|dEgu$m70O(rR z%c??;!ZJO97;y^ru`=X&x!F7P&y;`kr?WXrP!?jXdsCFSDi%kU~i3aY6reK+sB z(~ovJAU{{V5zhrP?1zzIBWG5dAo-~A(h?3!|F`N$e!hO!)tmwHMe>OWhg?m$k;<0O zo<6QJn=qgm8@oSLH4cBar?D$G*l<2Jzz z-p+@_;v!A%(-%cR0K4}Ulu?G~i>sWM)U_YJigdeOkFd>x8bkw>jDMBLG_(>LsW#aP zHk;?`lnY9r3MjLtc>}`uLViEc#}Y)~1*mfGPX+XRgU)-bk;$d%8FPdZvIK(ir|f&e zFzxgQj*mE`)K>sAguU~}Zhh^u{vZX9urBf8*DfQ&hK^ZqoqU~W=Z?#FPr7drYRMuc zuC`*<#1`)}XTXGYS~{xK;)b%ka~^LENwjwO+#U(0Yb6@wlLs(|OW&U@7ykM*k|S|z zsJVuD@~%o~Sx`GDXoqUd!B3JhU_t*M7#ukg!R)IQ*5WBc#_8>B2&=F@)D5r@_t~6h z>&*ATB^)UxX<6L|DA7otA;HSiAJHD`!`leA(SU^_Q^zyZ;}pz;;S!eXVgAu!@Cb{F zk=q^JPFIG*my9o?X@y_qe*{NcwsLt(U-*8$N-NnmU2M1tan|^^eb8Io8-&xN$#yMO zs`IT@hGhLNenzT(%0-%G&|;yHULEPb^{w# z4Um0GCDMrfB}}-aOjSvHs8&)i7>str!Fl^a3zm5Ig~BE~Il5LGAXBKYdmPO;UCV0}~ZuB=yn(h+g@bgHDK@gFg8tg49a zH7eh$b7(j#*D1#1e&StM9g>-k(BkB zQN|Y_DSD!A@x=&vV}+5KC=pWJ@3BoMy`&O{TU->H(5;fj!S_;V-WJ5DL->w#I%zSp zKJ_!Ct;*5?;(_I18*o=}5Oq#!C_T9mOp!vpmjkI_EPA%*T-S}R0`;Ea*I;p}&k*adzYtq#NxDxSDSkGoIZz(qUwklC^_Ix~0`OD8EFmH{aNbh6k8+sf z(URqFpu#k6cq`Q0sV1ltIgkMBl?j4rD5N9n;*$_jAAV%-fiQL7MWpCT)I-X`WSy`( z%9U3^cbR&JqkUv@%igpS0e(yrdS}}c%tWTd1ui{q52fGAy*-8^Mgwgw0393)^QdgB1Ju+LxeX^FM>?czA@IANfs_Ud- z8fmtdp0ZHEZ=h}D;a={aZA~QqL+rmK+YLAW!A#B7zQu5662wrU95w z`DgMa-t70&CqsVq`+prqBmDM@9Lsy9Z35Yg3*6506{RcH-e{bfr-muFD!jwXJWCVG z@A#~qW!s40ovt3i*46`opQ+vW^&F#r1(krE)_yxvuKc8!7;XB%mMOuOY3#VEQlKFe zOJ6Z`m6xo3)*{wwJQjnB8Qq=lXd5!DU+||keA*9}*E8Z=i7#q~hxyswK)Kf+Abs&z zu|iym6_7*+W9tYcv?JIgb>trzG8_?2bApU2p#<+0X#8pIBnm8I6Kx~L4UCuyJEn)ctC z26*p#Xsd*vRWrn@IW~?6ewW?S)Y=o(Ix^!2=hl?<*;GTJvo`_9ZnyQ?m*gG)it$mb zPw1n?ka6v{rVW8~d0FUN5AT3kK-_BUc+=p>j>&u~t<*)k7xeaNd=o^f!cUf5?Ro9G zx=r>*MkTvXUH5EDh8jFHo;*YCfRUqfhCtT#*+?gV)bkg;bYyK+I6rP>gspFb7Aw}{ z#sw#5@M5YWOc2>&X}T#qfF1r&IK zhxkCP4VO&3h$;!UKw77Oi45{1o{xkdrh+h_w=o<0%vx@~2WiKR2^Pjq8M6mDS=si4am!M~xjD4VxKZ zL)!H;&@VJ2N~4B8w4Z5toy{U@y<_8D*UhiaXiMYJXDj!n8oVw-0TWro8Hc26V?7-E zUoby~{8juqRN0@UG$GDbf9PJQ>(&uF^vxSpF!U8RiV(zO9=9VOk25u^zkYM?{L~;o z{C#D9RIL)2`0K5+4QWklMOscqB|2-JtYbej)fY}_<mUn$4M;!Lo&gPmn+f>P_!^plzA3Y%G;_k-n*Vo0LVe&@UT7g_`4#rBo+HxJuvTKk!@GAQ>fg8YyXhu6JxM*p^ne;Ee^dNCI%>5CZ^ zf!~b!93DqOIe!J-D5tHqdoctzB)2`F^ zn9_FJUES3_7j$-UpRU&b1^}?J(?a~6`?U(Su;ZBiUe13P&o#ojj_aBlGZcEeJwt3c zJ$83@v@Gk+PJZj*sAcba(>DTwBk-3YXo}OBb^QRI%u*ho6z4#-cMK|1-~_*_{%XJ= z!vl^Gj~Se?_e&irRndlZ?_dE7zvj@^7M5V(KRW(FW?w_rzElhmBQ(dUdiJMNG~c06zUHqwaR&opVHB>zdC(*m}Sk6u=ZN2H*>1#i5$RAlr6cpUB7Y5(~246 zZfI3|ya#p|!Bm5&p3{{a%K zicjP4wDone9BH&k;O*Hshd0vSvgrCHpD%W$deHf&qe2S{jp%Pt0HklQ(#ISMeW697 z5Wz=`8f%V8`-~N6J{sp|Dhka$TqGlFjqXx3G*3_z3Uo4NxP4!SGX6u}Ab$2gU-_{F zb9`SccgNPWiLWEGPE++GoTKFrpoRte!XHEh77tb|;ZQ@-jOTS2cYei27aHZyOysp~pYwsXZh2U)J=$WGlInFmmwDMs9;fp6i z6w}LS5&gL3Ps4Hub~`Yd!G30fjlGS#^QM8G>vY*U@H&eK&5Ze(VB6b#)sNsm6eXZ^ zVF=rog$$hinw$8UB>{$rMkC)IOlDz%g_lo$i*7ANziN^gb^zwiJnMN*WZL}?qvAuw zHH7q}$vF@g8!l>KrX!O2r3_;c5I%L8kmA4>C74!}?;j=3<>b^GO-pZ9ey|@62^6i5 zGTLZZXq++j%$aAt1L+g{vgM5D^JA&gpYELiw5)s%3VepRx9je+pnWU=@a0Vct_bP6 zE3>q7Mq^>rG9s)*`G&Xu!73u*0jz5VyEG4-)7X(;&pKjSu+Bw~nGEs12I#IhGZsFM zixuu)FQmuLlN!64dE5+ zd-G)L$Hx{TRg(;*!$p;jqNIDPgT|ge1X5q;dT+P@*6uk|heMxrmgB}gSRIG07{WF{ zQ70<<8Okk-2A@-JAo0LaYEL~mYq<~$)klzik)zlDRcS-EoAJ)EWNGQ5~=iqoy?u^p?qJfy*xTKY@G%CLZrJ2e1pPw{t-z zi!vcp)$2WwgNTUMed|-`8&bac{`F(WP8*sLcR!*S3+%h`%D8k7yqz%( zq)yCn`E!g6?;^L1E%btRJQV{9E@&|Mg>4(Lr8w`aY1dz#)#6z2R)7H1s!lh2zU}t6 zV~VnUZ+9_8dMnQ5QalYWD z5;y!}C6N24L=>+K=nL;E0GQJ}m3){B;73yR)Iyu=sHk4`Y`yFJi`j(GsA$WTq9e`$LrpA9LNL--{l{|q&tVCAOCbbk$b_vwo2{u|A?rMySTZJf{N)o|1k=6>?0im45_uBy9MZzcEDKM8w8&}# zpBszCE!_xvZuLcEi(E!u5)26i=${9-VlpykswAB@c z<^Xrw5hygXG$!ni?UC9LQLh{LRJv7s=0t{;GF)=#v~pnTW7schgJ8-|obm7kGvLe& zvikgl;TZ~H7Yv80AI1`XmT){m#CF&P)Y0VJKWt<}uFh!OqHWX(YSC67jy(*33+dY1 z@Zplq$x*Pjh@_WzA%4r(yfCua7a0M6fc*Zq;`|FGJVD2hjBtdLNHQXbTwSdb20F&^hHhc#wF@7i;kP-B!1Trbwy-3Yt3dz3W&h-x_+zEx94Up}7$LE3w1ZUf>v& z*XxB~remlLh2p?s9vxIHA+(P&F+ZCLBin$`%`o+ z(!0Bh8kR4_h23ruOO>5)XWq!rI}bj+MMK%2Pco{T{f9lwZvucjD>!2 z{CB^S%rmox=%SN8UAtnc*HYY|R>;Bizl z@38-VP+}9>;vs!giv#4jo+B}KbF$ud?3#oOTyHvV$B?$Tpm@C{jT6ZZi|7R?GmSF? zBr_cWd*|mDHaUYB32se?k7eNv@m{OZkIh$KT+bWOmH+6j`*#5=f#~^TLueYG;;Z`Y zc#@&S<49vaz4)5K95E9-U0R~5P~x)lFzkL|0omc?P@|a>E;1! zHM-JG*$v4Stfr2;0A??>*4F8M3iU3(j6G8o_>(|+d2=#awb#XeG_J%wrLm{2qc6u< zR0Cl7q>Vt&ftnJthbF3%rz`$Nq+C{f6^7v7E|oi?ynSD87JB~dIG6dH9(7h3|A4Y| z{HeTVono^lhpN2VyB<;Yfrp>)kj#$MQej#@BBh^Q89XQp8ph&Yo49|I%c<9|=KnivOHvWo4&4z!>uf{#?>^p_DuAiAgv7727J~_R z*}JzzqAeV47zClM{p1<#UVYBT-DwJxm}#k5IL@87%@xFcdrdQyb8o>ah8mf!XMu^R z1WbD0p@w}hAxyY8{bYQ0&H3}mOM5_}?;VcXxPr|A1}=x)RmoeE_Lp2%{N;w-=+df+ z=mWQ)6jIN#X@Nh&%2{5<=ec>`$*(V1f&)*LGx!*Hrfae;mBV~`j6qB0^X{_q)$m4t z$_1tE1oMwtgNS1TUSbW-z=5xT zR$Bb2ta?B1dI>pedWiK%CW(3Xfa>x!C+VD8tu-?2 z^L-kq@X1>vhwG(3w@bFCTi?Ec%&6%@PY^Ss!$sK>kxs{iN=EVTnBTX7dEX{i;1#Lr%t{1}s6AK#=XAK2*{BFk-s@`o}@Q+nHa3oB3udfm8!~fElBZ zQm@G{V>K(tMrevg6{kNR;8BY-x_StHci7@B$P?PRcfl00=bX870t6JB*q9dBE6m*A`J9@dCCK*;1Z#PcGj*%jN#T6K#}5)()Bh zPUyl~I4G<4op(M>3nKSjj6nFu&NUiV;N0kPri}JF z^J4V);u501Guh*(WQ^_+KqczS#wcqtRu$ zzBkk6O=?Cb798s^{pHdo^mOQ^KWVKdG^1atiE zN!j-m2N=_Kad$tMhIHGOJ;8CZgt3m|EHvO5v2?y@Q=qWAdPBNc2y7~yXzPi-X-+5N z*S|F9c87r3gODBnvi(uZVWm|#Fd)AE;W2X`JIyqbJ{b{pcJjcYhG@0d9S9CGA&Ce; zVfhcRUvB)-dzJWqEQ$Zw7TbxDloT4+0gQ?B0ac#oXerK&0w`ey6g@f<`9K|4wai*z zpZTouzZ@@);CSD*LCMdV<^rC}hltZ@DF8~YO|&?hHaRHw2@&B++`JN40?X1z#_xYF z^ZrEFMXk&+wba?_22nN6Tzw+`SpP)_*L(nRc#>;GH7X~7!CZoXhkq28q@^2iVPU6MX65YMfNllj<6}_55x{h^5^?MrhL-2?MrqoSkd$SfggO@>owRIxE{Nwyq7ti zJ?_akT~1M68txEy8j+$r#p8Ya;*2KPW|5pjKUd%`D48J4V_KhC6FtpUI&|HC3v7be zBMhluHCpFEqvCt%FAIdhWTt*D5omhcjbqZ!#Ujmu{l)_WhF8BYw@e?DvuTbbErYC_ z{aE&$zZ|79tp0CPdy=FmfXdz5GedBy^GcaxZ;wFKiD|}-&u)#) zMl4@!2xD4AyM9k3NbPCT-@q09rKa`5uLBf86Ml5~$c%|EXZeCV0|aiaKDdP487`j- z&eg|{W;je9-U46O_aqRuQwxIil;^&YeI$ zhM3%s>k9RW(Qzn?H#FfVIouCx!J!AstmA{hv@p~2zg`@zR=pr|1f|UOu+Hgew{^)I zofyQupgS-^KD4sw97Pfjrr(Tc-o zwt@U7gwuW)Vb~`j9tScc4oO19XXEF1{azA!qb?>nuMjCu>L-0Sv83f@Me622hH?+H zQ5*@j$+?PgK`PnSzT>4(B?eWqU3$=G>^i_W&&cUA4HJY~g`w~I#vW%~Cg>WQ$`xb< z|0fHeToWA8iHPZfB{#wy-=Sq+8(b3NgqmFyk?rCLK51N@>CZ;tZ*0I%;Y1*1P<6__ zYVtF%S||8`i*WU*$&u4J)a!L+1Y(o3;se~8oLUMlrk5u;Y#*lL5$`Pl0m)RpafVBk zl@^Y@g?4BY6UMqX`(%L`N+{2?+iV<}jXlf_PGM6%QV9sIByf`n}P9Qq}}Sg`!n36tsc+=3DlI$fjlhyFTN* z1F4#Wj!IEYr)*e)Kx^vpS2^t%QMY9J=SsJ!!#jCe_O2@!h5s!M4OEYlD%V4;r2*+I zoFVZw9>Dtt8|HY${y}yfWb>P@RPmn%C9$L-H6Cd4?E~))HiHu;Jq|e!-Ih<@78qd! z!_(Dk0i{wO7RXUc(Sb8RP1tx`?cBc2wAYZ{3dIxrV)Gz0^yRJ7t8kYkrvwQz>9a=4)P7s|z`=W4! z#TPK>IUA=(NAkTXZG1cY5zH|6o-VrKhDWQ}AK_2$Oq3=1sHXfaWXF1_hZM_)!H>w# zf(P1}&xgF8Nzbn}1uRjfrq?gTc}9$Kw}l7UXruKZ@Hg+@2TQc?Mu0fc>?{4_1u#F^ z&Dl~dx)p?^cR*R9^UM#@6azD0W>i>)ALO-w+PZMIyGToJLl@*=U#9!mYcwAB9qI>B7e z@|#d)ce}L9LU4BYeNMNAi|g}@`bl-lk5TLWvUo6^^{bCB3#ws3ir$cv%hLf)rUqu! z+-y(p7y7g^;_rTO6NXh6nuTI@Tlh4*AMn>Jh}3Q!dj<5;S>7+xe}Mo^HhwXVTYW4= z1Ant*PoTQwJ@EyzWaH337a#HDg4?fE5eN|~ntqjY(#@g;ZAgDXcP0BVYs2yGP|!*R zqw@0ZbULUfNnzq(8IpSXpa7u$>_Zj+WlegU2vaLI3x(?HTfKppFiZF3ffP5R;6g-P znNSwE*S_G7hD-uCo2Q)Ii@*L@ z5l)6sNV8=u9>~1<1^O&&H8xb723XkJ_M~$`RkQSI`1CYg?3wuyP|`iNarydT!|!ta zZ54-FB*Ou3hm#lFe7MW4vDtgI{p+u8^ar_KE0`08L|&)6GqtZAP63M~58{38=;haR zH_i_ZG`C1e^J;t{iSMn_9O%+)S>u+ebl~jRJ9(SDZ2FrG$gbs)R;|cqejo@-`snj^ zKE%#H7FT#VXaP2D>}mW)f>=xj1xh4Y&o%I<4G&MK0813#sCg&MlPRsI(G2sr2P@!B z9oQAC_AtF|?AKqyP4bQYIi!t)?*Y&75|SU$vebi~8!OZ`F{XFoU;N(#QMG|N1%{0K7CMA8%q~_Y=#XV|y|2Tqq5cUfA-K#u~&Jd}t zCtQi6=5ab&cx$@gopJ88dWEz~-zYSxL`2+LaDU@_@au85;%JDz{=dG)bfV40@gSm(M`5Si(1)+7GN z42ehI$(1&w%v&cPG%m9OWkcABm1SWdQ2Diy&eY+f&{G9I_rVTEa29-__e|`L!+gzy ze*v>~EFFh68ib|L57J&bbk+}8s0fcItN)UObWA{CLiZpje6LUfa!*PT9T}pgcD9tC zv-_0=Xeg`)RKDkPI&VsxIa!B*V zhCNcuIR5)9FtIpoBo7~ep?Ip{W%P%z%v5i)z@yJ(iSR^PXDlz73vw*<^fA<9Nr^3l z)0x%qdqt%gN;efmvv@ZL8gaJxa-#I*XSfT#c+ZJN6Vj-{;+Zv^Q5D2c)3@yfVLXBq z{{b20x^5B66JTyk&yr73N)CxA!^Dxi<*R zS!9Sn=Y2OM?D0A*9PB=mcO;ftUR@!&$zz^$Ud^Q;IBDTGViV24#TMWWHmQsQmAbB3 zg3b?er22isRSMrwFN=GD64r9#ZS^i1nNdd=#Bm?cd@(Q#sCUZ&VXyxucC&m>ONJ>HN^@nF>ejxS#3BpA~tyb=efP`ZV1 zS{G<{hmggm<1<&5T^&GJ?oI@BU zz<}jwRRCY5PHBmV+{E_(0j-s~sOgOqe;-f5Tu&vd-?ss~ z4&wwH!LnPSa&olu5F}&46D$Far3wU(T?+eBK&T{sFfTKybq?h98WS0IkqSrT6N0YT ziII1_z0pmAh`6P76AUK{^}&Ia+>CvYjpAzP)K=nSLJD618PCf}s_OVZNn3y;N0fj@ zGnEEtT~vr)PP*CTdY7guUJgGYU~ny*O^a528kL{--7FL*n}d?Ei2u59ZPf?FRgi+w zl^Oe$3aQ0|i=hw&rkX^2dKu=}3>8u?Kds*BN>9FIh*1A%B*)GZ0)y8KTbq3b?^4l- z&Or{SD8Zs4lk@Cb5SoEqse+0@wc`Ds{-g-BrmPvI0>3}UhKuf2e|XTLYZWq8cI+M1 z6-TtL$vg-iUylf1T|tDcUR>`@5If2x^+#*OX59B@_e)GgTG|FqE~cW8-#`Hnz)bqu zZ6e0Xi#cRYB`hq5MMIcC_BDf^)9IPt=d2uSYJ# zN>TLehMIwTD^YhGJhN8Ss+wklpL(`nNwaI~XV6=dReZSLyZXrtZE_b8&H`kzsc#-7 z^nVbx9wz6HXCdq3ILwaj(!DW?4zk>?XN4;izA8%(z3X6MxBeQP0x0IezwsNKV(Iul zIU<)-rszo1Rz01re4s+!2R^WwD{y>E=jz5K9(Ht#3OnCtp5C0Q&t#cx1%{P}#-HaC zT)1DU9wT>XzC-B}HBJj%DJIXd^ozbkg2h$`*(alqYGnlRRzo&EcPj3Rz(i%G#-mAW z*`p~FZO}XA2vD_0uN8*bm%qooUKNcwr^?;yrwxSO8DF{2zXq?=HSluCv{94O1)xoy zE8W%Wt+w)E_W;RRF)$`i5PQ1wgf@CfXoFCe{9ANaBTN!B;<{KinabE0caKj}$w6uyk(k&ik9n=P5;yFw4HNiq-lCE`8O_0-mb z#3sp8vDn-SfH=)Y%YR+CqH~5~7a$!-N-Qdxgf1cP#I%LL%)}yFxem_5+L(r)=u5>V z39H+UX2T6wHcSW6Vd2J&ieseD-Ldl@Y;lO+S?6eE45B zP`cpvid_v|T-aKBi_7g|vlr;yAdLat*jiV)N<(fliTU^|_A3czeeCq`d@!)k41R>V z?SmlQ$GfpNW>RX{Af@60W)@6M`ZeZV+LOeqo=h{7ptE&`-5skz<ZXnrDbhCYKo1957=4vCfHAi8{0| z#kHDGRxwK7VD^%UvY=!^x zOab-(VehM>s#>@9DG>xgKv6(KkxofLQWTU{1VIqC(o)h5A}S)OY+}<&iXtgpii&i1 zD&5`no6B>~cRlyJ$M2r|yMH={W60Q>&0cH0?>pm}b3V`7U5kTTX+7ecODJ!LN?acY zi_mjqcY@MelQX!MP{W&k4{p9aj%pz?UV2EohhAhxNJRxHPCm7wy73Q-hBl0 zJB%%#dkv?(RwiSQnTsTBXs;FMmP>fF}R+?WO>~dYn7D}(su;9O#)?mO^V0Z;{+CxH5 zKV=a-pzir-7J6>cj>7j?>IasKVx19&A1=9uGHAT47dw@jNEj{%K&8u5!M@9!O_7G- zqfSuWJt(Nh>2v8$|Jyv9tBp{^;-_>YPQ#)=I{B~&>(-D))^01kt1bjD{PKNjJ{+p1 zv2VL7C%8L%l&J8T(?h@9lAfDT+$6eq$E#pc=qud}^gNK^c{e{UaV3Yy6q{`E=pAb!NqwQ5Y zq&njKh_&m9V*o2qMBSMf{`Ay#=gr!5Cy!b6vg10?j!5#*3Awpa9#?I{8-IuD|#3kRYuTvYrXE?CH7 z?fQ0Hi(VZ(vsgss>$B2gQ3S0o-sR4~W58Nc+Hu^ia#|ykOojWI)6>I7BlA9a2p!n4 zwV#u9Z9NYRP|rSG zQRW>l!jJj}57!>s5MA*Rx^KZRT@n>(|A1WfNlSsc#MVbAN|~N(%=Jin{4tDgRi7$G zFc&II27%+MB}(lb%yqBbq0Io}lEMgOO6CvW$s;!;VZ?V+lCqESe{hNa`N50(QU&>u z*(nJ6eIZgdw1Z}4K|{jB4j;>IvY)^W=ba? zd3a&ZkdmRr^c3+q!y2?A?eb{`JR*+nBPI&tH`Y%0m0gOpU7Gq}`&(9+Ly!G>|N0tD zVv^4Rb%N!1V$SGJs`%8~&R?6Rp8I=`s;tBu5q$tC$s&w!Ujn4oWwZ=SEE*Amxu9Xq zy7W{{_B}q;g$XlYZhWm%4n6HzXmumBmJd`U-{&0sbi!#vLE@m{+6`@scbX{4>sPTx zJ7}BA>CWD{XxQktA^tLh^mfiOM!7Ujgm!?NAl>A`ty7BD^s)ie?RV7kpeoaL@WFXi zZnH7E;q~J^9%u|P)HGhZ=?TFc2|=thnUUiGn#QB^d`<_5oMWGxBE9>R-ozbF$2ux| zPos4F=KYN7&uNVZ@4^I_oGRrTMxasG8-1E(LQ7foRfL$%IL#wYoU~4924M7N$-Tv( zYxN$$|7SZ+;kMUB$=0>;0E*RX$!|(3Z;F={UWzqybH1Lrc;+`}6)27M`58i7VFKl( zYvnJhtrRfsPLJg1`K~_`P{IXQ?tY<$_-dx~o<(U{u(?`4;4(CH7$OdwBZ#r`B8Ly{Dg%dQ8_pMi>m{4>{4^6+%gTBlX;n;fmEmCE^@f0#=Ldr^H20 z9mu($X>5S$t7f$EP1d(x-46{5p7J^*bPA13pP(F=pg7aL+K|)#&wzmx&aGI4JfXIC zmNtIp8%tP7FGAGTk@o)SQ9Nf2QQo`3FL+PA4;Lvgo4xV!#9(g@dq9d zhY1t5X)OyO1Bk{wp>uMQP#-wEeB^af>L8S9=x;&WL(-$f_bt~ly@oD^Vl`qzO-zsN z_50UvvgPrn3ua$whFEflDP7Q{!MVP-S=)=upEYORu6zl)L`h7qp^ob&i_CbNTT`x! zW{{ja7{qo&R3Ye?0L(s*rIRBf5}M7){x-6=YSa)A8qX^FRQcfrO~40VLb{XvV*f3W zmS)5mmsCKMFnCMXr2`E;E+L&2xcHC5Y^WfATG4?n>j8 z@~9b7p}*y}_~~kfZfV<=iT%ZBs~fkT3YKBB#MnK*83d{3Cze-+=b;&OLtI@0MKO?7 zL4=c~j$7sfbp@pzu1}7K?VIp;pfI9Jdg9Z4UPj`(Qd-SLR@F``O2DvB=UU6r8V2L3 z3F5U2WfkA8^Q{;x^jafy{t>uWjck|INtDS&tY4Dk`dE8`K;Q6%#I6f2qU*Rdw5B*eSmTOe0AJd zDt~%j`bUd&pDTLiIUwff#CHDBYS}%0WPVij6SW?QGi7>_Nd*{EsWg+2cS)0epmP^n}xq9Io=^nwRr|2=ST}GT+eo)*xlkCS zi`~IVx2Z}-aovlj#cNl(ci$dlw`6N@2))ksoL6 zG#2Ihdh7blhx~mJXZ87%C`h?2zXU^1_)7wRo`q zcg^d-<$|iy6>T;_)^XNBm*QD%gBGLG_=n1dVmH>wVtGn}7PJo#?fCND(Fqc*ovm^H z>hV-A!b!(3i|d3pW2__D8TBX_A}X$$FJHOhKYI~NkhY(>>gB_BzP!rww4NK>UxlX! zV@?czjRLA-vrqFoMI6jeZz-ewsk4t^bF=8yd>b^a^ra@b$lLy+-{duY=N(1Ac_9y1 z6P}*HbXLoAi-~G7uhOGF0md+gs5g2>?TTUd_zG=U9n6DV(|o7Fw7-Yf@wa;J8UsTO znYA9puF}<|fU2V#5>Id*QzYE5j=SV9^wIs;%8dmdtCMAw5uLM&FF4Y9;>*1~Tx|RU zT)iX+_wEJpS_KO~zEr-42#m~2ZV73!NVzPchoOmv$mgtTHv`@FH)H%^5r3_VBIi7e znplo9B`7*v<~ekjmv``c(*m=nEE<*_|6&Fsy}c>e6hGygOT`t?KW z_4&uO>u7z)dz=DsXFt(zrJc~Xo9;-@%hu*#yt-uOOma3>S;D7UgeG&&r17@d+1q7^ zduq}E9)MPjL@ko;7#4*p(>`%S0t&YbcOB|ajs4JtlH z+QWF?KFJHd#g=Y?h34^ny8WXIq(xVJ^rh&B@%^}0F-}DGpmfprk^ki^!Oq@#x#PD- zOlt8?TGrn#oug>{gC1bQ1i8HCIf7}J4EzJ$`q>Xn%*Y3rBeX7KVY8N0^w{xLw5sxl zg=Ro0DIX?|&*b>8BQaE0joa8qb8>4?E-579E?{WA=_HD1`Na4d|G{jFJO(LSyrJeZ zv_oE3mlZ>ljcLv32%k9s-7?9p_~W%xSV0%Stdw}KhZ^S9$`lfUWwlIFa&^2oc-l>F%7AD4-WO-SNp9@nteP7;lKZ z&O4c1@d4GhMi}fdoSf+XwgCngnV5Kphz?Qr6j$I76(Bqr(yx4fY;ld3z)^K-E(rs( zCcA1wer*Z1;8&pfO<|4^wNG)yyb zCcfIb3snXOpnX+uv|s%Kb2c9j(@Ti8DiXNIf>Hj*Reaxt0&+ty{kUyF$MQ0B2!zVb zAWLb6*$94Ok>B63+v&M`gLx8EXl;=$iUQC_;jj%Pvyef-h|e4pLcSbzfU15W7-*w! zRDTRd(msQSFZ%7)?U;YLHvjuY;0!%xev|er5y6>-TD`rNQdkpA8!kTaJ;>GUzIPsv zzj=Zb452$ymt^2(%WVjtY+z0-FbcZfT2qR47Lloa=*AmHhFTuy?Sa^$4JZ*hD)5xr z$%v8u_??j~yoNPL^P6R9UQykGv?XmRAX4*mb2&mC-4C3>@ysHS$o9>9te;;!$*3Jy z0Z--Y5Enl!&=xDL1MNX#f-?*oem_C9VaTn{q~HGZ<2U@|=bItOt%h(fbIS~Yo*UmI zY(x{tvT&3#e=6NAbEMTU3 z4oYuUzRTxf(-tHAu{)>oe>~2DM5A&03qqz$M;!+e zD)jA{k6HwdcDzt+XmY_r8frvY->!qET+$JLnfS}^peUXuzo+`72l7o*+XXJ+pEHp@K(AILqVVRX~00@$I2J4;<1h0QuRSEoeAA}Z72^0QDq z&~wp`IDLev7_uJE0%#~IfV=ArpqCs_iV;;WrF&NDy6$k~GLq}vO`bf&g6L^!PLM`Z zY8jBN!>~Xx(&}N}1LXwO)Di>TI*K2k$Rj*%&`m++O)!&98MJ%`PkK#LV!nBFBW+V- zk!IZM08v!`B685n(qZALCHi>b8943+P1m($LXe&$|K#CsG4 zY}ZLHZ)bNnzrLNi< z(26{UCVfb9s)>?3{`xWuZx%r#I@1~F6lL54QBW9RPCZ=t_^>UaDXDss`NtvsR9P%K zWyk|B3tRRT#1qHskUS!GDkmiTo}Y{?T7h8lscK9zA&%~QW&t8rIi$DhMKvby_bx_J zJYp?it1ZBzmEX3-W zlkKl>%rwIdj7`?n8}|RhtjD(=LB{LOkD}G?rq44+nSZl{PMLhL#BGs0{H=uOtC=ED z8tVr}l2qf5n!lURi3-G3d0COXmi;$M4a17vCpq=UZALB4hGGf8w>bki$B3oKe>Q9!z6cs6F~_azGF#^*k`<(5_MS zJeEp*pag<-v|@G$^O0rL)2ySvUv4U5A@4q{e)AJc@#9;fq{w2#x(XJz3p_n74Cc!b zn7j&+>KPjA+ezEHuRyCVj_lCQae+cGz0@96XXk+*74m?crhs}ZwNb6OB z>?{tigp6(IxIw42AbYy_cID$j(8lcG%BkZ^dTaP?j1Va5>VPL_?jeQplX=omv&ixK zlfPY9j}P2JkI#7p1R?)7{+Sr##JR6w5XZ{*PSZT=Qy+*1haeF`?m=t|`) z2eP#0o8YU%qM)UqABTwZ$UaP=*<{^0j5b3i?$%Q8`mino@M9mstn^eI3lT=Jj`4sB zOcAi-zkmPSVSjJ;{6%ps!XGbd9Ex-5!Z2eTCc(W`%x~P_-y9!T3^R?NJ(04%Hq7hx zBNEey5qN3Fg0l}wRs9fP(Qfq>+yJyIDGEI2t;SgK;k`9vPZj~ok@7qJtltl_DzZLp zmCp+Q&9m}<{+iu20OBSSg#+6W=Dq*Mzf@$sroMjB`Eg(U|NJbT{1 zmCso{f9uYE^2@77z=?>T#1Q>=7A07U1;OByU4}I+{#!Tgf(RDT1=fLp>Hpty{QmLy z5OTO@mQw3CLjSFs76$yz*hR{TG5f z|Jz`A?N<%NRP+jU?BjaQ*=LBHdGRIK!-&oBGOLpO74NOx(^rqO)nt5Cp`s2(dxXB| zMzgXfojF{NPssN4sqFJprcz%O5laHlz{o|!S%e?>VkNxpG?F0mwuRdSp{?9%w zcL8XH@v{anqX|LoJraOrn%T0d3#i#_odxBUB; zsRrD~in@Dp^umAkX*IZX!Sr*VnE&Pj|LxmTWu@*b2?pAn`p-W73NAfTBl-@-U!I4b z-TQS$I4jh0g@1pmBAcY`I$XLEhjJDobN~0BT^bpjm4F1DpIzWz|KVT9{MRx6d%Nz} zG5_n+^s_Vg>zM!Y=6}z;|MKR)y!l@QdVdin{PO0%y!kJ0{_mZcUqSo7_niJY+WD26 z|H{q(c~AU&C;iIJf0h^g^|SnIZ+`H^dAdKi0RAnI>lYmN3y%9+$%pDMIPMo5_qWc> zFVy`P>i*Zh>|c4n)L*Fk&jY8wO67ie^S@=8{`h67U&Xaw#kIe8;(is^{;l-lpC78% zuNwNV8v4I-`G4in@CbgvasPaX{%~7A@8$Rf$Nhri{$|+yKdmw-9K5}y@NzUVuK=o` zf}`u@`|gDx1Y8T`ik&vV4;u!Pr73;DYh*Z3;%vCLvl-xt=ox8cqNKG7?%f_9#5;N= zO#cWXX+ zLGCm9wLp!iMz^=%6LdRB=twO_s z?2g7khw~Y91^4us%$e-ku>6uyt^ld1q_CT5%9n0v{LL>)&V*JcHXV_tvZx}Woo~m> zS$SN$Yioelt94D)xIR)H)+8qzl=sj9LOrQ(U?kBH+Sj=d`J!rnW@JIH1b^x)w5^R6 zv8|cu&Z#9=;JliBYwwDh4C?ELM@;*aoSLe1ZVT`EJok3KOEfz#j|o0VpWte0r@4R7?QxnNi$3C4dRxCDlJBKoz--6&I!B72wnksCYqi>F0I?daEpaI(S zmuha5WuFbXvYhp{Y-?&XH6idWUWb7!wXYN&-*7!!O7ykBbKjoW^jhR|J$}AC0=fYl zt}|IxcWTA|bO603Pu*+hBC5Gm?wqN!RdpbMA#&3Cdf**S9Ktf^mIR~lm_2>pr46~K zxm12HEPm?hC%9o{ii2(t9!b?4GSl0>*$spIa(JC*q`tw(2{*@^%nP4f(fxL02-R*a z{6dcnP@(WRTqexk1nXqZ9QEnC*pC+{ReGSzv+{w>n96v#WZ!L)NSDr$k7$qCP@~Xr zNlWGK+q7On6pWlVezt}9)!@0+y>XONLS4f{CKAHZ^Lo6 zk~&akST(to7o-IKKYQ>)Dz0F9uE!!`CMc*)NzN}QK#U~1%+$68L@ z;o}_d1u+35Nj&b83w)#mE2r-PwIMpZbjHx{K(~2bx6!Da1`?e#pvrs7)ZCpBLEdHm} zh!FG2$?(XGc1ZdXS^e5;YuoM2tcx}00+g>9sYY@n~>bbng&ine1LYx6*k#_fTcqExNE%d*fhJ06yj zAzbV*ssYaVC&!9e5BBd!rx*E=hz=Z>cQMui|6L2(V&ZPm^xIukHD}1viMc zciqzf+I0IuIMt8iT>t!c)f9%dg*jQ}JlDNmsk0_wG;pjur~0xhMRQWx&x)M*`5I}! z8hzZViK+0XEPyfD+PkmQH7L1ty6z$IQX%jo)WRH-NW!g?ZmZutl9pNeJIeE&doa)x z4x@ufTQSwo{uKRx=30p4>DSx4S5@9a^f?AYOpr^a>6)Z9I?SV)UC%-Jvz^Nz6<-Pq zw8k9f`fMx z50T!sfm!s!JpG7&M!fO&wYi3ZIDvzHf1}DLM{F!YzXllDM3F=N<7Grp<5YRfdo9IG zA6E?c!1^hdvdg-^do(zuE~cYuV(7;U{_~>3A4ye)z|KC*=CoA&B@_(1fn&6(S!f}3 zpO6`i_a>qCn8WsBKOnL3o;1vxRKn?8EeJ~FyM3dGI|1+f>FyNEDt0be3-U;q=@we; zjf7t!OfIizv6bKaFsBeI!kmTK3!NqSSuN>01NcXri&{q*nsiYRb8`c)`_~0OJqXTf ziS#x;{PsW?#ygRhzH-KG_l<`kT>X`e;(s!fUe(77=GGpK9zNbDxq0B~11iRa7vtPo zLT(#xsBB9}(0|%V|MYOYvWN&WsfuH`2#=h&go?7rV?!8L7jD9Yu5~wX(<0|0UfwHO z@BB<=<-IVGeMBD=xv(Fvpkjo`ZMEoNEnzsO%xKB%&KPH8?8!wmIgL~&{uD19h@~6 zGS04L{pnb(JV*L2!lYVl7aiBRmV?*(1*t zI%bLE?G6- zS99C&@(y(*1HK*r!>&3683?V&Vdh1yFdZv7Tk11v%X_5)yGRQX1u4ZN= zxeI!L9Kb9$_hgh(k<_d1&btAZX{CwxoG@u?2sC9J8J@e-G+r(elFVrBvF|H``g~|+ zeRR9_u&3TR{h&cFQe9MxPXjxBue}TLh1^>?7=kefXQNhVG1(#{HXj&YP#!O_dwwr4SwI_TyM0e$au2L*0|)p7D9z?1AO!0 zkBDB+8sx#=5L$At)2HKar$T3t!bxyPDJ7^MBtx~0(-9ve#IjMdUf_zKjvFBzrc5}rb zJ4juubN5wJ4M=EeAeqQ#EFuc6z^oBuHaOgmyU65YG7?o*ziFqyKt>j3v(hYgBhL@P z7KriCBxtImEICz1Lr1-DUYF%${CzihSA^cs)sk3!rDE@7Z|=8D148jPtcVH1q~9;i z-zIhK>f+ljPe*dkr9j6LeH~{3tLQ;JB=cZ=!erQc$B(NfIm+^8w%bd!y7GlbJOXjgoIp!iwhe$At1N~% zbXz{`3Lf(X6oQ*fCWX^Ah>qWED0~%-04@TeXLaCoQE1c&eDN4RKgfp6`Ri?O01-wH z!H#MFL?!*+J$(nij!}E3SY=`=sx%SEPVNSfB}9fRtybZfC%YV0QryI+MTI12f?kNi zz%meu4Sqa{*7?oRcu}z}v@{Or&6TL!ulIkmb47IGSa_^@!)C_Tfv$*2hv&)>rkTBv z%b-D@H~q|sQMmglmy3jFoO^o*I_zVrofa?gxLieSgY3)}D3WqOIQ#y|s5p8A^>%k3E+ z_8+{D17jl~j90!lCnG#NIwiyY3;@sTnlB8dhak&DT7M$3iw+Q&_6Zv(RT1cW@?IfY14c@YX4#wVD?gPW~erZ!s;*ApgM; z9w0nWfJkqQo&uwEr`MHl6-ggTMX#R5X_ZAGKovxzl~p117i`DssD5+%Hg89xY2-yZ zZ5ou?(NvC0`jbGpHCyeyY*s!)a~L=IVOt2t=SS&x46i(C(W7a}V5?r>%`tNJXC z`I2{@@|F8aF?U}VWh=|xuUDM}0-l*Az5P|aAA($eg`rEv^&IOvuAG6^qlWr8r39S$ zta)R8#hu0#$NBr$uD$MMl~MoSd8pHrt`1Iu93 zf{$Wbe?+HYsF6@r*)xLp=nBZ#3mLg9OXlNQ=F{9y>A8vVC>&iM1}>Uqc~VaA<+nKv zqLn$CkQWvC9eyAY7Bfmc^nr-yWNorV{uL^Uis#5=zic-!+0*b_<=ra$@Tf3u8CZ!* z&w3jMPBxsMpJ7|CdyA2Z0;iM&L}n81w(RxN?34hVdJ=ST`EpaYm(?0`(28{mr%2PQCJyDfJ9?m0JQ#8;r1gpGnK{$PCj~ zfI+QnaejMn-$P`zO-;cg(_TTvwWqZPQE0Jz&AAqd74_*{avKG2s(X1<>| zTO#&osd%yJqw29TLL_~fmkdXwGZMETd5Lru z97d{{w}nxj^ZxeW;KY$;zjok4(%2jK+)IgeTdE#~6hf{_2_zByv%#f1xRq`mz!s{f zR-4Ykih89^@6E21j}_(Lv-se6Nqox7k>YbXLc0*tu?i13>FbX?b#usVm}`sdhMjw} zY$b{39rs%F?}1}eeuZsg#Er3iIKO52`Pg0_2gd5SM<3i!+{L1SWwVY}m8#VncT_dc_Su9vmhph@g^BkE=1d5a69LFZlWmZ zRlVUsUrTJ?s^YODccvm)z-Yb8Jg2?}$*8VMr`VL2UnP?CC?2$`-_#O%Y0x}zqClTAtTFqqSUE-w#E*))jnZ#MGiZPwiAu^D0Bax7bpc}^d{ zn~X4Y2C(sgetmgM`{56OSgH}HQN&$WD>HMvJ^eDO4=3k%z^ctxT{X#y&x-lOZ>P%mBP_9n zs8mleT8~p_2&N;bXaz1Qr;1BUNDY()H2Jiz8L{_6Ze9a}@ozfXS#~%5bXQ(Je}Cp? zD@6J?gn(kS<5Q>vJy%6?CzSz(K<7Mb6r!J82rN+4_SYw+tNnjJ@Xv7iMTge5qLPns zGYYQTHtzGsZ7Oy{>ZqNgHM41gEmRt|3b6ziMB9VtLMrF&6vUYu^lfg11Z1e8( zu5!1;8I9&a41N^T=w{?R!bsn}kq@+@!uVpfsoyr&m*e(JkTjGPOlzE6J&!kkGGp9D z#pU#wXP(uaEVcDU3yMP>+0U`3s3kQ1M} zI@+eDGVAJ{L5y+Z7c;B*)K*YVz1^NMM zy*oLT$krPrRB`(7#66$;2&$Ex&pwtY6C-MW_RDicgZuSO);f?Z83HgpyRo^LmtUHG z_GM+$*4`gU+vn2@Gp%FC76tX6<SWEo2B2h;>Bm~-C0g`7=1D`|Ef;vMQ(=`~Pa<%rvAOQ`{Xwa9Y6 z!LiI%G2w+{eVgBJ;Y@}9(TO%}M+hG{2+>pu@<(c|Jhyw75XXt=X^sNQH6zNXFz34m z;o{x8j!sk0emJkQkTVXNwtfm5U+)ANFR`6%4(w4v-9m^8DYY|JuSn)px((sdpAh_F z2=EhY6`iX&V?n9C-fZkXtS@KW&In8G_P~1C+l0ateOn_jWWl?*X=)MsAAf}*W{E%k z3xW(}1Fz-xirZwni{#A8u0(3Wl>Or(>ChDAZOkOL5Cr|s-4JNIyye3d5?ABO`(|*U zEAfb_&mQ=M_SX5KYJ$uwR6r~{y;M5yo^dwHFm^qXuglpes8LW>(sW`wWzY+YFIeMk zNQ;j`q!?rcA;wmXc*&(wv=3;L-I?k#ao<#mtOLJSQOUPs87A8NrT*XA94f;e0W<71 z=iO<&!R!@1mBFR3e1T+g^X)sW7qEqtPN>bifD)9(DO~mj1{`x6RwUlPlAu$JCdx-5 ztA2&BKX5D;$}ZEZ_X94XnsAOQEh1)>WXpe}b1zx@e*GT+7Fk5`OtwO`nZ11Lsfy&7 zb!4A?7F-9iuny~cevlUwHnZ7*(v(&BBg5ZTRq7HBQs1maiai66YlYVd@X@NJkQ59P zW}4d95OV@os!C^|5h0&P`)l3yqREBjG#vBC{N^tAzyhKZ0!7ovDv;8aKj$o^Z+6!$`WnKOh|xbgfLde6xNOiSDboT5j{L6H=Hn zBKIm~>@~K>4IE~}3R_JE8iSL;qVDD6T`n=J>Fu{q8>O1{`-~^mtzbpr85uvGb(nN+ zbk*&K3fkj?dDZi8<926^ncml5^TdJ8_j!rx8N(Xh!}UlFB+HE&+(~`|oVK@w;e523 ziBKqFv_5VtA^gLeNV>6Xgt6euxn^|#wIy38783AK^E(+ays5j$FQBd5^N8QuaLdDR zVMWI;kkT$>8Vzj1Ha)r-4mr{65RPKl1z()ROMdZvKb+e3mq-+iww;HolQ;4*Q8Fbc z1v4p6tydM*f)%BF8WWi*C_c)j!Zx@&=cs)=$Z4Q&sA=aLAxm`AS*H}|(pMW!MRw6- zDE?!OZ+&@M;~|pX%z`H?EE{hop5~@J`mHS>N`tEL_Z-Iq0{N8$!~Qh9WSjc|7|Yjb zqkGF3?pZt;IS(k|h2kaWCIfa?;2@lkVg^xoKOlT;0fDJ9joSMjU_E(249HLWxU2GS z>GXA0-lJ`2jT@qoKtZ`yDoUC5-fQB_E1@H0AK(miM7&DAbKJuwq-MgGLX?_kI zEBxL{#j`$PhQXELuDHeAn$oSjZ$sHdMiMQgKBdPrJGLv*R@9X310oMbhQm~>r%hukFLgG!=s!Wc0 zPQ|%A4+s`JAm91LW39D{H)3$i`6?BSaOMS>qaxHK9)M+3 zbuknX-8l9H4iVjg0=t1_B;$S4y6Z)GlA8RNTs#)kLq!8Tia|9KjfhOO^(#Vl1g4i- zEq}bq>U1~%9plghdu7=wj6hFf&h>_Rs7mKNAEvr^U+LwJt(P6_+VDP;E8XEbHq}=f zqu4dRI0vs^;ASANj&q@@y{xCtrqEF8PaV94lw{0ZrpU%$D$W!*~_LHA_*W@@~&E$)&wpfNJ1pO@CTDOBT23Hyd9W z($`lCHSJm`dpB>?)wxRHDjekWBRmp84#kP&i-L6p7ZgVko2EQ4d5&rpkHR?@Sr&Fz z+1a;hk#pEWul(vb(G7{S*Nl=I7=(WZjd-nb(xquz&o&vI79Da(dj{-@nTSA|g`O_B zPa2DG3q76O%y-<8ov+y|n4QZ;n0VL-4J^agpfoM4j%?>YX#b7h?;eN?4TTLgc`|f)nsFLN(N15YL0FZR^x!Y%>u}>>1 zCgDrl=iG&hRyW}ill%85He!VqExkku%jVm7(nK1S;|gV_&2yV&0~jz__&q6}eah!& zuOrFh3r;v+P*SAHc^TyN{sG}}z+S$7bdW-g9cnw(b$hI%VMS~SOb{Zu+#NBN@eaR* z>YUdJ^`yRsk`wXXvIgNacpwxqcqiZh(#%1l_Dm=vdSaZ%?JH5eA9WCaO&g@3!gn@@ zp(gTKz=u(HB6A4PJ~MsMHTs>Qg9uD=*N#}3SI$hHWz){78;I~~0Uhr!iKb7lbfE5S z4epOz^5&;)h*I;YD_@S8H`f)|IhVk)!k?fj>SR2U=KoSs(JQry6YVW9B9V-nb=_SN-ZLp11gMwbCKw!dPcD}ac zxSr+B?;Sf(STiXhy(5Bd$qaQ*$=UPVsq#dZ9uMFQ@$*~6?>C_T?&%QD{)kwC?FQ%W zXq!F5a%WGYsR@D40jn=lMFz9P=pg)pkW-sPe5EPxlcIhP(B@@#nH3J1IjXS>zqV-* zNWp6xNmk`9;O8=zShvYxW%FWtHEqc@t&2oK3VK`Dst*_YOFfGZ>p%~s0xxUknXZKc zJWkTX*3+WH?y^S0}P(KpGDB+>d719wk$D| zd`e58rB|rAW?J%PyaAuaTvZox2O+V~_%ll@{1sE7QOpBG&oGAb_mVr)Jj=}d3P z-sis7oq}NY=~}D1VuQy;eE9g}*J!*Q;_|z#WC@Ul1DXU?4JrZQ>-#csn`cdKJT5u- zSYmlu=9-jVdyCS)z#VMI8)S31<$@XxW7n_hfI&xfppQu*octn(H6iPAx2d z|IKV?T5BucfZ6AbcD_LB{Q6>p>J8yeX|!YV!LBp$r*aPEC9kwrms-4{_L9cyN=%%b z@0?vX*~&=FP)-qehAkws?FOv|x44TYUcN~2+r4FkF{H-6(2qY4NQ7q(!CuYy?c!XJ zPZZdSVaixcT#53BFdsjqQE(0y97H;E2YW%G0JCTOrZ^je*Ll>VNv16H$R{3nGIp-qx8@nMsr+g zmOAsi<%TEEh@9yIHwl2=!hFO=PFdX8pD~uy)?LdEf9IYa_XvqAYSm(w(6K^S?$rPZ za$nYBsT%X7ojVAh+MR5F-S41|-(}F@jYL{Z@8#0pGtI7v=Wk2sje6X~*-U;x<^lWTYdHHY&b<5qxe5@g zwGc$2QvLa!VMMo-s1`@O>32|u0g0x>POVV`ZLR*OdP5~t7gF_GLeincuMT2tUQ8Gx zA+^4>5b}G^n}c&^HE}F#xW`HnaoDi2SM9EBGJ*SAjV>C);^@X;58P4mkIxsimky;4Vp?8Om(pqefb(Sv%SP8&6aPCv7X?wp}rxO27^V)z}mdX)hiSq3$ zrsmc24-|KIx~e4d;*`<>GV-c{zLe|A?3HxCM_uP{pgfjG*F8mtF_U>YtxX(8nN-hD z3=Ud$ek>$Wh`Ok5+NvaM(Hn-&3sjC_t16l&77an|>L}!rL^qqoQZ=3GoTCzB%t?Bi zUBm8o_*<))g!-HCwV2$b7x8 zxep7e?}Xo;mCNN{#pa!n=xt{-sH|;`f2?}wwD)C^^<{|~EDdMU5xsH?8gJGVcK`~b zr1IkfM|f#*Eb!a09WR%(zEjdwDYn5+xEo&7ekl}NsC%6vZsTK~R~=RKB&2)V#oq*b z68P_5EnXR6ku0?K%w46kFSg&l6}C-Kn9{;sy4^pIbP;G4hjTJY-LLRJ_T}9L{8|Kj zcIEqG?1;baHt#yvyJ0cdDyxP{lJ+PMGJagdCM7uflouRk?7~BqTzAjpc}+=gdX>Vb zF?SA7U%#(Ja^8KpMK0r(=t2c9%`R?lX_%omL1uO7qq@DWS9%Kh@vFJzhFI+@S?1v_ zgX6A)+q#CZi_60pqLg=ELHVmdmOjqGFw6WKf_6uzM-$dLd38KabX&ZP$9yfGWLzgX zN{Lsd7=7PM#bYUCRyVTAFvfChJ*U;KK&5Kik}W2ZqVDP?d6c{ny{Y4HQ5sg1B2^&( z&JJ9b)V=)d?MSrycG}+c?6?JWb?cFq+QZ$DBaxfNF+9T)4-jPf!WJ__!P{ge?-Mu< zIP~cG!A<3iC_5b`DuNJ3=m`d2TjyDH+*yXpgyIKTe z3t_IZN?(N7=cIh4oGmq11@qv(l~W~+JdSx$k}?=uloD?{!hvqF9IM+4Ot{q8)Uy)j zU8)(zRV8X$BF+t<*WZKEjg|($3S~K>&_p0_8J{FmrKvVRL}*82(Gfqkvs@Tq6T~Ey zEfOczV8SG_r+Z$SDf5h%w0a^^i};wi>R4&w%yQ&x93-2bdnT_P+{CvP<28*`rbqcb zSrd>*XB0r2!KT);`%3o>9@M90pR|=W2guT&5<-)N*PbmT9_$C9>IiN$I0v zerdg3l-b8R=I-dF^Mb;wH(U8*7ya|32QW+yAoNV7E8c0D0(9a}XaWhFlk;XG-x`+Sw8=CKHRSDH~o9d2AG1 zAF!-bylz|CtAJ^J9LASOy8w+j_Pv;Fem@h-Oym7hl0N>PG8S9PP9&2Ec>j`b=u$&D zUZ()*MzC35moa`jo@kQ(rGZ{`2Y;%x{akFL3O~C*lh{v!9)xzj?)a-;ux_Z=#YVZc zGKap;UJ|Z~Qznt&KRdpvqi;MYvImXF8OLl1`ZS*uooD=HZBz< z?NAY*h2K?Mdf(xDIp!QnJHIFuQ1bOp65y4BSnrgzF739wtruF4?>WpDVQ<@*n1-p< zCR+WT1DEe@rTft|@>4q=TW9MrvILzlyt|yiWv8tm=GvytJi8vy8pP5`z8N6d-Wp#% zSS2dcf88-~DH0jh_& zw?x;v^lSIGJ@+#p&X(|v!BJu=MSAm`WMKAMO&m%2;XH6y^u}ylDxi?C|9n-6O;Plr|`+=jfzrKra4bnp!}I|(s|@rf>EgQ z=444o!x8l)#ZFB3W7()O5#hnstlOM99d_(y&?S_Lj+&r|!KXqke-^XpjR#F$-MX)Ylhtx1CCygQ@UmQ#B5v>ejNB{lx-TIl$JCQX z!cp%FZO7NphL#IVU92$!X_u)+1-Iu7SH6`rwp=+QZKIx4!m{k#HkWL;EWtP22K{nP zB_@4Aq@ok?f#c4_b^I4BB$hKE{&(P6FExjPza<_);2I{*f4P_;!B`z5vEW52VD$AB zpNcb}De*TTPAiqy%8>VZbrK3K+Wh@Oanq#@cD9WG%Fe#3O(al`kQTJS-yP`G zavlw(@nYVb>4M%9SMffwX{KN%-0j3$A{Mfx$+>3}cTdxfeCG2u!*SsYQODmpVIlR( z!B9R}3xE8}kl?WRde5j86*f*gp&ikbNq)E}eh+aGt|k8U9_V%LT@>uu;5X4OZcFD* zBgvdJcy1%OpG?heJcn%wt*tUD$G4;2r}Fh~Tujb=k-~3jCXX@;U1z_!ypB{s>?yyX z=&2^S*Nd08%R15T$(1EGN3L$uu0#%AOz)g5=Jci>>w2xMAM@gEoJ}IvXt`t_zhB07(v0#@JTh^Fl_$bP-zGpam|-JF1vmJJc3`0$SPx(ucuv4 zz1Ai+rCbYV3qj-4vS}NP;XHOv!dyX9-eDW)$}pozl(^ocJlm^&u*+^rKinp^o`LIDcXiYJMu=Qyq){==$1*L_pHE^@0_B}eoLYmTS&b@w8>@2G*xogpPy1& z49+K1@n4MGVUVU#PwsQu1?Sc-SgS0#=Lpz>4Tw27^b7Hf;X6MtYx(-J#twQfge_wo zYxrYMllSk}TY2QPvg_-{D$`J1u|d$vC^^|JMV1%-YwGsYZLGJwi8GzY_~W$51zNdB z`QNNEYeL-$5n*Z0O1Y(*UV9VQ+(v(jiO0G637L&{K27bi4%*0IT$e|JB4V}e5`S5u zt!DeH{&CG>_mMlI^Zko;u`S$#{+W>t7m%JeNd7g$lrM_#6uCRv_c@`DBaL})$1jVv z8a&ST-Jr#gNiEUQaWQ3b#%)q%71p2|bg8ZuY0G2jTjE@gA&-u5p;s_YNUJ?9iGybp z3vGs&8{=wUpQL;T=IZTwx9F~HcbM?^8$EtfH^v*=MvV%&TG(5Egrj0?utt6GW8H-B z?1OL{l0*vC=`V#}F~TSR9v>6;B>Te6rA9iTx4ykKF zud5#8$4SK1FbbBJdU5f7McYv@=FRCJ?GNQr*&Xb&Q$7zu2XYHZvzthT;K`^A5d@R% zQ0&u7QMRMfVIQQgf7R<~BQb7Es()H-?(jRBSEBsu>SRq~&kVzb!51-WGjtv+Os++F zmL}^2A@#KYX%;^1(d&xddmi-D#P2p2s~U;ORLo$~%79=yg4ccM`XaIwExNAXNe1?kzqVXM9hK**KxxMoUju zXjh1jDvVVszGx<29idYVv<5W00FRf!xMy7Xlc^#_lmUv2nRv~#W9oTZ7 z$ZajG+=ASH~y1a{q!^e@eqrvB3LQDh6iU(y@~?3i5g(9YTJ&=M8y# zJJ4E5{P7bYN^+y6(|p3Mk@E@2+8Ity4SPsHEs8~A(U+0a<_HKR7*-FRjcGw}Uk_!h zJJZ{uFp$w<=}^0a-&iMBpL2qgR&I)GHf%SKpTt74XOJ=Q+{+S(zAcMy;tMs*G`9>v zuuI&~6H8Ec&Z~nyWVnz}aCqV5LIfU^Ar05Onk}!5X*z%u=JO{L{so<;hZfFCzcWYE z`=7Qo+p6YcLY}f+%lncg$MM z_7sNb!AaMtGiol$eT3)OPKT*Il!p6?nJ`%?Ifs9tA-x#{%r zLmyEY}WS(B@Wvs$H4r&(N9(gGeN0Bv&wvmn{v7C(0Yj`;nQ}-tHnFV=7 zNMmeC#(DQZrbeWvrFk(`ZBJ_;eb`VpNcsV4iLP#&ttyr(Y-z9FHNVx^B~K~%iiFvD zL7b7&XZWui*bbX-#@3Y2oUfwG!Amf>*@q{coRz6|>m#@QAh#5E!m&|X*09-YYoS|> zWy@Mo_*v#5QmN4gp|e+h6U1@`EL%TkyV2>|x2x0YH4>ScR4+Qd-Y+md6ME8f>eTx? z*7KwMk^!bv@5*jHz1@)F5FoB4dAN3RBjj^mpJKh^?FPVvMCFnxG^f{HmpxicA|8wR zf*15gB7GCfc;-k5eO+*2y1sY)N6UfqPE;LcKE zqx;+DfwpNOEuL9UQ;OLRj}8?Nt^7eP#a4$ft%xcXGNovw>>-mdo_l@VpE0|uT zmCn}(lTqOkxZU?(Vw0Bre^kABG?f4U$DL^iC0n+TeUyEvLH2zoF?O1aB^e!-+G5FE_;MGzv8!K}nP?6YFl>{V3lSGKJ4 z`{PN@Ki}L;1sj`Mm$7n8379~gyLeS^VP^Xp-Y8u^m2tg}@GgF0Jz7*qdQzaYTIE_f z1vcNY9+%Y`p^8hseCLiBliwY*M(aP8QY2+x?!CCY7#f5b+Xh}cc z?>=ohdKf#TJ_%tBPfTZKQLIO_1jGv0kwc?!5lM7ya8Hy3Ee#1RO-MT|_`x4Aj`jU8 zUp&w#F4fOwTi-Yz$Pv&ML|8E`s&3ev^udx`dcV_+IHm5SNxBj$vnQa!I%`0)GcUa1 z$yJdnj!MH6*K{=tMaym4m{e9lvVmu8Og}~I{tY^FxcK5%Z8Ew^pjFBl+Oo2H?ftvp zfLea{o?x0qh714m;+}?ts5Y=yW~Bs^Y)`+n7pZtUqm%vA@NKB))O5Pxvw>#$mE_V4 z<_J7228;7+U1yB_DjGudOa2?}Ilo}L@WHL{2kCp3_J;nKw4at8W`$k7+rvOG4;ZOh zgz{E658V?6_edHVp}so(>_Kc~61KwH)8xmra-+^3{f&K^w>0y*a44+9&v{Bsq=3H4 z|J5Bx5G}vC#&by3HoditJ@jQckX}96*JIm&n!S*ORL(_P==7Vi+b8dB0rvy^MWpoH z?hix5i>-qUDKFWELHpY&{h1Rh8w9%Gx76?nOV$qMrV$kjcA;B}GF#4VO>PVmkhO&w zLusMA-30ZzJxsxL(if5n&{N8stQ5utr?&H}koFgKhQH&2ll=r=n)$RJ6Dx!YcGPGP z8#f&Yi)hA(*y}&M_e*yr5=+K)WsHR0G~K8BF9n*$#XLd0m0voWTm)+r@{UZ?6t<3J zRWp>%kW%mbe~DsHBs z#upo#`|-x9o{w0@sN0KvSB-Mke36+Wb@cKaXy4C3B~&>!KB+d2hv?$Q<|!K1y)S z2zFp+YpzVr48Ovc4*nfbS8sbOZPU;_<6Z|Xv=)u>XcDj4FL&VPgm8Zi4~D|^|2R)J zLCGwT?{wDUOF06R^stGZ8r!EkK1$1YWBIh2-SBkG7VYDB zs%OyMHv}=HsRT3HrnK{%!htT6M1dGt2`LH2=h@wn)aPRUSM{%?4=i~GRiuPky1t;t zPjB$x%5TyRsnOz-cKdW5PptVaf5hTqnC6?GauAh!cMZgQ5oMl{JvWqX8Qwn7oa1Ap z8FPxRIuy1K>`4WTeHOq=Mu?$k;4DcyfXpVHVXIiM;ufWerkp!iF-_y5WdO;bQM^K+3s6+S#Q-#{+ULDoO^<9TPND~*pyIbq+cH(Ng_NH`K zYOxWX)xfo!J-$#ix7`=-3&}=*UQKIF;QrMjbHzMS`*y>t!TXxp9)@wGtgVshJ`P^Ai8E@u z0v=tiTt8>-)>Umz$MIzA4bi~`NSXm**KrAn5Kb7Yp7KLIg>BQ?cx!mwE18%D zG6K8~nVwsl(8gh+X|Lu#o{y4W7{{v`2ig)*Q7av##yw0aSH+q>lw}}SI%ombK36CLhpUJtPWdws+ zt5wCpr;9_fkZZWnLz2y{dtMnE(ginDWUuk1E;E`_iTX1fHVEgD=FOE)AI=!iP@YXU zcf85JF0kXPt&V5hx;hdkJQvtm>4WoGJUsfe8IT_%u@pVWUwKJ87U;jTq1a?+3mAl3 z%p4k{#_r{NH%cWtkaT*R6&G+jP+?GdyHqKu$Vq*vKtF_PSkD%5Cs(-P;}TU~-5%TE zUG=~Pf7W9wsG1T~4Ou}>b7-hyffIL#KXP95);16)*Iqf^JIUQDwt6cvnd<@Dx{0t; zsd6ndOG(>YRl49WRSkv5Ic;4|nl7NqRtWI*mH$@$#8e%rnxg5COP}fB5!YhxSb{M1 zzX-kevZ1talp6dEt|s~Wv(n3K7sXk4HEwx|lu48MQ=3$@D~A5Na8(^n3x#(+pn2gG zt=z=d^cQ@e8C;?_dba&M^|?B$?bweDW`CsV-+<8J^>RJSco;%j>6u}bs)U(Gk@8$( z=rOj;m5dCY;QHb%u?C==`fwF}<0oOiuKv#BDyk4F`rRl4ySbSxiPEj3n6X$wM_(VO zav`l~M^I}#914d*u`oE>E%FC=O@?=t&;>ITaWUX`3Om>cs)VPa-MJl`t8=Z=i1bUz z09|=@izfPueO+2_DuvUhwbLU$R3?AXA(+5rT@|UW``jWC#g+d?`xIYV_uo#n)FqSK zm=yUGWEik}C``E?-w4qk*>Qu<3$3PsKz{9m3(GG?huDX76c3>WA^1LWwEK6W@8p9- zn)kRlUNk{B)Cj}e&hU##Uh@{oRcUVFj&H=>vF02fMr>&g(-?fdk`ve=9;H`qKugTq zE?JNLA_()ie|-Gcxh_*26)|GHd?kwA%NB-$xRv_FjBoz4`9qrI%|C zw^FZ+{7MQZpUS)^NNJEDQ}n$|;5Tjz8hTAvTIr5%%C%>b6lh!ipWw@9NZkC9q&y~3 z)seCw4mU)qR)h>ZlA^P4oMDnf_@iEx04<28P%zXyOWvg z8g@t$VvsDZz>^%}1V$*R<<~sH>>E0MR0D@rF zwS-in+38@@X0c^AWemzo8rDJW{v_R!jy3sO!A)8I5E)+M0(RZ^7iA&Wn*~bIVH+0- z$qt9Cw3SKn6Ot)0V(WEueic-NOa6Z89G8r;5ii+|7z26yht<;}HxDYV5{&wbrc~Ri zHgand()INqcbDjQnxD&Jl<6jRc`m$uuMlP2B7lSnSdNeFu$^#K%=knui3%oj1XM2G zpt-`OQy-TP8aw}&FVFBQ)uJHtC5N-*4Y;;18N=7jc4O5P0}0hA=lgF(TspEj1{KP8 zbm(+&qn(`BGWjZQS+=b^@y2o%tJdRF1t6^c8oPw;19vJ*4_$}jjjqr%A4kC-3M;#o zNKasMi2(cmzUzrt)Fn>&5)h78WjjNQFY`$ske z?}64Y-EA?RmJS4i?$ggtv^T|*)#@xEIz8LV4hI8LTEV?$ZO0?01>f2} zQ=rMQ4L~INT`A&Qe2!w#?O6nB=57~D*o87ovg^xfh81(#9(gcfaLkW-(MoGN?JjK9 z2qO>*f?2BG;0mZh9|?KTC>sz>o2`Gp2c?eV>58zqPpf@YJH3I)c7f?bPzR1~+^aOh zN{P{uEo94Q+SVTNj7PHUj(ER(Fg8nI(cvARpRlrY<+m|ngPK9TD{rQThsOYc+D`Xt zT_{xqzx+pVjeoW@3Yg#?EP+paO_em@)^kSd~;$*jctwLBd2T zW|$FwP1ByNm^KZz^3dV!d9zyfEs?4V_i*;=hzHCkmUI5YQj8qp=Ymxj9`jptq?|D` zP1R`N2s2b?h_dWso_petGG*Ya<1dCnE|x2*Q{2b5_DO@6(MU!!($-B+b5tL1p>4By z%iYzT&Ed*h8f7)px_)5&!LzMcwzI5WZc_&bb5^z^l96>*$Z(ggyx&jYV$%3{)@1=Y z3!ekg3EmmnG3R7#)heJrThn$ zZ4I53De3jvy*r^yGqEcHGG+Zh<3>XX{&|*>xr~mRRkoMWMcx_(H6N$XB3wCyjbw8O(-ttpUGj%hVocvU_&~h3ue2`q} zl}hPVqpof*iVGfQK~+;9BrQ0Xd@WHy9MQ~tVnrRWs}V1ozGFp&=uCX z^4!mmjneaLrN@)9j0-~_7DVl?`~%9v7kZM1BMr7O0%M%d>_qa+!w!HY+_{R{F3j7p z<#fA$@cpZ!H#BX}z`kcjSZ{^DbPn~Wqk>MMqqCY@kNfI%Luqq^P;;Mqe4g~L1Ixf| z#(uhxnK7Z`^Y4*?g zi+~N%O9#5hxwHf)$n`Ein;nQ0Ih0e@6zv6t11nUE#Vq4etkhrDjWORuJmr!RI_k5# z#zMSuX&OtMODc)K5$vbG?CD_m?RF<06gK_`H=~@G%sNFBbH&X3W>xy)l%Y!!E0&4cDjKR{v@c4v-{!RA?oCKihjnvkxcyPrJOlubM_sG9!y2RXu-8?@uk zcSbURO4C~MF#OEdA}#j#8DK0uv!7_MbZ`*mLP=UYMX74V7?1R`(UlMT1v)h*c5A3} zNzC9D&ms_1A~BN-ck7^;_9}5D$E_h*9^?9TEz( zufF-36*NK_soIA4`~2$4Zezd6-{(TtMU`4g#grM)wo8AHoDXYyc?Eh!Halq8lnP%A z7fGuo6+1XU;klxWt@P)Vx*fn396ysij^m#PWdB9)C65ao)tGznwrO#UGi zFEO_f10^`ipXv2fsOKqm<{@y~yu(1+998%nev_6P(tiTkYMgee?7SEEZmazDorwY+ zx)6g(gsb3`?M7s3@RA|>&^x2@6*^|axA9EDy4ahZDGu?|_ph{V6DQjyuX=WH#I@9T z=oi&o_0JaNP&mgXmZ}5ArI4h*D{ZW|GRZV1%$5)<5f0g@D9F%F%4 zDLdcX-$ZSViSOdzMyj|Fih8m9wS{Bmv-KdLavCnbf9z)0l=090JkM!@I_R*&IZY#F zWJG*XMFtMZILelR+o?A6p8O$LZH$5oAKS20+l5KVEzyRB zNOza~9M3=cqTfPzaZEdW#t1jre8|eMyy+=1T1|(qa=~=ZE^*SnbBOy!wA*7^u&fkXLc4Sp-{FCJ_`;3--VXwR}n$y5!81gl0_ryklr{5;J0_A!hU^M1OavdV8Cyc7`r zO4n*Za{H?N@ux8Q8(Z4e6cO4?H-_ev(d;2q<8X3ZVtlltg!|~79J4DB6bh+V7urla zO)J{3@UdBdtTg|K3fwDt_Lu$@b0ycIK_&p#8+ zM9QEk1l&nBmZIcW3BsbwrNe5-{<_LlK|x9eOQPsfJlhx1(C~5g{io~Zscvjb*HzM+ zJ>JZ!_54fsVcB*!oep-fTPdrzy)MR3uk64Ic_PtaVZM8Y^@!Z@o~Usihn2N#XIBFs zNyZviRXar|uj{ux=O@;7TvtkkRK3&-#zlHpd*l@v^*x5WNzxS43(()CSu$VYfmvBs zhOPQ+1wo8PWFg=Vhq*Jt9&kjcBRev=@NdLp1b#nnGmx)TZaam>jnfKRg+R_qpJgYf zU|~GpR%^A8VLd$m25f8iLoaT2*)!PBiRae}&nXKua$c<%_`F!{)q5I4^IorlpTyWU z?Q!`Row~dNGf`!#N%Lq@bAxG;5bDtv(OWkIqwi`=Gmy|$&hYbOKc3ob+YT6lMD66Y z|HeqXdC+~#`rul-8ZfoL=L8Jl^S=V6NB-EO@OxWz zM+b7cox=}C&*a;vf(QUp;aIT()?L3jM$YYRE%f7V+?B+`3~4Txx*N0Nc0A3zw4nV|(~lq3;Z(LJVJl(Y`DKbW z&Rmv7?9Y`=njq)+92|qhy7>nbXUUt!=Moif(D3*&T%`@1;eTjLkT68jm&az1y){P= zRDKzx9kg7-bCz-`uUI&}S%}e(`p4az0$c6(qYVU}to$RT+8FAQZH>8fb>!%B-GLs7|>wNHN8T5Yrl7?BG$1>`mDkvyb47{-%d=k~rSDZxH- zMW_!KA{`~s@BhLhBArUQe}AS$;#)9^r?q>2jQ=we!$Z830TtVsYsQj0-#g|53@oC8 z*2x{McW?gU-<$G-EyX?LSNaq32(hq(-GZ|}lEksdqf~H?UB8=HIZ#|l#lmD^p`nPs z@OKZ}d{Z%J+w|Tlp@C*igMYM;smYJ_Ey0*!^yxv_XPeI;V}b7ZS&YuLq>9tORYpVO zX2WwF{9>>MP;wJJ)}B}Xkb&>pK1j)wke)UjFYH_m#c1tbH~T=|9kd>_IEy{>A6%@D{|EajU=Z`=PB&gYXs~PY z?^!1=&9H_3z`LJDUOZSg!L*5@c@>9{z$~WV$$o_-wOBvtFW;&NA%SEn-Q71%I(G8> z+W3AAYv=OQ|F5@Dlz~0uhtn~pyy7xwW+`WC({xu!d5QN<;A?1%p$#6`X-hi{b{ZE* z8^)JQ-I$Zi{c%)QWXGHO8+gkG^k*qc&(3YQ5+Vt0ftd#<3R(=yF#_fH#))!|vhdi3 zOhaJXTg(xkB^CH;zBqVLB{JvV`3RtOGHZ)J$MJG?=6NGbn5nI_A3IkhU~#&XeW!A1 zg-y}S+n2t`)ujDA1k!%;LrFhZeNwnd2$yYNRjQ$aOj(S5z@jjZg=n-*DYOD@{H$Dn zr-JJfG+DE)#2QrDYHlXF0xslZN4eAeJf`6;Hx$j1w`8A#q~oLb4fT~RVk&cZ*ud|- zbZ3Q0g^SL$8`px<*;jpuqMPsg|DVQA1JG6ZUx<~k_I%ac40`V0qvgqxp)ov9Z@S1~ z=a5krU6YBC*oX^{s|>_AztDCn-WckYHnRU6N?qmJYfJlj*8cu$WhW^f>@UG#ZBrE} zpMG3Er{Fv8cJZRQ9a99-cwUKn=dp1$4C|b_tnS0l8FKl`d`#%>PQb(2T%->K=bl(}L&euX3f6$>jsG|n% z%Ec!%*TtsY9uq}smacqHBCE<@1r28Nhbjp%I=S_^jV%&>ReL<@!l{)mWyFr{P0d}a zsQUAydJxV&6tE%H{y1CvLTmN-L1ddp&)A*Nj=q?h41DKI@^7i0Yu5bUFHh3=>Aw6m zsim~?U;UWti@C*Ht>Y84otmd7IML;5zCm%=OOW!opMLA3Ywd^sjevAPPjNTp)5Jdc zm3LTJkPzls_Q$Pb0_NFduNoxV0Opk*2fC4Z=|BZ)@pj`Kh^X)D~rbUbz@b%`buL1^9ujwZk6`- z_>nY>FS)jH$8^26=KGqeaBUD(`@7rUkJq|`e}%%iW$EG~hB>k4|FY!8yq3olypB7I z+AU}I9=7WYSuQEOW z;V4Y-nbV)h5=Utq`#-F;(nN+8y`JNAyj3S)$7ffmg<)Z>6gx~k7Ju%{UD0@cyz(2P z*-1z1GAsY1t2-yi5Ta*yS?Jw&agV#E#P?(;|F`E>y~<_hKK*hb@%4dL{YUzN!E9FZiZ1yjlHK)ARc2pU%kgC|9DN(k5XYpT2Qp zFC*VgQ##$`3(}D7t5e$9fZHEZW65v*YJSG= znkX!Ed*ZbADPcyp(jGgg{jDnp#k4mw2X!)OJE;dO9Rucy)0_DOw+@O(NglT=g+zS8 z2Nv(`{{GW=^T<*bsM0;Ij_apPwHbKZ;*Ii9V_}E~t$P$E~f5+w3AKlQrJCq-I zoxyna>6#uR-KL4@AG!l3ezpDI3wKLWKD>;(X@9jUTw^P6_CWe`kLkdR*Jr6|-A_|G zC--Jg7&kh6hwUM$ls@l7rM=5yq>lDV+ZsQOnWN&r&2=Z6nH4>%{ogqC-fIxzyn3BK z!=Mp1$W+DWh$h4bE4P&UknB^b59fq4M*Q?J@4GXiLi^M3iaI1)0ELh+NJ+v%va!Ruj}Orf)EZn9?qzkGW{!C*9ag^OZPkVu@4J;VzPN= zga`bCIgtdPf4K+EPBozds5Ln5waI5LcW!vN-QlaA9;>lUl3ByJ67-K7c?)6IJ>CNc z6+I0G)qRt^OUcnnERd}nM5b%a&?Y@I^r60nhaALx>x_;@^Fk>@T*jX8zljZ{NBe`G zWC#BW6aeFaKm|~!W7{_DXW6{^wsx)G(sm<>y)`wc+(X&nHVl%!J!b0aQ&Lu3%7F5I zKW^^eO?b@d^Yr3-nsyem)I~9`q;lgq0uN{UJZ@O9Mgd`9CEcI<+ONc2&|t1?mzJSf z=8}s{aEi64cFfe~Tp>sQ;Sg6%zgZT8{0p$L5`t&biQL5+ilx!mi1$3al{ImAGCQ{A zEPnEL@|b+{v}n+;EVAx6aF8n{fcCDS$?AIvdo~`^XQ#Q?!bjO~g?DZK|BA7$nJ)-R zJ<XwUlw+VG*0bI^0B5o{r(4j;kStZsp|9q5$dYD;T zbT9j5_q(IHf@@X*Qq6#r(?4;=auNAf$j#y{+i((pj=Re8ZV69H|FI5|irc74aLeis z3(M@uU-IE&We47MmrAZeQ1_|+kof5!2*#zGxjOoK)nLDPT?@FGh$mYpz z2QyE~mIS<0JZ>sH0>Jw=?}o5uN<%t&83# ztMUj`(G8S^sGwWwJtFd(?YD4A`!?l*(kP0AeI0!PmKf4@>A#y%q;kPX z-fpj9`HH6$5toow_}xpi?R47&dc#eNZ}1w!t6h zC>e)-Sez)ARss^$hcx(ho~NSIYGxwC^4JFDSrNB;&%x(j!r6I1x#im-`eY&SnIYcs zFr3#Qvn)Kkg_u1wOY8qpLYtudsoj9i*xTd70TD`wfAlVXz%@#{f-cq~%9!En zgXz;vTF8!;n2h(Q0mV8&S)V4|La5qge(_^&Y<*#wmX~j5b5loF(4BBg#M>1C7RrlKlMVG zrORg4Uh%pM@dzzwtn7atc&^8r2mE0u(=veyt`lyHhGSRhU2>JpRp1ua3H#Nkkc9^d zYns-xHMdB>6srD^)e9NvJ=Q@az%*)Kze`k@7(AYMzvev&Dj~w&T}ZY!hZn&Qv_R6$ z4X(N=n#@!sTr>)2n4hgRu4#@!DKvzxbY8xq?7rkseRJZ)n_(JdPLbu0;|+@jtd!-S2-rQ8|dddmHr zN1WX}1kDixU8B!}AYn(!u!TsUPtZ-I;mb^EiJ86;$h+bSzH$WciY1f6#WfI3Yl+y! zZzLf9vbp$w;|LXGSTL02(!V1AkVAWbMWrH=&OZ$KGN2zt3RO77FOSAuvUBk~U87Lf za!e|}raE%p@avCqA#9Z2CdsbfIV6u=p{zMxlVJ?~4|-zsb^*8#2N=@=7p?;wg`$FG zOFH&7-puXJXzWIIZJzfy@VJf}wP)tb2~dt`KT}Cz30JY$vlaAw`s)(03CkP=aU~^O zEvSIKTOpku0+{2O#ca1BQ^B)7H@;Ti^)!H+cg@loq*NQYKL6sA)l0Ea*A;7f5WZ0Z zxow9weYtIzU+=W*76#?TMZfIi{5NgD&~f&%TAWj?Yc?1l7VAtm}vna2bY$DNG ztDWE%*w$M81^ycf7{96_LWMlSiOo{u)uXi}8H0rQt> z*X)#&7|dG-@4V%at-jHM;>5)}Nez3S^BScr)N`%(=yK21Itd@pb>=!iMkN~k12vR^XUN&}DpU*VxJK~pylw=`9oL@*69lp~J* zn>{f+bRi*JG=}-+)ORobu<){1p<&*28R|13KO|-qwd}B|XjN%!2m8=PK;}{AV;P>H z!*k{$pY8#4-b}?ilYV5Ad5+lYX|jxemcp(+p5S` zt&Iqwn$41+XGT5${)P1u7h9-$1W)`byY)x=@>|(_5>HY$6h@NCu!S;K0wZ6%3Xv1QORj0rWvkJ;z|KD#}*q${fl8`ytd})cmI)wvfY! z@8vX2e-HdieiKIo>WpY>SA2e_iCV%at(b17hbQqpfupre4|jk4bAm8HsyI{FvR!wG zThbmPA=sRAd1I_bUZP);zs!IRv+{);tu5D!&pdRn={pD`ywEZ7T&>{mH?!fHUITK% z^3RQR|JB$N#QA-^0V|wSEE5X%(IZwo-;Q3SQo_SbKm?QcUj&PVoU>$)^)8R6SNx{O zCta8a;8mf3X_Fzj?H(T4(T|}N?Y6ENW=5I$rjRxXAovb^ef+QL;Akw+AtDGEU%vo; zV>-d>!TCPUKF;sNqU%mj1+?}aACWu>zi76-!gvN0+PWVZYF~gU=$Ag7TsMzpZg%>L{N84nRYX*}4~J+bqE7!?BhnzQ@e5`YcQ$r8^n<7^dnRVIV>h>K?B{Um0yIsRyWxua3e%h&u z#(XH4xNO3obKrPd|4Ht%@7fOmbFkl3(4X&wCzU>mDdviZeffJm81?bZNtXAUFLE=@ zW*ayl+1wtg#{5dOtes@`@jX_ct2geH$DT1zS85i(-!Vi?1`GAG9oI&|s3K(LWn6Mp z7RE$)#*!47FB&-WoTga(c1a#u>Nq^@KkkmjTy1k{YaXSo&&8IKedbp%}GzjOkVE{WliR{xb2 z6v4Suoz_dUmHgt&Wc*|OdfnucY{$=g3iavq?ixs%s}>1uMaN0C@=I9)D*q)xfA~SO z^jO>Kq>o(BG(`XTDL78a%qJ6SNJ*`{kB%qS{TJPP zH7;y*5P3H`s2iA8x{J#B&skN5ng&`32g;xn`oNu1y8k1?1=mKC%?~_OnNASp1ASKj z#nmfe?ppIcPlG|So$>q`FW z=C5b#FfY)(z!wvenx;2Nk1qu@Ip`(!fh%%7PQ4pxO|W_i@E ziZdc&9+x~GFw$gCbEJts*(vq|x>Okm^vhA~%6Yva{{&u*&-NMINs7IP_E*FE0a^Z%x%`f=;(~4{6zqs3JYT4IbaRzB0-bAOZx5GQ@&XW@sm$eF2=_(q0*S@%OR-Qt&)# zRqNo=o=95$FT3;oLSxBp0t6{Dr(gq&L&BIgto<;bO3>=V=ng4OX?RefSz!99I308I z&-=OyOnVC(63R@6-M%(mBeLdn-^D)h|H+JN_7F>`e^Z--kv_DylLht7MH1~ZIK+uO z;+6#FB;`stYKepJujzT;t&i`Oy}jzko`d&%3m4E+SL{pceaR~Q2Ojlo2r@2BM48l55K(`LY*ep`nlx=`*>h?m&iA4L!UqevfWbkZ!9AUuc03&&b zc_@BD?sX?=0I(fKzo6B+5Ec|O272@3R)u#7tXLrkGPkZ#?SRE$Z^o0k+1l{GIzS2mRvEr5C} z^J+#$;WHn!{m}HotjO;IaBw@1|5CiasjAx*8EAnBiGTh3@ytsm5eDz6^10I6}Os8#O}2uvI^&2fn*n;cw=cUt`o+&(>rJ zPpL2uGg&glhu>v7O5=g1<_}*c5S#+}%k*kZ>REONUX6QjU7tIik*a@Gbzq!#Y~q_x zwYDoj%nn*$Ks{AXQ4$b~<)lQL{2je(TrSGvZIt%JRl)SbBzjQ!8eVLjxOgSa%VRgq z9>V)$bD;m4R`5U28(nc7?c08M4R1m<^|64Aex|a$E;@>vFr|En-QKi6M5aaffUVaW&XFvnF*qVxj!`;*;d+tE3YV@4KUx}>|i2p1( zT!=i}NH8n{1F4LTF#klWESqDHZ@=^YPEW(n{=YU0K>@E^m?u_5nh2ROjG}OeBMngHHm9Pfz%LZ?_wzdzSEk|w8Mf-0oxW#37OR{&tQY9)T&dlgx-3Tod2@jJs4C$%O-)2#W$;N&M#0|T&h?i6-*3Jvc>zWr4W)h$H_DwVY)mTH3x?uH-9`~ zU2%U<9j=ZL#D8U~IyYy~Bp=|S*D!u3cbm@{)xkw?m_oa&ghZf;r01;mJGQn9@-{T=zB*0?hk7IEP2jmOq-GKdWz%XGxMC0S0wnxd3lUKzlr2#y|@Nv3LEjnuZj< zS%oVWGW%eKXj-^i^f>Hh#oH?Gku(&Tkizb-%lF~p8TTxu zE*|q{iuVYND_I&uBs#`sqaPj9)@1F4sohRTLKNBBrNSP^Ib@r9l=-1~pXPrV1fs)? zW9d?4q5tIJ`qt$+v)+NrB9?$;|9#;5xNq2gpEVN+flV~lBVn@Qp7V=Ci^odt6uJ1hu+t%I&n;ZaH32OHV+ zN!UUe)mm^V(=^P_D#L!b3g57Ugar<6(YU55zb8m*`Xz__@XL3QNzKc>!+@uuc|saQ zUxAJ`X%3u!?dO^v5L^p+4MdSZ_C#K72W1d1rKCSb?HWH zTN}7{_bbi2Bl(z;^uN%%<@hcaKLj!V#t*t7Y8a_-$4vNKal%#$80o1G2-uleyq&Oc zoB}dZD!Cq<@feK;S412Yi4`t-APnl(RlwhR(e$3#uk^jv9xjhj3#WL>TY2CU-GS>d zyy5XrP)e^l*4OU8ey}J*Fy|louA0Uf_`vQRCJEsyOYFcTxJg`Di1#}ub`A;+-eig3 zShP6oLhiQ75D~|LKfVWTfOR4>zyK#cRxh!UA^7+$aR^bP1p1GRoS5i7C>et2XDiRs zK{S>5YiF}wDZt_`-%i5fEYV={D#;9Rc5N^LqG*G;3K3O;j=*54P z#sal+Wj2-MWb35h+%hpAVJ|VNWqhFOXdA2}N}4#{I_c|rzpK`nqv+Mp0sEGz(O1iy zX=w7*c7;lx@yNM7vIY6>IMH3O$WHPMICdv>I8$psnt`^TBUH|)Ta9Ma-u{>&xc|I) zVAdaZs*#NSD$9hHodUVSP_@zO#}97g&yG$3e?ijCN=l%#ZOzq9@?g-qkBAmJRv5`A zUaTH3q;pzqgXqI;-hD``h|N*-xWXI3rnWM+;rE-;3#^ApV2SNKZAh!Bro#Ow)Ym07 z8mM0!1pS~4yVGA9PiZmlEVWe>x04f}4UqmQ2SyNEAtpPq#Vo)fAVwfwj&q4RLI0_GWj{vCc{D!+79 zDK@eR;4|+|xgvv)%G?44d*Zz}c`)F}w7d6h|4*BYY+0I5IpjN@`YCYH1! zCjbRQHL6&~K;X&VjBX156iT+-4 zSmS|-6+u{mBkfENR4M*lqkbFmszCtysCNeWZMpCt>G_X&ygihcuLw0|58O{)k0QRN zW6AQkQ1|-De|9GR=*);J%&NLWo5KNM@SN3xfrom*Q3g2ou|*ZA(c3L0IZ5C>sw;~Cr4o#V}z!5yEgDh26*6lmlu zB7B`OwWlsjpyI7t=MK#niY3~F_S;?`QIB2$KyBHB96&m_==Jzh>B}-25O^5k9;-ps zu-w5Ca-tY6B?U$$^GWAS@}FGT+Vo)!Y%T7Nl$Hj^Ys<&CB#SZv&nMf?tdwScYZO8! zR2!7;T<9--Om(yeGQ|<4j9=@HP!ZZ_@ESXaqN~W!G_LM>HKFeAWW*h7 z&ZbeAI2lptLZKZfYt+-jDNc!K*Ib`P3jcEVB9l9Y!H*o$-nv30g&xw5lr@NuTVftd zk4>{(7VC}Zc4Fhe$%mCzdN8mks9v+|Zr96>vX&mJv~h1Ibw&uK^H}rFd7!N?p{@7@ zkw!Eu2cyKjL(g99re5JSO)^Ve4W6pix+9K>anM*O*ZcEIc#c825TPvCmT(}&T>!3f z@-%}pAI6Y8piz5|s7Pf4jYVl>O~c3k3o=~5`4#ZjtoT`W?N<||>NF4i@5(L)&Dr5t zqG40?E2oP~syN0saTVZ5I`gfAYz@<^r*4Z8=0rl?k*Z> zt!iv~WSh?GCZw`X#pY-^gZlCF)8P zODjLmUu^3lTwcocQD%;~?*lHOxYkV>3aj^=`Q1}$I+Po931*ue%;z6m(z14Y6CYVHUx$Hr6k*~igI=$4De1KEwcb|7K{_)w~ z*ap5d0UM#gtYwvY1pQg<4{q!R-s~HMECL$TJrsbMp}Ce+j+-ZaMSoM-A)mONS^cww z;*JDaXUK;Aggg=DJ)tDj)tYHiZU-evdfA@k|7B~Dq8+o^VL5i0^5O5T8)`mjam>3$ z$%Pm$lkN2fQ3uktpC+rGgOze0SQazft5&!BMX8~l<{G02!zgt|p4N}#H~OwyBsM?o z_otQu`wS8aY4$u?W}&h1+VW~F>IXaCtm_}xM6cH2O9y^N8Iaq>#=}Lxz(c&PW$W(f z3E=8wmsT) zTNjiz#4r~KtskW;ErNOVWhjfI#<*{}#Py||3pE&ArMq6`*2yD;cFfoh@ZCR;x9^#`Za9#3zCBgjkbT%NA^jNLvL5}eU$cKgo?Lrt=d zIF!oV>4PSojeGw4f7tuVs4BO9Ut&p#(k0zWH%KEbAV_zIG>CLAMWm5V0YyN%LmKJE zpgRN!3F*G`(fgj`-upfAo_jvr4|@!T1C)gibItj$`HREFYeCMARVxB1hnOZbBnxJJ zT1ru3OBb2f?UGQJ_<=FRC;z9?d69`%zGj{VODFKV9OY(uG8{CB%RdMB*zht~t$)mL zD@G7y{mRBRaUv(5rD)P}K%42sxo?Tu>p{{vU9(+7ZsNkcb;GGu^M z*{i7>qB9VMJoL~EX1xlZ*T{ERTnawYI`B1s-`GWJzo9);Lgy**W#mgk6595(objHZ zbEm2-nX?q?B`9Y(r@{RVdEef3AVBd<4$nWGpx~a}I=G0oW(XUgGV$@D_1ug=g z*bQnUH#0j&mR|ydT8@8V6(dg46IeG#I#xr@zNN4y-&*Fk0B@N9TUMj>7~7)z@5jUr+%3dqBVr3Dcd?T(9p_Fz}Y~xQag~F;U_qtFJL=bc$~E_ zqGNzw$6%b9$~kXn7Qy=gc&>jbW4cKu#qar1yIR!%J^;B+m2TB-SPq1Hem#3i8w9sX zwv9x$nS8SdFwN&($>d2-O7ksBS>ZEiJlM=}yf7h{q4v{f;3x4wzC~F|IF%0Q@!IeJ z-r6|VBxfbA1^*vCj8WAYSI_eKg8RHoV&#pWB|Yn<*BrqgUwlWigScQ2?d(gnvru<9 zxmd5+t2AN-p9DMqp) zGqd_0*W@r^Bwu;R@_CLXT_qWe{WSy`kjIcko%aBeV{dmLA)x`DDUPq_Zs+#ra zL1576c1fZ{!rsvGDJVu`dAV0y0mv5%HW2rI)n#*f?~WQdsf1+O)v@3{ndfxw(A`xs z?)t~mZingf27Ya<)HgKjYl(gpr$$h5N@V?=QP~)@6NU_}h1<~0(l;NC?5PI~h6u<* z`_esz(e_J?p9tgG8#2Yw?Svn9^iAQ9&i4sF%xKVfU4)AU3dg`db^Ae zbW>84FPd%?3ZpqGD@%;1qSVkQFdQj6-s<@1T9+*4nilZ$#2%%fM%AU?c+m2!;)hOHG0z>tVG306S5mL zaC&kU`6$FWjdv_vdHSW59K!LNFt!w&dpACDhC64-+3JbqkFRgTH$5r?Tl-5J&b!n#sTktaB)hU ze4jk6F9u^1?~$iapYg>}o&PSXy|*Z)C@tZKP{-I76hZ2upvn$Hy@pGMBQZ`sx{5pH zAk_{#n(~DpR)m9F1r!Ia6^0esv-& z?$BJ!Mjb}gauDAPje2n9ga#k$Wb?Fds>|6^5nQ<;>0LFTQ0J=*C;=I zCmShps9i%z=BV1~LWl0-KGp4VKaj%g@OvZN%CCOYF@bS#J-U5YBnFn4+ttQNk2qqf z79!ql$7surUP~#@fGiUefbZgc%m^2!mB)TRH3*bKjUD z1E=XQ#|Sz^K%)x%s+Y3IU^)ZSzeFD zM5UES(WrSvH*UHNwD9{hm5pM3`6P!+wq4yO z8Y3QXZdr8sN+5OGmr+8!Xsf`+Y})_FnE0W)YHN;-TGob3RQF_=Azto~oGR-hI-Kj_ z4zX9XIBVf_*#Xz5bfox3#or1KN(SgT~2qan~6NB67KsxP$$GG-Qv_dQBYE{4SVAVE7lr z*m2Q@nAy;we|kK1KP`QNP1Xo+;bpz(*#j6it^QSrn){Q~<0z?dt{4Fn=yMik!$l-d=P36J6fzg(Sk7@U7g zbm+SLfrz`9u<#2or`6itnl4UOZyCSJ(h}-Bv)LM7PKX?0+9rIyoY9^N3(Qz zr{wlKb_N}xoope*_4n1*>g1)vqRoFaXBm+Z`GwIeB~O_yia6@p@A}wQMZ+@n3hMiI ztaQGc1GaHQJu4;MqLYhvr&c3h=K~$Fr7?5U+Oc|eyE#%?I;4;f-y5*Ni8|8WrS@!M zEfFb}*skv(Mwtt;>Umo?mH75)zR=3yWSc)pM)RgG%{NYd<{vK}m$2RP*15qTPpW^# z(Db>1p1@z^Z5W~lxm!2q~kT8gcC$J}iuGAJ5haCt;HWJi+WJw#&R)~)ZZ`rIdQHK%ak zINplvXFv-U=R|ZA{vbj?sU6ec8hCPLQssBm#2CWfKbQUX-m5StaFfhiBQJ%%#b+TZ z$8%JQp=l~I;dGvyR4^U*~709I{6aIzqwH%CLbTiRZm{=AO?Tb z?m8vT7(XZGu1h=h3o@>p2)|}|+@vS_A)*W+`SotsD4+NUPn^Bwavb~KNU-DUxymI^ zC9>FogEJTRUF_;~iSlZEN@Fg;yDOHC)1eWoef(>b*qIPcnd=PEF7?Fe$rzor+L--W z8B)`+PxE3kUYSwB3^bU&ZYCHk8F!Eoz%)*$)db>OCO=FCb+sb;VSY)7X)S-FdI8>Z z1RZoDeW%usZSp9raEoU)hMn>y&GN<$DLv7J5$4fvk?wJkBwZ><0n6Xxnec5&5}|jK z9|yWQ>Ux<9p6J={yKs5aAq9RsGVf+o6X$XwH6Xl_@bCWCzN<13v_$ocQs=xtmxfKg zf`u-&(m`_+TvxEGY*iLU4`f{G$ix$t6XTQUuy@NOqp^ST23ajeJh>7xN289%HjJe> zq@}wE?P1N+8{ZjYSFPi(pFT7nA70Y(3W#5DmktO=TENdx_aQFcjM= zp3*ql>ku;+u)$5TlRbu|qxg+m=Rs|gv9@^#c!t5)NDY-;M=%M4NrTaD zgDq-xrZ;a;G(;LO2z5x!Ya#SNc}-FCgB%RL7KI>bYr+_*Zmn)E^l&uDN=uR^PJz43 zX`8x$B|fi?B$+a%C*PqU+xInwYRwtygj@Nx@EqQjwfTfn8XJ65G~JWLXXzmCQu^=} z%`?7Sy+;KNHOkNHe5{UV=FcRh37gc^FKF;^ z?1_Aj?wIu*g>M_r&dZGu`PGMp&vi=)$8DvCs-GX8gDrvw*{E^MAMnWs0C zG3zZlzouW$@*!w>ON8$Z1%_Gb= zHO#|lqr@(cOMxIrNU`&vixnRJqM;5 zQdXE0TD=|atsW_7T6X%5g&DyTOHtED;7YDLcV!tO#FV^7dfLnVVSnwjz6WoO`F12J;vCo*Qj&RElwU z@?8_ZzF^rrn{dvP8{tbWG0Pa%BZPfM^BSclbM3nv8Oj;?x->U$a$ELu@J|8#!Zs|w z9pt?VKIU<3)Rx_^OI#Co2tMu(EW~z`&LNsU02r|Zqv^5cRCRDM;ivdDT`JCCqfQV^ z0+B`@u`uV`6=3j{;AP#9a985oez<>eYafH}xOz+%$TwUj8n7SV!&^{2tUhFJy1VGp zV6&r?Z#%XX$EOH1$Fi~3Bc?DqPo>4S2GBG3&?^~VKF_@3W6jIN9|UH@9~hjq zAATw)syKz$kXir_9XQT3z3X}=80O+>nbfWFM0aB zPv5D3(4ak|ir~A!hq}e+ToJONj;^TB`HU$OJY7+^rg>je!2V7$`o9eub4X@3s z7_uRa#=ZIMjl6WH5C zxB0Wf%5;?j(%(aXXkdCv&}t*T;Xzey<95Iy#~NBcFMS|jDeJ>;Fv3j0_1;YQJi^mX z$PI^3RB~strJ_%o$RLj4Mfch2qVEn%dwT>g`YR)%45V1Y1bUq~NmU81gT5V~u0Yly zffE=d=pVfx<-DQ+wX$6Zv4pa$b20B3zDg7Miqn~&7A<`>%^|`3vm)cc(!qQKxcACw zC5Dw*n0|Y^Zbp?XV>c5cNEh#*){2fdHCiFI`r_@4IbhE?4P%neo@(*P?4HCPrz0Rk zh9e|U=PNT!1cEzT?>PBt3Z&~Xu(cN)H@sAw#r!0+NyAn)#K!;8B|5#!k9 zPX0$Mc`(A-IR=e4Gj!;%80Y2{KN3`Oi|@LAEa$q%-&ts>ktIG%lZqaeMI~=eL}o6% z_0pL4+oHcE;nQ|BR}S2jm~Y4dG%E?Z=KTG~SR3cDRKY_FL!PCW4@u;COqqX>{t!ZN zkEEOnwxX+@KMjOi>?ga17K_;mvHont7+|O50exwV_cq3NfJxr`L@8h#i8U|49(gyr zPH_I1{@{2?sAm_=aH}6o2G0408JbN>8h+eA-~Hwd%N5@CZf(e7UdQ?+{2GVwVUXqS z3M!EP|FV5gu}`WLR5ExkBz{DUhsKn|P$hY4Gb7Soa&|UrETWQREpfLv5~L<}!w&$7 z&F8_JsJFPvCNwgmeR`_T88}3{jI2pquG(33Msr$%4q3%8hA`WC=|=cFpS&(?e$p?) z+6-8MubG9lAXcJf$quiRfliZ!%QN!@fNH~)t6V=B4D%tz9dCFLzb!z+-zP^SSR_8o z`wg72kYnQX4G}TCIewqRwZkQ{lTjjA}G(*oAXRz?!z@)Kpb>D zvPYI(NHW>2!Zk@eJOBDKQRT9MI>7RJT7e#PhneLL7=5!#$zjgdX_TAHaLEK=mh=A5 zH3!V%${WZiNx}A$9BEW(8C(R|`53Qy_oL+fin*2bB}voR89uPCDkuATY;deCSXAy* z=T-P{Vc5;Ldz#^fA_Vh=OR&Nv6!$fFVPcRAr5@hs!#wm{%o2@Fa38Bc{$Yk;r?(Ov z3(2u?KE}hl`~x!{urykU9pG^@_u(Ra`sNg{U!X}Zw9>Sq(1f}7-gsj!fJ=n8BYv%fQP zz&%$n7xIfX<fo1-?O{QJf5N#FuAOl{>NG+a_V(m~_FOx5Ny z^d87!JQoZbKB7S86vd1a$)-^1y3dQwf>7o?0iTlHG9r>y$}6TfcRFKX#3~X8U~;yR z68CK01}TEY8T0HdE3Vy>JuR-tP9i0GY9F}%Gnl;-I}?T?!#I5VrG6asl+7mRev7MLC*b+K{TFeZ=}PPUwsF>a8(=CD+#*HSBFxl;8k3`H zka;`Ocs#Osu6Y~CyM6}*4~M6kod;<2!qoSD9=z*bj9A@y;hfI8!BA>KntzD9aqq(` zht4!sQCY{$T7Wjrd2^%WRrNJK*m5F4q=Co6b8Da2u^K-XM*vry2x;%1~exh zUSlU2FR|x>wOA^Cj_8Pg%cXo5l8`%g8Z(qOR>hu&Cl#6`yQ<|_Zmem**0GI|xY?B;SIpajP49<4$MTq@{`k10722Oh4W@_RId| zg?KH)i6ZnpmvYVdm%wO#=CfG~yq~Vd3Y@^|_lJ|VpD*L``adffOL`0MsPaBnEQjRg zwbdt*R2b_SM*QCKd>H_HvlNT$*gQ@cNUR|zTW%1?uBTCc*|%utoe-_f8RsAIN+E8= zG?)KM+-r_J??e4SU?C8%?!l=01`!Cv&&U16?8-6hxT=H2AtePKZF)V;gZLjK(~@YG zdA8>B^M*G`0K>wD?VW*vbs56vReX~{vM?S}pIt5vb9_q{n;8;=K* z(Y~f5fv-_v&w9uStzs8~ztm}c&2Z*$a2o=f8--H72!Oq>0x^a&XUk`g|IMdgX7;%`*RY!;;pO?>Y^>DoiBrf=F8=ZNhoi)Ao#Zpm> zT|N^f6GgQASiY%d6>HH?Ef)>6eIbOzUCcd$gopGuDH|=?7yz~C@~rtv=!R<5Q}iOU z!us$zwtP8U1STl)K_6&>-&>qv|WLF8t>|MGEuHB)5U?`*)DwkYB5Q~R?oQ2Pfq=V@Z)G4 z_YTjUb|98seFC9keP2Ju9g<0RHrTzZQC-9&e>CUsFQ}y~?Ku=I`3C6+xLn#UieXp~ z0R^w1sBBBl=<&;(bK(m$eP0-w^{mZ<9y1p#V$*dm(T*>hy-xVk63#{8*MrWzt zBa_+dW&h~s0&saQ?$+Y-k^`#_4JW9l+f8Tq6C;K54y7TMc_)++kiPKME;U1TAP6*$u8hs>BEcFij4|Zyhi7{pY6oRgs|R7 z2W5uXFv2!zb*XF#TPKC_SBt`181yL1Fv8ziN_KW~;e7;PH)AHUdu!=porOxDnEK~yM%d3{7g z2v2cQHD>E9@ZpTcz{F07d!M)?k_F>>O8AsylB@h9&FJeC`H4_Ab=y|?06C5;?~%94 z(=OOPP9j7WRo#cJ=43~jfxM%4`$jhodynE<@SB>=L+{v{>*Qi!&QWt6f8k6k13I#n z>*skiZ?jczoOQf@$bkIt;as;$>df9r1dI33s!*#)a|m+a+=8022rt21jl3^iyj{C$ zo;R#2e&*87*cKwc7u1$A8WT(Xj8Wq2GWw&bAq@K=A2ZwV5idel1h&?5XuW=QbLRQSRC9kU<#L0Ey` zDF78cKQ(1ziM{=*t+t_XfthAOSr3kSowZU0l=glPZT!rEY`Gx-+~(DyQ7YI3Fa-}%qTuINpR{7!Kye1BA*bu4L+bh}R`& zF=bv7ESU6+z1$G6b#XrUKQtFE;iwUr9Sv#;TIWrpO>YYg=M>n$Aqo%+_Gr*^Y~*b$ z4y|6|)^08AR&QOoA=plV-G)u-Od{O(^SGT39c3&pwxh;#o(HrSsUjwyVV9+<2QWDE z?;5nTx^XX};fzrw#Y9j7K2T>=;~@(YUOIwKkB2}{IO<@zPH%-hNcI-!*meVL&XzOx z9W6I*tTQ9aFsPlpFiW7)MXGz~ySLLWMf*%J@aBXV*X|y90nO;QqussI?&aIaCYPMV z^iF2c(uC;S9$iA8aMywve~bhdiZ0r%rp1n6e{2JMJ3`UpR;(PveN3;e&jS3xF6n?q zyx-uwg(kD=gEQaQ&(-(#Du;f=2*uu%;2~Y?1x#bu@p55!-pBl6C0_NA#j&rpn9}Rp z>o}6><1U2oR?bzvv#$APRJ(5!Gc?ZHPiTy3r`Su-MrzsaifzVT?DYmT>*WmOpN*X! zpgD=r2|PVR8@n^cGRHnhIZ|Jnq2d=G?qPv+d;MVXpojwSMVyu*_;beW4jZXmZj52v z!zk903ZBmDPWp6xi9(X{n8Lz00Ox^RQ^kq5@g6tcJHKad68Ab#(bX)3|!}>FFuZ*eXS32t)4| z04B%-{jnBa19xS|mA@`BEc$g;s&i(G%{m|w&qJhm zi*;hr5D12`cJw+_?7Dv!NP!)cO4l?Z8|_qYh21zpdYUKyL|uAXN-w-1PkX>s$}~%` z^PtQ35in$WQbD5kJ*Isb+z%^Wu#B!+Bsy<_`<^qNyYhNXFU!wHy&%-_OPp`+2yCLd zE3pmB+J@z&CIsUxBx1bi(H^s*tZ|j zqZLW6rae->(!N#RpD8#rIUrg148)U?La_>mQd!z4AJ4;4-RuF8iXYoTV`WbJ$Ei`f zEcV&A2@Z5158o+3$3uTtsU+gKlEqo0*ObF-pZy&}^Xq!G?`xZXt(wCB?adYi@bA2yz3H&T7qK}liS@`ag zy$lTuApf2{KhoMH1?7pcc%~nDmJ$;GyUOXJH^_+l<}8elkeq!jN0;wv$mDgdk%*cf zzT$7kMVrEjJNopl?rH69K892DUh!pK!%pA!^?X7cb=4YE z>*}j><{nZAZN}q-@==~->6XN}IEq$`2oG<}BbA4VHscn|>x1CdIIk2LE*sl2zFW9> z9~-8lHw0VfVF=0j>~-I0D(snDao>^x z65iU_p3!uM;P%yFP4jagv&rEb^wkq_K}mzwgs7QXU4k(>?jOs`f;77=3 zWbJ+fNLLlVKdbJLT6u7vt$`| z!{YSL@XucC%N4s=gS44nfa1N&vr`Pz+#gI{kZa~+418`Z0LXj>6 ziAEAQl><{i5=08YB%hwmT;k|y%qt~7PzJ30& zk5X`sPn8YPk3@Ovb!aDbVNBRbP2b|2Hc?!(#!Wf2EIw$(J6yN`z_ln)Sn)iZuu^;7 z0WcgSkm@*(@iV*EFeWPFqy+T{I@?DhOa%7(O7{B+2pabt0bDR(7`|Qxi?ST4O8)kh zvh`N5O^#ynr_Y1a5H9em1ycx(_%h|;XiXFEg>2_J@2ECy(Yy{rY4!uFyu!VTj0={c z3nZah=^1(bGARD-Jdmy0XDjP;BkV^HGDI8Iowjyfswe|aDOf@;iA=!fuOnDr zH1h{%{ll#HHaTP$f1LGc8}b+50cd4gMbpGL5hCy#X5O8ybXHV(_iEm9jf(C(r!J(P zkki=!l?xMGSXo=cTbVOZsBwrV_%EobR@0UJxC= zOGyt5J>#gvCrr8MEUN)&JDVP-;>e2t7+3gwWi}#l@r_RA_P?ll&t63j1;;;ps6@5Y zIC{~a4`tzwf62-%TE{*OEbQK^2d4Qjt-9P&iF2S$^8ZA^9qk44@ zQ~M=!Y31nIr`M?-oNao?G+0nm#yGZ0!QXE;%;+sad)@4@X!?FHFG+ETA2}^&0VI~md#%q9Kp1Or-WTAu9y|K>r?v0GSo!dS|?ja}6n zA@23>A8`2x^H<(GRZgE+OCCJN5Ipz89XC68{~@SvaAL^7#^|pL{QKVk4ti*dC0YH1 z#~29L1_G;TE`pPgigb*o_1dxc^op-?H?tFl)?#CVV^=UAoH4jwNIDB}`soKJdmW zdLJuS*INNi^0)u&`25>}5|?9^Rf%A5RPXi#dwee}=yV$>Xk~Yu00W=!yOG%mx=g~S z-?B`4c3_0ya^r0>_ktV zZ%h(%7P~ki+zWco6D80(RC!bRFTejkk_}kaStiU2+hm|u zBk!yF^?jMbpwH;7_>=-S77QV6b>Ds;lP%)+zbl0ST{JT^mbpA`xhm+k>nO(3^zp=QT2;SALUBfR8|LI%M zLWPs`4Jj4aNYWQpe!9N^ZVHK?y?VQfC3fzl4Kx6|SjI?yZcn%k6mmNiY=J-37phWl zwG*WF;I74!J^-9zIS2K}4bXiKf8)BKMsh`?n%8xkuxNw&^{>eE4~b6w$a3FiyaNEKX6M zvsRDO=!3E6zc2MIu+;gxpC*4THJ~Twp)CTT8sZtRKGqsc2*2>n`{%=Q+^z+18(Dq> zU{M8uAn_BlO+!9f{IkuzgSNS!mDomU8G&io^(6~k(s-?=ALqeUzcAj4#}leQKjj}Y z&Q~-=7<>SD1ruHVNNf(YNYJs|&olxxjT1!pfCQ<+!=DV6K^O81$dtz|-%kJUBVS_e3l3Qz+ajrto=2M zwanuj8$}J?oO>^?VTZEaub4*R>r(W-jWH+BYoPsZmLTpQ!_n`d39xKsjcL&AAjU)~ zn8v<lljHdsu^5$3Y`|F>& zR2`_**-2hf_sr9vH)+gE`w7vGYLc?0$|Dh{MkbG__wpQv21!{$ZPNh{GkC$YJl=_eOHX>nt z{nuLvsTVU4vf=|P0s=VjhhYHqcm_Hkp7D8ELMD)CjDV*&Szu5wL(RAYl%awQ+$QLu zQ)CutUi^Lq12UIA2JXwemhWf(5G{X3a7aej9xPVN^u+5 z6D)P#-Yke+E{S~rl_Dj!QnwTWQgGSe-PJTFFfDiicvz1y@r&_9rvTyf-(uDuw#Wjt z({72;_0@A5JDSLawMH*NIau|@u)fLO(a>Ev168BnSM;x+pDG&1YiOcFje1gJ(^pnU zbY-!N{UnQL=PNm>4j7Ol&r}DLKo`WW_QXC5^xs`kk#;AF6NPd+{1y~E5tUNGD)KPy zfGS47XW_aL8l;mVYX*>!Qpf9B&9|y2EK^IDV-(zcim$~!Yr#_%#(}iFoPaVD%4H;k z6hlii^sC)RoNXM-!L($CY(H=t@L_89u(}k$C3CKVlO@e*f6e0`K`JZX zxi!MTo~B1X2fZVD-0ky&5`TLKc)1sJZVQU*Y=B?`!3R|ZRsu*}Hz36ah?rpR4TLbJNTP%m^?ZZKKQ?dw%df0rUrd+PIjMKX>hew3GWD z4?FCFwwEK!qE;0`skX~br%h%oa>C8nD{cP}0=Xw#2>+o4@P|t65Bn*qOBJ*WwO3ao zPFF^jN6saaBc-?=b3!?RCBAmWKZC*s^}D%0#F0Pdn&1BkSqeNDq9Dn7D4L=rl0N`` zsl6Tm*E^}2JjwkmPc~n{-f33?jNJ=IpCwXj`m90TO2F9rZJ$7&8`J#C8bs3SpkNmE;YGItx84v=0RU0u#C^e|>%`h%LY4QT3-rh|SCs5P+%0&v=0@XX8$fQ6@U z1?^#iuX0J;0*sWeF|WXs0Cxq5!tBq1ZBM=e#tj^EK6}sk8`qRfUOy+q05cpXZGenu z16~(f9KNUfrIR)V*?lOha$oTNuqS^;m0g;h^-XMw%QHETWy*>+yrIazW>GO*%SP-E zF6>c(M26^j$15Wfv&Xo%pi-2-97sM-wH;hG z`hkKoaPIPAXT@^`%`sUlPj11eXCp z&pJ?<^p~UQpV#*kHd@q__Y5Q%fYb;^{I#4?=Jth-W49m(UsO`Qu{A4 z<4+;vzxk!{I2ampZ(6BbK*ojt8y}CL04Q@@S@!2#@L%q@fBp?Er9e@`a(pQB^ye-1 zf3f2KowsT@7^KmN9c#1yonIImZUXfG2TC&}4vhYn-jz%oaQ1F3eD3^z|81{cGzuZs zJLVIiHpQw&dp4OfNv^!Et?hY9BZWrKeM7a@z(CEq;l2ghoj0m0T+*uD>i1|QUo*$O zkE`t-J}KE=^Y?pov{^NDeslHctZ>yc!)0*N8~Bu2VOeDy>C9cwiw7XU9})pC`E_rV zD|Bos@HHY54DDa}1O*qo96RIr|LoN=2I2t&@3ti_82<ujV?>_zSKK);u75qJ%`Fl9?uMGqLp2+<@k^2{e4A?S%k756RpS?2}WNH==02YT) zC=ej2N&<*1hDI^LzZM+?ZIrO;l{etShJh>YtRz4<3%y3DotXqc zU?@hdFLi5y*hCnBe>lq(xy~t))eo-oqSa|V4A${ z1Fp*1A)kap?gI|qV$_I@cA792)k5%a$dsQ&3jOX6oq}6&0#q_5@m=u0My;(fq}r+4 z0aT3Hy39fwkYH7Xz)9J~K$5Vy`8 z0x+f;mO-(rbJYt2_Zf|bE!Ps}k%Dgq^8f&In+Ej z>+JYY2uW~&s0o4V+?qo2!&{9|DSdXNiX0}rXi8~VQu=@uj1f!qxaoj~q$j0vLL{O+ zK(0CL0_4v7abVD3SDs_!z;I{{X1nxVAp(c*zrPi|22u=&OU&8u|sYzxTa}) z&RbEsC;e8UYGi=xmhB)LungEADnB;>-ZAiU)5Q`Pv>%gae5Jk#0O{}Lkw>JBJz` zMGwm6Aq1_|dTT01flUW86*>qP9ynOqZ89kR3@pkP7QbahQ9P=Glq13vFAoH&Sl5mk*p;!9XA z_r$I$f;VNO4QynXk?brhMI5|y-QjMCe9_h};82hXwo0Ll`v9nY;oP&DsbC<5Urtdt z?LhGvZ5c*$Td-WvO$|2wB+EQ~7rH(*ET4p~V*hQs!`C#xz2<(Ml|9kF{oSumIKF~g zL&XyV9w$^Y1QTII|KWZN&P;Ex6__D1c)bVU*NZqcds!RHV3t}R_XF3v1Brbcj!(+T z-w;y2EioJJhAskFre)cT+tk75ujvUPo0^b2#QnZP;JnuX#pwL)Y#J`~j)1ZJazLrv zCo3JD)YN#Xkmd-Kp*&{FU6W0Gi*?=kN$em#15I^vl^viEK(TC0S47e$y&EAF(yObX#&eI*nd!x8rGXMZMsr%}JrG=sIO-xHShT=9NA2`4IU1!hHETj5; zFyMwTnzqlt24&)a2Fb22hs!Kh-28zs041l|T%Pc8Ep={ZJA@&mI%N0D{6uUMFvM1e2Zvg^nRs5f{XZ8^Z~+Kp2}`cpV)QO9{UYo;IfEiT6@ zv(e1wByy1;@_lRuP`|Go0ND2sin@(YYF0gu0D%RfXS1*pb*&l!WOCE9*30dy%aWg2 z1!8-BadVM2|EL2Ta8e7ryqW>No)A!he65pf8osi2WG5Qx=2KdBWFqn@us1%*6M~qo zu<UIuKPA_^*@>QP3d&lxTIWX5=i zH=sz=^@n>^%`6L$9nw?aKa>aO4eNPu7w_}Sbs z{1KBFJ`s%eP8)2R&M&(_K|}-*w}jZdfh`(7 z$f62eCy%+?ov{(s*c*24S^og?5hpZA#+?;tr6k1;^_YA!>9&x$Y$)2+dXlYNdDO4>vQg2KJ36j#0?EponhGvVP?hb^g--S|ls?LC9=FeKB zdpwC59QVgKIkIbn*>00qgUXY4hILizeQ*+ z2k-YArk1xDApEKOG5;ACVQCJ}M@WT=ux+XUKam0?JIJ-2K!LSNy?J1;w9j`xi;@+H z2C!>5TtPL%CV($?K=ehHrsKr}MRI`3^~UiB#2WYYR(g%=vcteXTmO^$&OMEKjROrt zzKVV>g^RTTjlKw3U+~@myk7mdWvabkF&`4sC9rQAyMipG7a7G)kJ=lV50N#o>}G=Jy0p*NS3tcnj#C41P2 zrXH)1y>>i!UL5_(9){FPg8^WZX3%ZSo$!vS#S)0Bmsnlg5^_Jt^}zMjCtB3SE8*-u z0Iuo9hEz%+;Yv8+bpSkE{mPL^5#LyC_B!-~#A`uFj3-i&G#125GDNlmCX~$t5Xx{2 z9*e`m*6W?kMBluG` z%VYt&$L>wgACDe36$dqv+MN~#6xTVxbuggqOBOD3-P^G7f7}BHQt|0l& z0(deJIJ4451raO~GcaM++WDs)fGhE3OppfQ8(?MHSx zd9Kj}TmTLbv#TgYX(_OsPh8hyh74f5upMnz8qhMg_>s*w1bxy)VL=4OcoPk}Q8gal zWQ89|Q~xPJ^df=hWU%?m02z;lBOb|)!Tg!k%Xmmvssrd^rOZs$G=8`5fa;G(6Z*F;}BAVmNc{sH2i4}Ahw~5#+oZo=wXcn-omQBwjCa* zNX0*Ht%8mt4$ONrvEFklTne@Sso7B$uG!d{mPv{&wa0lE+nz|5?pS ze)aYe`aJN4HJ$Q&j7O`o4nr1t8dLeDe;#mYsmPUIgW1ttSkizSDc!XHuu^ev}^?{49X0r6!*Wsw8*x$nA8 zKVbP!k>AMT1eby!c`*IHJK-@nqgILDkVDfoB7F`hZgQIjD2+>_q=IiLN|(QFHK9b9 z8iG-J0+Epxt4e(Bi&HxQy-mAal&l2GmhY1sn@&POp4ROE%8ULlYz zXG=Uk1YRBe(VB?}kx$KY`x_~|2PcUF*)IPn0dECK71QC}wLit-0C6KEZruPS%=xf@mx&F_ z^c{dvqbo)AabHvPd;yCHGM~GjN`QPwi)NaWY{{gwp^l?tN0WNL7?Kx<`snCXp2|8B z-WCRgscVWIyWZef6M&tgoP8j5ZCnb~5c~kbA<;9tJoe}a`ttH{D;?Jnjf#o5+1*HY zd`R6?xxnzz>*t{_DE&P8xd0o(!Wl3|M!8WsV!x*L0ikA1sMHm)2+FTJlzFKNE5WRg zs*VM13s#4M(dj4CWQzon`=4WRjDZp8c@~8o7@$OrL{)Wv;q7Coz_joV`q&LUNJ0vK z!@`XTHZ0mCR-_RMz^_;Y{ald{)NmfyDO~utFALsHM&x5}IySwapc)(#prnbFN^9m; z4cWVW=$IyJf_-!kg6TyPlh4(up#3bA!sO}!b)rK($Y!q57g^Z^HOeRV+U@U^Q! zS=5pc3lhI6W%CMe$sNOsbuDo0vPG3aMsn7d+ELWE)$Mci+eAD2~vs} z)d_{N(>tp)7Nw*Q1W>=c-er&$wtGPa@4+)L1QU!?cP*G1*IKdQ4HbP<&=F}pX%leRYrn8s@&*;SRXX*ySl11$w%-F< z(je4$tqP5=;QU^vfkUXKm1*T+i<}Pf`1LFy% zoF7Qa>&RLuiD9itIArDE>4~;|R)xASL!mj>2C{SNY7{&b7+2W4jKq0212T^l`B~5M z$MIU?OkB)OzudAZJ88O(`v%~ZvV|0^K&GHZf@{8OP3c&EakK-mEb1l8u8%0Z_Q z4XqK>_UchB-`Pi55us35!gF^NXTydyT4WXKiIUcdGl_M=brm+BJ)%W=3Q0hmW_Bhq zK79#M9jz-MfeltRP;6RfkUG-zjo>PPy{z>gzD`I{k8 zpzO@f+G>a}{Mj;WiLOcP0Z?6E1eNGux@?K}%*Of@<&h+g;`l(*tLmrJjXefdG~>=M z$lZu5g3y>Cg%O>(TxVa~fofvJ+%k4Ey~Xhm+cu8AqMBLVIW1>0*-R5yP-Oz~Fy+`V zM5%KfLJQtF6ngi*XxzOlidH-8eLEj7b1&7~Dv zAD5}v13$0pr6IO98)c-`&iXROURmwi>9vkS@yC%Anksh17ZU4>{F?g8pzhfoDJj~W z!D&Stpl>=_63`RA2GkTpnlgfXeIsmJpu#|map{s3$yT?Sly;Z_$#1bC#7wOCI=lBo zUrPPt!5P%eipn*4!Uam+46NWD**Xt2f?9mNSxj$e!712`Iw4}ihfT=T#d}xOos#%y z6sPu+?kp&|Mw(0XHh|IZUY%)%G?o9f7Ej{wY>3~1+9JgwPzrc(F&@0(I{l1)J66U? zVl%8Z*P$r^G9Npz_1^HR0erz;GsaWDPx6ce&We1AqZ{UXl@GT4q2>uNoF%NQfmdk3 z51)vDNXYRo+rkZmcGXgy{S&}Z%^LzP+a~z*kt1NTRrf{4R@%;%>;Pwd zduEY>acjoZpKoi1rnFWqsUUTza{6ZAs<&GFV8YHlJ6F(^$3Q+8v0 z*{y@|8_i3RLUj&|*VfFZGwN&O;mKD4$TzzOk03wUexEh;wTY8A1OJDvH;;#UkN?F< zv>Z}V*`hcRLS)}nmaK)5ow74H$iAeUQ`wU(##XkBeH+VU>12ygmKltpL&!SGmSy<8 zKIh*1cziqe{{EeMjG6hom)GmLy{z{KRQtr2O+uf!{X{yAF{m>pjdlf%ZivJ!O42lA z=euJ{6NeiIY&Xrh7F{at;rhu-M5KO7Vc5f2*>s;6^xutD zMmmLj-@Hddqkcx=y)}V@wx7&{48#1IHAto9tC=q(mWBpsh%U>zZ5T-{c~ZaROT706 zYEm7_?Z0ar3_q#&@5+`53$j>?lnJnyO)0vNdAxWCmtDSuh%l*^=Bp+Tgp~G3J=A~q zTdm|s(`Vhua+e&m2)*b=&5DM~lwxrsu5R&m2t{(tIm~@upNfE(I%+&&u% zyL<`|p=TJvHbD9I|bwFSi@FPwq<5vky&Kmo${>QzkcYb;E{^@jF6OK`9uOh2ri6P3|-+$LEV0 z$GLiNfsoK@?3=r9Awb;fpgc9bO7Ac7e@u|iWEnj3*G1?**r)cF zw$zH!hY*mk9^B%scRZnWlcqL7wyJ*T8xH#04s3S>1y$jP+S*xgJ1$?^PFb|p+3Rpd z+pW2+QO(zj7Y@XGdn8-pCp}j2C8SC1rcKh`FMI52N_?w=e8 zNM%=Q<==z0ex>9gqc{34w(se^BO`f*vrfC`I(54*d@hT=k#?4r4i&M(Ynn@{0$3yo zXIGS;l8y^tJoJ(2dz{)hIpwHdPo~c212)A};mkv5Lqhr(4AbmD<70hm8AjT^kUMH- ziL1ve=J}m3G8Ag4V0H%=caK_Yvv+yNOqp%|-03FVHpKMn<15d#;7|5}NZqGL1Sw zJHYVn03w?VW~3@PquKt%NT6!V{Kl0vX?)yTIB2Dj93@q{sA*Zf(Z-#H;O;O}62t&% zhq^7h$z=0AyX>Ixt&vCEvy2Q?U?|rkvk1mNk(e2`Q}vQ(y4P84S?CsgwvGw%D ztuBUS z9uRU$Gz9qhS{;GMA3gyghJ~q^!`S8fiFBAq&^m8(9)~-gVm0zNd zQMkUKve~)3yH>paLisd&16sntrso0Sb5&}yX7FbZnS8+FVZ_3>V^-03Ra5G@l!yijG%AzAJ)C+!{Ao zde%s;mA@*dO_fMcX5MK?T~bGFk_iUJ;d)$7DA9z^udzUJE7byKQQL=s>3*S7?-@v05glkHj^{mE^Z+83mtNO_B)9M; zHwwYdMqNCE1~E~PRMsfDe4Y}ZnQ%x`d!xxD?;Wuni49xwdd|Rm*5&p?YQ|zMIc(NI zjbp<{u?~$0L~z1hG3}KEOY6<5)HCx%^XlC@;-&IT>%xYg#%lUwWq9_#KaGY#+KsE? zyE{|SVrN~R+b2|!lL~A=pV1D;mJK#OO7dv!&w?YWlrG+AGPH$Z)GEWV*G_aLpD(p={P{^?Kgloyu?* z0iyhNCBz||LzE(mc{_8maZ>?S?zO{FtiKzp92lNW-PusU%>iT;^)vt_8Vqdv+4-Wa z(fRi!wp?uK^k{n2gAz);RhW{`9vtd%d|$bI)(}baOVWC4ZUoH zyQ1!yw1o~ACz2B9=DP}qUhPjH&y)+4>6?e@oOB)9pUV1A<5gBz3|loSAqM5F*It2I zaXXTuLG^HxOwQu9&IsF?kBy(+Oh1$x1++rVP}uRTD=-H0sbQ!wlJu$GUG^fAV4ij; zXCaO$0v2Rh0DuEglfX-;XHY7$u%|mWU~igA1v+ndW$i&>v5ak!&7R)9y6LpnUdb^j zC3rGNE21=-bt&0hAg;3BuPxLTf4WoC(sPQfNXUyCyEp*ZgQ%9Uc3&j|XQw0A-N}Rf zEz(4G-h~)mrXi7moCz#yXm@9f*o^ZITKlu!Gv4Qt;(e7)<+$D4kteK4ck{l)&5m}y zjo+nwTeDB8D6Z0??NIN2A-=wnUvgUgxL-GJ7Xc=;=-R3W$50)$RolDO;+`b}^pUKB z&ui{T%}O;p88K9e`>tMOsu7(^Z}|2)I;BAGraIRRz`t7BvDz6A1?yY($t=_u>QAW1 z2`yq%cp>`6l;$Jpr0!6ENrU(;)MR<@ntRP>jg8>%^~!l)>Zc%Gs_Z~IX8NF{x=#qf zAO8K2)YC1;j868y+#xV~F-5vL6~1`vw=k)2@7$by$U#RlW9QHF>{}kIO&P+g=g$xm zUbZyk*%l8pO(Re{?+P43Xw9Wm;O|Y>C`t7U>O2-YGLxZ#ZU&Wr57mguFZ*;anYQpZ zK?zlc?@+$=j!S(nE^1LPgko$}TqyP9V6rWA3(|2%%&iW%wmQ7x$ITfUJlZyb;VSTO zuhJSVief!!0lNxjfwP#1^9$V*u z_7q-(zLyoC`kPdLvvHozCJQbB)TMpqfkqx8fHeb4tLHfn6kJ3;&;9Ik5m}|OwOljT z**oi|QfK0$X(V?Pf*s#@NhGo&{x#dh4TRfw*%X1@6^BshQhSPS6=gALI;O>Sy_AyZrNe8YxfRDS~P?@ackmWrwG_*065 zUT-6uX0)zCs-^cW5vG#j{O~M85-KfVAbfY=ZRr`8=gxi#1L2JXGg6p7t!6Fjp9${5 zI5DQ@#bgj+xs$YLC2J)wmsQ0gCD2(j`VPGAO$H2Bp!O+BaaEq_LZ62tzC_05i>Jt@ zQ{m}dp|b7DvT>W^HH$+xLxb$Ebctj$Joc*%`S<|J69ttFn zU3{er{;?>(3AwYTM?ZyO+|S`;TJeBwAFk;cqan&n=5I+RS$F*2RsIetYH{C<%4NpO zi?P7JU|1m-wrV+8K=ta0Z(kfV%rTw$@wt$7#28M&#W7qW!#{o>>rWZH^}LIf7^!K@ zYppRqp5;a~Ue;9Exg)}a?(?{7|2}eG-!aWvVkGYo*=(Bi!cdA#90{u%zG~rKr9B*a zeVQ%CM}&#Zlhnk@Xc}Fj6YF4ZGyPWo(b;5oF4%|3JsK7+e}suJ8JAls^XKLC;kGzF z>vO!d(V=B>Clxhzq9+Pi|FqG0wCqm0McZ8~snz0*H&ne%n&D(Ivh~Ns)))92P3>bF zD6w0xJeH>_TM(hgQq^Y-`-2^15GgJea)S+O$3y*dnS0A~Gv4vjJ2+%c$wpGrSw9*@ zyMpROJB?J3zr#c5!kA#yn?G?C1fSLf)-E zr!4vAC%ZNT9%>RIf4YS=dVA~#y!Kw7L&EJme$*3C?w;$H==Y4v6td9V%?TIt8rl-E z(~-lam$I}%U-2mARmuVEP&VLgq%N{mPrNVRlqTO!8NkE-o_Fw;Tcm)=)(dvQGQ7+4K(}if{a%)uPcj4UhZLSRP@jaWHafsCpe!S3 zp=e_<*ki0>0h?8!62mC%b>hh|+~byMXZW(lvKeX|WdyR?xDD(*MOJH8x~`riMtEqi z^JSrVMrq7-jynn(eo}Muo%i9Wu

    p1?K3p~*yhwsgG8d6@5b7+U3#o_V5z*UsZN26(+3Jco>_CZ4^Yh@opWj$s(@Z@#f7&R!T`?ZcTC>y;e&_U6X;+>?*RqNVoVB<=4_r@TuRG^HGK z?YaeVg?INJ>P@BoA>cV50Bqm72^k^!K@4xE8?vB?o)gF8cyDj^#fDX@F#z5eD<~Ie z#tDpIj~zQ2CypJDDdewh^O|EBFzO~E>wN0R)F%S#Xf#l_rAyIMp`RFH@T!S;dh$%1 z>mP~pmx+`$bUixT<`Ru`ajd|Adf}3msAoL|RY;j*BYm3dA$>KML#5{_rr*1Vd*cUt z4$-IcSYun5!x$hVd!1mgS37CsrMc$IZ^==?3c%d1rqc^O0rpTQMkZ$;YYll>HJO8O zFLcvKyos1@w0ObEm+b4Zr`C6sm+0!fpKC=*D z_GEIF%o>tbfH8ZTg}^KXe(ND1ekx5OJ)_f`l)C{H?-lekQR8tm{l*(_fF~VGny0g~ zGifHB`YeRsAx%CrN$ZsK^-SHKnR$NhZ|Nj(4-H9C<%)B7+jw*LQE=~b;8Eyr;dm97 z_-RO5jS*>WBZj2t&t=q4@R+2Gz-0=06-2G1Tb12_--w0X#*ri-K(U}<_z#Z;92LB( zMuS0g_zbQv%CT+zYVh<;=q}WOw_`~9(^m+<(3{`YK+(V>%H^Rvz}qw`l{g_nBlxt> zbgE;S<0BX_4qr%vM0G92)7+EfA$gXTvMxqbtV72{L&)A@(O>kL#*!1`L-4Au&<1!SW5}(>=fnb#S?T<#sS)yMAY6sB z@UyX)paYLR`82u|bvOnGkKc7PcH=l@P7`eaKb=N6dUF&V59ql$b6ODXNjJ_#cejCh zV$e8A00@YWVGKj-pn2w??^;j4Od$8t7*u^5VXMxrIs?;F(2umKkVnE3qwl1JQwE9N zZ=vS^Q6Uin92pMay5Pd_VMfvY9pyV>xs9~5v7|pi^fhQKbhM#s=o5prR6!sr!*pyo z9yP?QhjyC8C{evkBc#?qFl*eYzIk0kb2Q9t2S*?n0{V!`2PbIz*vLQzhiOn|jINHl ziVGO?51@0iqI&_f9&p=zHNO4hm(W96NE;Xne7CWwFeDv9hf}$0J>RLP4v22E{RZ&R zkai3{fd;qo3q;r*1Ib4quX;xg+iDF!d2tAbIO>`-;rvUu89>LNKy#p{Tbf&99Qx@R zdM!r6t%b&KoY%^@fChnXSKp}?2gSD8F*N}k(owR!NJiLA^s3bBX##%IYD>|Jf9mP& z^ecw4dvQqAM?_Mb$2%5kfPW1Sbbih&+#?gh|3a?I9Lu>zJM&y%V8tjeI2iIX3P(7O z?1FQ|k4lnKvX_gw>Tfy%$4L9(R5_#&{K?6X(|neT?6Xr`}`i` z=C&Ru88UH}Uv}#o)H8o`raW^wX3a61?i>O|FAK}tsf76LJH@Y=_e-AGEnZj_z@M_9 z$`~@=tRd-#Avt?J3xQuR1jP4d4M~5!eej8W{Znm7%C2Dq2|eT81o2TI)YsP+ue|a~ zy#3yOnAdf&7~w(3(vE1ylc)xW8iyK@^a9G{r%s*5ljZSv_|d20i6@?b$-OSxAz(EA z)A(zcaPE3NsRy~0QKW&E*npc=u@}wUwnR{hRNj?OJ2RE{y*KkwS)OM%JvTOmL%*$t zq%#o!jWZS2wGfp@0ht0pg>?$u?Ca;AdoKR$&;Be0eUCo+XbM6^gncKGco5Ul2vxXy zPo+guNsQ*j9sZeFH;H8heb&c%S|5pG1%zE)U0Ig}cmXxCo{EtzNFnB;FqeWV>p(w? zU@N?XGDI1)Fh1ZmNpzR@7(}({(FlPM;um9#qEJ#Z?%{nDNot(lK;0@8#!j7e{e z%$XzY4jXm{*-ArFi9oS!Bey8SnntO05<&75M2mvQIS>qU(_0XNPlycFprH=&s5*rw z;{l8|iSo(6QmN3|DljwxRUPxW8KG)R3sImTawJOh`Z+|@&Gb+MAy+3cr`V0}YKZ2{ zn*&_uBJCO@{|yK-BPGt8*OYyu67Q&jZ=^3H7zj*2&?yj6=q(Z0h7qTcK#f#31W_r$ z=or#N?f`u$p(InIwY7!&MCKx&#JLI{_PvI#P;hB{;5Zne4A%?S5xx4z7-^aVu}%Mu zAndtDR4b!VDF7V3aUDhDo3U^K!ej(i_I3Z|3rW~6>%=n@o}=a>_}p>dc8DyPA8+-< z#eNM9Y7yiU)e51SV`p;8F@ypHQdE~IBY8Q7giS&C6ogi(@LzPdkS}uNxk3aLD_kW9 z?ehJSIP-TJl1@P^-W-V5n$h^(FFcO$av^odfH!y`ElPl1&M}_C&Xhzu@5n@*pojTe z9z{K90N*MeQ;^h%sMcLn3-shr0ngZkcQ0EU>sPP9$%Er-D&EEb^&p0%8e{7T*!GO` zd*_ZFc$#jDegwRy@GyOfsCPp+m2iz6LxQ?_9p2xzZoyL+5qt+HF(my-oH%g;!S9lI z^x=nN&6-82l&}XQ*KhymhbY|F#Y)~;gQ4xRm5V6@L((5>NO~UT7z|DgNEuh72>7cQ zYc&{hPiyVqTJE6AaZC?7p1?U~9`<}O;OJMz@vT0;)%Tg>=l{9GG3Gb^#|%kfKA{j_ zgOI)vM%`l8$hCN;?q1R!OPVnfMp{2b|cjKS@ zlYf%l{QuEE`bY7*zx%tPVWxd$pP20Lvd`_)U#5TVyhgWkYBZ_<<0n7)Nqp;D-%1B0 z;&Li?$rwI*^l0MW&4x%xU)MZ>*mJ|G(BX9PlM~|O>m0+e+nfa*HVDMTJ4%( ziLNE(xmZ&QhN|~Sd2*fSF2@+ci3y^S)?>(2SCirgn7G$t8;VVjJ$x_gu*y+W@#br< z#oi-$d2d@1=Pq51?!_JPH^2TwDn1=QaWnQGJrD=_j^!u5^!Vd(*ZQRxpt8>%>m`!w zUKDLu#HqItFWVL`!6W+0xOda4REBx&mE*Dh$dMQX2WxCnD8RnUzV*~24-f@l3HaYM zksD6Lp@aKjL{G%}b*oX%y9Xxv1mz#YF#?ex`0_wMco$=$9)rsf6c!ibjHc%TPo*N{|4B=d+y+Kgk7jIyzyjXeh(6QpYn?Qg+} z!(5E77PU18eh%W;Mf&=!{X`x;hcMxKsGRhr&p&~aggF7q7W?)djvo+7wWi6j)0TK+ zXM0n0FJBlNH>?IWqw)RcUnNo~I4Isi>oHWlLPYIJ1QY-J@Bc59(-3DaOvZut_s1>{ zacT`oAHYzliLr2{e=1&jQA5(6m_ziMDfUJUNv~i``<2I^Ap*k6^ssp94DfsI#ke?h z17{@QOW;$m$Qf!vx7?4)bKc_5%v7w2K%1Ml_qO7<_#*dRZ}SYPfP&I(L(;WGP`wA( zQGMR_P>xc?ylViL!BJ_J$wbWkUS~DpwZ+{mF@JyfPvW>)A6sA{loW_H~ znSa04hNP@S_U<59OQDw=u5*v#>|^P8X+K|5SSeneR-e#Lxn?_SVVxAT zW%-grMAfL8P`E{zGzXb+OzUEoYiSmryBAn~;)|4};G;&5t$e52XrvgDPD5}hSkx%B z3gc5m$IKz=Zr?)*kojdqQXWt)Ujuio26u*%qIeVtF(xf=Q3b862VNx1$dh&EU1&`J zKz(eI2Bdnw<(##*Y}@5oft&yQ9N(fGs$J}D;>Y=b8!`~`ZU2_Jfk&26T>HK+=Nz{_ ze6ReS&#X))udEyA3N2fdS=7NV{Hl`m5f(_Xq>;t$zbnaPa5_T+dLf4UC8Mm*gp zYU1am0=)RU3iI;veCBoHfV8hRaVXkCKi4|uD{U)>zde^@3>ehV|23n)n*IF9JGy*T3<*v5-hmAQHfj$&`l^iUNw^RKV%e1GZm#zs*))76P*nn1#S^ z5(G+q&!^FlRE$T~_&9sr4S2H}kLoOGkn;%99o^TJaWp{-8`Yp08nm^w9%GsmyCjBV zUx^OrU{EE+nTn1X6@bl7SwPZGiT0EmUU5#msB){syRys=Y?9s~@qTW{#ntV<+_wnP z;Yv}rpZ$t{*{{m}O1_bJhN;Bo#rsSCQaJ|1Nt7Gjid@fF+%vC;+@e-@;jF8wcq#feead^@>*v&1q~p0vxD+||ICDC@w;+|PDq-e z%z5jz8E?$&C~uQT8pSbZqS{3dSKduL+DsKZ{MN^_NdFWVwyjpamH zgBp_}pOY6pj!;H9xlU5%GGN<~nYFbTNf)vxODjI*cvUWx#!BM!`8_h2tYig`x8CLW z1eBS?@RI~9F7N2Ca$3iYeQRIXXW1W=sk2-A*S`OE|L)(#Km3RPFm~?TnR$ixNn{C* zGw=QJAOCSiE42&{-_ej%1629L;4NSexAweExK#r?r zOBctgW$1Ra!$V~%J01WHyghzX-Z0wYr%(0A{sRXvc*JuW@3p9yPC+-31usMHvuf3< zScZH_gHOvxRlscNjP)80_AbIF?&&#+i-=shVM7d|kp2GY zYt->F{LTq@sjcXsv_iJj#K}_^;?e+y#K@Y)VG7`$h>A+_tH@ly%=x1-xdwpK@Q|-x zxqySaY9azHjx{SgVhIY}$_dqlfnCW7UzucoBJ-0#GaE_Q?iy+kK@F7tUm^>oQpM!+u#pA0<0s> zU7U!X)BSP!@=!WZxO-J|til*|3Z?7w{R6SL?@C-n2Cja^6o#~GkQ1)%?uvOBN)8VW z=UHcmJYb_T2N6flU`%=E(L=*MI z=m1#N0-q`wt+|MD&Q!?t#U%<^Kl@X;;8H^JB~qaqzK(h-@U%1})rqXi)*}O#qqSio zx;k3p;k(vGcL#bAtN~5%yBcY%D*-zuUn;*>`Rwdz76PA92oyV4fm_WQl72=zakkpC z5SWF)Ck_E=8R-(~t&;vpdW$cW^o)9x|LH&dr}&dU`IC6;vBzTj_U#1rS)X*%>eZ{k z&C!2EXIt8=q-jdJ+jDu`QRTs9lp1MBiuzjUjQW+g_Qn3*^J$cc3matR7<7`Mnh5rF z8j^x5NgGOsRHLJoPP(MqrKZ8VOH8JaIh8n)w3B#_DiYBAWEw@+6DvdTH_8UTG7{yD zp{oQ<=)@t;##q}uH}E@+?EZCVj}d6V1!=Ho6wXmTH8?VsQB$uIFl1C&AP!=yYN2D% zb5w`4scIzVR$&B)Y;O*FuXPPgNk2#v-b9B%eN^=sY>NRnoU2XP~?7>8bkzSpUl^t?{a=b~gVkE34Xe3H7|kcWcq0MD-zg;Z_KrluNn z>rdn4rzM_#<_j?o$1UpQ?RoDYMzVc4sA-Sp*16QN2A;vy7=b>XoT@{=m-0rzaWNvS zp*^)#1F@h5dI@CvCOm}!qQ(xuV^GJg1s%_}c7sOXC>%Ww+ti3`b3O#ld~|>{2DQ(w zgTG(7ItZ?g;U+XdEpVxAWISR_>VDk_Lfwqc?OYI8#jQFr(wK4>!$%1v4N4uq@;h!q zKj`SqfDv`*fOt>%%2QAttnQAwKUK&8Yw45u=x#JnzVFNei=~i%X`7Nm@&bXWl%nahu$h@g`+*8MN#B1r$(qqia8wSsztwthMNBi2qwdBQY z+qM-xLt|WFZl1>hyR`lq#>YH#kZCZq6z?OH8%C~t4F_V^fU&ep8k5ooqeNuY15q<$ zs};V+JoLadp4BjQ5`FDK=;V3S?Ww1BCau2zz-8#9^Qog^6x}N5mm0>GQD1d}tkLh! z8j>pCr7@Z04#_1dI2Z*}RGz5wwB#I>IjJa>Eo7|DQRour#yJ>4&l$fK&)&B=?z_7? z$AWx-N#yGd&`FJaOC3|VM$kHrc^=Y_Ci}tv#UFor;WrAtS$XD0Cf5VMJe%$u0wtbZ zo_#Yx{t-pYye~h=RPH-PA5cnJQ1(^9pPe-%{Rm*r-kOELuMqpwAOa@>BSTY#;eGq|#oKSal}vpRBn`ccAhdJmy~*UBhqa8##Twe|+Px=@v{Xh^ zK+_0vbI;xPfHbX5p-wY`MU6;RV%8`zjms1W@lWKT+=~iW7u#2PuiVU1hjB({l=r<= z=JmJtz4q*;=LRT}`rB$q3K&vw=0c(%PQp_{vP1~{T|P6i)W7|=|2BniU;XM=QV8rjW%BpOB19`MTBh%+AZI^WH_KO1{hfE-iC15JH4T~DFkCi*Wm{W& zJn+y%L~YuTi1iYLL@EdrNrV)s3s|ve>XZh7R567_DocV47hYrv7W^pRy8*F#lX3s{ z-ro4jpYDo@`UO~sL3rXNMkDFM^V7_cR<`(m?3`oN0nIU~!m7e6>QN|x14|KYnxpc6 zJ5iq&F2bYK0t_hUL-!(+hXy2C)D4vE&%{NdwvGWuy&N?FJImIvZ4AZ07Ut}73@Dc` z?~LUuF&=`LLM9T&kDVZD*hS_#-_>9X0z+Z8GqD8=g3e_KfeCSWC<##oDH@(G zXlsq7%a-CT2xSAjOZD{hq=CT-1V?Rcb0Dx2EC`av;}n9UGiT1mr7KqvY}R7nw>%Bh zSFXa?7#izv&j6d_SqR*#5c4n^=y@Ysbs_j$&odUUD#9%dZ`O1n?CijR73$*# zQlo3|ByK{(42=+(>QE0}ONTH9AaW^6D8opj=FBBhn$c&dd(m=XM8|Ml5L}$|8ILmu z&`*SVCfQ|=n2Nlwi#1qy$*fM|fOHak-HH)P)Q%_kBJ`zjHr~w!R zF5^TcW>-1N@GK!%)X;C0>!~Yiaa|c|KH|{u7ljSxgAsr}(}tur`a`KO8nU4zPPenz zX9bibkoC5us2`qAGNtr@brS}}s^v@B-`2&pwGDwC4AI(tnERXrxt`TjA{XkpZ@IUy zX6a#RA#2o@ty>XJHe=`<@&3X7*!A9f5d0Y2Fh<;4T_fFJhfsj{+Lxb=E$dqX2gh;r z{VVbE%P+(9TL?33Jw`c;QxOyx*Lci2xIk5HjKiC-o{kC*oKj+5vvy?=+}_+h3B7( z6TK&5<+6@=g!S2oq{wPx_r4SH7vKM0RKt*4wGKnljhkZS>JHZVh#&soRRpwWVDw?o zgqJj#Q^R-_){s;t6)PRRC8L23stoY#Rl4wJ4N1L8w#<6F?|JzbCx=AkmA^JK`ToZY zNeg4NS{39mNSnsB+|+f}Eff}-VOox3NLr0S`Qk+jV3Lg{4pu~c)(GLRt=R`2mixN< z>WBAeuYE2W+?%j>O$c1se->PoBv@D9ir92S3I|Ss&-YtRd;01Mbso zNNUu0>!$+Pzx96%{UZ+?2mZ^f1SLU4fQ=6NtTjh;0(=Hnr7 z>-KwM3lWQrV7dTD7ABSnlr>Q9qKqk+w&;h%PhLF`|KCsFjgA%TG47ks{*7V_OQh?v zIFN><8IjaIQv5&XtrNVmj(Da#jYskxe~Ufa`NDnx9?{TP%evN&_xS+~9~)uDgQFpx zm_QL`+nSZ}-~-zN-6aGBg}~ySeTSp9y(2EdXkWWzY5d+-AE&LX>)j;=qBu(STw4Rs<S2jIN;86SP5a z&<{nk^m)?qfM~JG*x?t4UPJ~V>Ky~1d0H=!VS;_a#GQ>-+p#`O(=&=*W zapHm02H0=evIX3HCwoxDxpPA}QrL$#_*3a%L1i?gfyu6eC!_DwY1YEau>eJ^FFgG?IN;nMTkPL|JbwJ*YcZ!~ zF&-V869;Z?n8uKFQ9S(c7MS}H-}%w&sU)Sx$OZs<3E{#R>+T<+n7C^BoH%v%X6!w< zH{N;wK(sDg5D#qG7I&kZ1UeRH`_9CBd-uc%@Xs2A9d+Qglh72GG0Od&$DanyOA>y^ zPfW#Me)qdE%pScE0fkCT;|KVEOq?X!!_CB#nB?V|wXTZane!GAKP1aMQIHRT_IIE^kD&tDWPitTbj;RAC z>!tuUKQ6kAm))!cIQKN`$uxC#NZ z1Rm>&8oSn^pevcD&UxppaIwx=aq<_83~x{ozat$|;K=r$z{STj@ABN{(+T;C{ckzE zWwK4#Ex zve<9Ef9v_J_ln#_zT0oQSNoQ9dKNL`(XZ;K@-}5fMlMwDCf`Q+tct7lx4b}=|NJf9 zVSaxnJ`eutJ;#LO!}q=Kb9q0WO9MgcU-A;myyj7PQ3o=0@HXrtli%>Yl80oO$|z0V zE1#FVNbku`_}7~UhsNGhj@7_izRU(el4=C zQfcCsj3aUE0&V7e>wVxzeMf2I1oVcqxRD<-BnwCi?@fK{J>JA& zK_c%7e}+dDN5D~io1C|aFOmZ>Z*l5ZdZ-XgDu>~7$TXATpQ}M;a08&RMadezh zjw}lUWb`Dn!yT3tJ8f%-Y&(UKanJB9;|m^7pgW@aWH9H)Q>LL&K*y69f6MI<#^bn- z#ZfY?1fVq$#kl(30{P8jyqlhe4GVfS0Z9$#p6T$MGFZ+8Kq_Nt0R(4>+DcPWR?0QT zw~=2A$XiJe7Fk0yzpD?aEfSHfq~XLbl|7j;vP7LuF>l_+LEZ#1T@pBpCTD=MQ<1ad z9P~31am=FVzI}TNBXKfI$U@gH+02w>Bw~{Tax#?&Hv{MhyT_;(WRxj9l(0aZ14fL; z7`r&1=sU9clfWyK9=3zjo3u!o&oOj(sJbfb;C2|bw z4^yJ|d5twW6bpc)^u@@!5D*8tOP{AaIxYiA8LM)@oy_DgF*;yb2}I;2V(Px_>uqf* z@@M9yGz3*CJQvIaTG4zG2#5aaakU0MvNfP}OB+LoH5%ItXgWFe)}pb{(`VoR*ZJt{&6?lg0ZtYe!}`# zJ+9WkY7N|Xo_H5I)%nMN{72`V1Rxa;6wu&-eXX49$f6M-WZt%{$s?}Ay>(*an2L=p7(*6lY|G&h#8N9D#yDWiT#Q0$ z)>dJQ2v5p4)?xE;y`jx*ECdYB!-iP4$|VKZNN3@+rw}%QdhhR@rVg)LCr-$>Y};mK zIE%qN831m#z4rDwD=DjhJ|K7uJZC&Sn`nm#?3Beb%SK813D6biGw?LG;SG!Oa_!k?4q#7gIKY{*%a<;>bNz>Q zKWG)@g#Ac{_CAVa7T(G1qZu)O*VYM&P&MZ6zBOKdC6NqKjhDUyBcN8cAbI3@Tf23hK-a~d3vL?~LaMSEBdmY)QsBehA_uYR5<04GEdR(o6)f#wr4QS3> z1(LqIPCl}~?q47&B29=FdF+*Pp&McBv7<-qzkTx`te~VC0ukl|&-4Ogty{MaLZ|{l z2V-jpV|m(;N6;=j1`71m+SZOhc)|`JeB8a_)YPnX(1I2PH-dtwaRnX=&&o0py<~-J zQ*bRzg^lf_=YR#e&aWO!)Y zN&=EfsrcuA{^#$?=r{h4ub?2@h}|o^Zsm&7(A$L3vb&f}^&k+DeM^QHGHeri0?T;zW*=WU$`f zKWpu6t=0~cstBaXC}C3JC`wTP6$3s^%K)U2or));;5i)dxIye9x~oOJ65YBrLR6+9 z>lhrfv1vREQ-<8^WZqkDwd?bQcd}bBdwF=qOd=2PqO=v&E4mL5W>-rq{iWH8O4nLu zE=Ke)R;3jQw23^mDiRi6m|&_}nwzZ=4@zP@^Yilnk`@ygu^dHG3{2ku9;=8T3W!wg zq-vnZC@nGO2Tjo3Gr-tQM8R1^)y2{eQ}A>eFmdRPsj?-Q?LoUtWJWQx6-2b!y|J38 zjCj3;tE_8mva4+!03>p(wt9_Km*=1i0?S2N`}jU7(F7!IxY1(0{p0kX3=A9qyu<7$ zLYf<9ij!trVQ18c+9e3lrryHYa$7H-_+2ISEA%HZXaSHk$V1AlH~~qg0Fo|^+h?9T z;6PG_ssk+Ky;cgvIG&BA-%63L&FlP!B9RT6QWXHJTx2(L}HUgHRdozCmhJWWBUI|kKv#&m&c}IpM zn(Ll=@}RA)$*{gbBO+;|-MD$f3K$!;2yoWc6cYLEHXhB+BdnT5;f?Z_ca8uaDac9k zh=iFa;9I&D8Gns-9RZLG^iu#)E23p)dMrShB44XJi28Z-*m*ayme=X^Ys+m7-iB2# zZ=JYk*FmEy!tW@88yWZuNcyONq}7Sm*f5Derp`uigEq^&FF}Hg8rIjWalltuNhafa z$&S47y4|Gwr3hV~dFn92O6F0%_tM21M1^|;JN!7STEE`bZ`xvIl|e+(AN}aK-E8Z{ zqgoEVQBehH0VcLMc{;;LKwh*o2AFLkyEiU1?G?G)pTmC5jexNX21jJT>G_|qsS9a< z{G?5<^*Nh5aKyhZ@F?9T7UjGE8$oBIggT|z4%lF_jKRo6UY-*%Zb-)hXnJVCZnYq^ z>+QCt=0@wi*1&{0WYudkth$1>AL_G<@6>sTa&t3ie}6f@Io@ScpVB%mfw6?lI@fxt z^;$+Yy05jhs;bJp6UxK8)=Vkuou)&XE^w&~ZUia~*K$1h*x;4zgG66)q@bq)Gea8-> zYHo1H8FHeLhF8QafQ@-bP-T3@bZke@HQ0YYcF9t+iisu<0Nv>87z4#X`)DqZp^AW{ zicT7%IbK7@2e{@DGKtz9Ji>Pdn-a3VLf^#mviTW#{gdDynw0Ub{WcQZEzm~$_wTR* z1h?4v*|E3I;Vr%n59tLM6irwyPBK3I{G%=;zR`$7o+jvz&MvRNPd>iib^rjC!l0?K zg-FtuiKw~=2s9lU1o{oFMJZ$NkzFW)p!bfvdCr)G>6wAvOY~hCqMt>0o%C^`j}NCC z1uI8C)rF`noYQrrr_zUmHBCp+m+F`5!8(c##Ooylynv(!cdoO?AKisf8P|ClvQ~0f z2L~lm$@=XN(f%@ybfBP@%ik0!n)Srs zKvLDczDRqx(MI0kqL18LZaUJ6hVy@-Lz%$1r@3BzL-GJ!@aUk-1#~~p&z%j)0F%6D znHLlBZj+7?qYMrgnPXC9h)MsNMsc|Sow_Ijo1^y~@{Y#Jx15rvabtT6%F9Q>rBwWr|lC=ps+U++q4^41%9 zQvjZ$-%8nyy(;vYfOtfpQO59#a^|ABP|jgAE@apl>k9=>P(QBYAgR;q0@UKgHx9+A zfUeS!BuNoMd1f&@m6J6x0qh81lV+#8V~#7Np=7Jua`jiO`QyY^sjqnP3;FE6qbmDVfv_(J@#T7DyLI z7en#shO1xizWu*$5j z;f~L%>K%T`>pHBFpYf-B=y&5=Yaxq(8#U9Vfe{W=pi{P(fXNyUPZd09Dp(DteMb< zEPPt`MV{*DbPs?O(FLL%9RMi$CLkA(0m!*W0Ct3!;|bl+lPg<5Bdz>ixqoN6=rk+m zA#LWbMLyzm3ia&{KUn+k+(OySo!6s(hiw*KQ~TYyNiHB6kLV2TlJV%8cBPm6MlwTP z7yThRME4{Ql#EDnp+E*MfLh?}LhltoRL?3+C{xmXJ*)e=r#$8CR3OmsU7>7Izm?7% z+K^855#G}`s2sYl{-|?B+Hg=`)CYB%^i{9indr{|tPe$pRkQ_Ii7 zU`#`^johB~2!OZI1x_Q(5Ew~OKMLfC72TF1>Z%V*E~Xx$Xu1?J(yxO;g|Y_~M13^a zNgIB(zBlrGPy&_WCvU1p)tA~t?W_6;+fe;Q+sN>U{mVE1#eVZQf75jZ&pr2?%bl-Y zy=q5~9`%0ntH1iIcKGmNk4`GNweo%Cl~?TRU;nz>AV}vdhsIz0;ujrAs{8Hj?Ksc8 zWS1{rwi72#czV50U{USO&CT}R?|xU8-2UL9haR%8eB~>Cu50SM0yQSnXHGais#AyGnQ2O^;8EOVa#&$HB70G8+t2()ZS=Bdrp&~gKfA00 zkAJbqShdawaifv)(L80strK3bi4iToFJk9v}=<|2I|k?%}GCOU(>XNI<3 z#9ktSus(_C=9HrV%Jax@;_2ru!;lV7AXmyJCw56V@QR}kOp|Vc?~swWzExmd^~-ts zmfAFhI!i;IqIpE~wPZ94$Y0&bHF+=5U*{P&DafQ1)o7l3dcWrB+sunodLQkV$M{S~ z7Shw(kL>`FdXQCXOuH;aV~Bixu0u{j-YQ6NS8sg24RMU;UNyQ~EB|opc7;RX1|R zBgd1n@lk|Q0ZXM{5bq`aMs^z^{}$Gdj(Uf78LF>dYeg~uU*p>>fJ zQSedhY+G?^RClAD*JVTF2YR%_57ye&O*oAv4Wu`;E6wIQB1X)=l7+Son!W=-?Rowg9#< z^ovDk@F{?3c?5&0!B+8sP1!hgF*|pr*)CnFgHM7lfl-l7$?hFn>DPczX;;+IycdT= z@Mp3!5)USO%@hEs_^SuZ*=w)AeHJ@$Y>D9sriiXe=k&fe2Y(|zQBH@%Z{kZHKNShK zX&vLGEa2Cr>Yb)9iAF))3va;V{2(B%oj-dHkn2sNyJiCp9mfVc-(G&{Nv}K1T_5Bg%vFMRz~e2!pC-}aHdN$US#hrOPFcC&Gx!Gl z`4CV<{4_E*`1Uk9Wd$Hts@g7IYqIuRGd4JdoeIcl@mEwU^CN{+{}=Da*a|q2Kpx~w z34a2I)EadfXW`Cs)T6#QNX?VnVi-iW@JvVeZgjQ@^YF|Q1NP#+?e@q+8=On=RAhs1 zCLcqhT_p!mP#o1YlY^Jb=VG4=ls)$}(fB6$Sww~wmJQ*S&qYzCi6mYy1ZGo{ z8##@SV^CdN>&lz0TerDFQJ!1my;6*e6cZjnB6k(%%N2lPP`~=suiC+b2W>q-Ahn%90aEZu$)Kk`7i$^=yNc+djAB#m_9sC4gp}+wsUKZJ@)8++yD3z01!}{=OvxqPymk6diFos{hA(yckltrSL_ReXH^KV(rnldZRg-PPt z2n&tE1=1M2}r+FvNe@x6!V>f^bjEKwf&A>eI{20vH zH7ly#MPw)xkv#7dfD_s4&m=?%HTYFh*k(PTr!> zons_9L8~oTc~Pb_EE8Dj_XCJX1xYJ!Ji{=$<5WZzT(=bI=#TJPOC7+pe)|V++qJeX z+XmzHBgtoA(WVb0cJNf<#eixD#}t$dNwi3>imFQp!_GCILwo zr-v;gX2L%G%;UDHh6-k*i5)~LAZY>&wjxYPUFFQ3^6(5q*psW5BVhOR?8>HhY9oEr zzQFSz2Oy~fFH|R9AHny#0fpvw-}!8>r=SkRRLgt0l#eq=J0{0QnHLNNF&=Ueo=m~j zmjY%v@c0g?oUO6G-ND+u1O1HCc;=SSgRz+FV2u%2PX-F&+V|mMd;7+Gt8W1aif}=^ zvW#sMHCS_;6znO?W&4QSSyrA3;HJmDYfIstNgu7Qsvsh289lm)2TfM>6!h8y%# z<|qud)%VIvimbZ23czTA@I8R3-g3cI5mKkmeEO4CS(xr~)s@Rv?X9;@+BD;7?S_rE zY1?)yD#=EGWA^47C#m}cz=(LwzpV;CNY3b zBVDbA6KA|{%d5YD4gkiW!{VhdW)HUaFQnE^(J0{_(kG&QLSekFX?;~1^;gk)GWrr2 zP@qx)N)H@3;B=dW%b`$S{ab>1t@*kZ=KYhZ_Rjk%qc**N6-at#?cDwMPYWc~yrcFO zeWqP~Lf5o~{Xy-kc}n-v5p*ibnfiy?Tgn9)S*iV;#?x5fpRV`!_uG{#SKR5xpZ@8e zx}rkhWYLJqQ+-Fzs(-2f+-AO=1t0?1<$_*$7F=YXnqGjOfVRV{W#O74+g!WWp4h+F z9@@)%y8A&(#bL+*!qPLW<*#38L@Jq$&w3)+V*ryRKn~+%4#OFFl#h`y5OcW$NwqXE zz=Ih>V<_D9_0eN0NF{}bKrAvQlIQk`v0?Y5myS!szP=vY3Xt^4!w*_Mw2hol96xdi z?~Ydi#OFerPTS^+5_|dSy-u6dHx1e4rdGSy-UE#>XTNyhaeHuEF5dm2yBa&}~Q33(qo=iV$0AkrL$Py%{N0rU92y;id>k9EO_Y}({N z(jo-c>({SiPA;U~7H|U4;6`=b7}g}xhHgLvAt|A~yz(yqE?MNa=39ZeuxRx8R>nMw zXaZuOk>`<`$D{Pg$2mulygqW=R9lTR1B{AMmNeXKv?Irk;n{NxCC+x+fA9dx4d}6+ zDfc+p)ZFSbw~Wu$;RSW~&RW2p(0tH|*H{}aT)ski5ZFhcIny;ltP-5nbY9y3i9*${z|-kX1Z|x*wJg& zH!$e)b`tG3!Fr!KKWV@C%mL`&Oy<5NyLPkQ-n?*;NC%Vl?2c`AXz#zOEESxX+V11_JzGz4Jl03?!Wx>9NDRH`o)8?ZQ)iutGY$NG|a_C#9Eu zyP#hADf{Iz1!F*$d<$t=R~Tqs&>f8jr6Y6S{X;na=x+L|j~|fqj`p~FM~ft+7Q87V zt27WxOiwkw6G)a-YKcbONuh=HcHM}TQ&Uk0YaYh{bQUn%9EO4NNST_2GM9cl zg61(D&}b@Ac$Q|yZ2I;s=C|9H#aK_mLy~};TH6G=)Q2QMa3@0ND9X<~;O=plWJUvg zD@K;AeX*pOW1Z7{AqPc@lr6A;lXlQ0GUya=RmQ@~a~hz%B3&kRuI&^gm3hH@0FvW_AhtHdz8ex5b048lhT9zx?WlTR$ zl#wMV;#jw&@zxyT-kV8_*)F02CR~~lkeAn>Egk|Ow!=q+-^!hm>+b5++5sPwN z{7}%y?{SQ@yWi0{`|_pblc?u7UCvAA|Km3|$&><<`bZ-ZOcHXES=xPku+wIS@G@Lo zY=rntB+Sk?0rk6K*`Jeye_`eR=8%)_BdUtbTlmzE?Myt4XB0+Ln|1 zui#I}<427Q(nr^qo_qI`x*vTlOs{Kq-ivzGyYda`dEFNsKZ+M@fk`D}l@YjTchOj) zuYToMe#Le^xRZVW$b-HvgYJ0@4&tZ_fuHB;`_s@jiU1ajOv;CGN30mKnR#n?XB9{q z-43hgt2MA%1FJRg^Iij?Y)SHfZ+`Qe_O-8l%_9na=}TYoh=StvKaB3@r>R%1ywc<$ zb;V#2F&f~}&W>*D@4E%dBk*7%v}L**ycObDvml=pUnB)PA~0w*@m2wVRP=^c?qIFv zOaudKrdu64iNKwJog>vx+E!?QcT)#Rj*89?G2btkQ?_D1EQ)MaviUy!KEI74|bdH#9WlMt0fgytFyp8)+}`0yEI-sydZL zz@>Q_-(?}Bby-SSx1^QPot{xzl}A9i5NtRMC{p_IOj-VsUs$(6`$j4%atPZzJgQt& zv$FP0hA_qtog`_ce-hGS#Od0}A{k=ecXEaO|5({~!bDF6b`s z9f~M}d>5W7$cIDZ%=I7?-053h9x0077ae%dUE7~f-39VPwUz2ZZJ}e>eo8h%#FlS< z^Itq7X<1pB{q}GFHcrkqxUNI;!t2+s<0$it{qFDnuKmvM{0?pZ%;GJ}ci7fJgu4Z~n#|9n0ah@|3N?=FOX3el4fgufF=K%O#H=Kkj9F z{q@&fhpp$uD@raYU9!rrzNMqeuIqJmb@sP^`?qe#P+eV(K1Fi1^)A;e!B{pgFW+UG z0)Gh*sQx6!a|q1HJa8*l=epi}EtNS5xPG9g|K?jmq zxOf49TQ&a#bA`T3|Mf?ikvj5drg%`pT(&KbvdE-^!2 ze@s%ob43-P`zlg6Z|IrjIiEJvJiUYwf!^h7pBh237#44>9f89$e~Y@1K3Lg$Ib?hw zz_Lo=7lXI)EqpuIUCgN(h}4fR_&@p>S@6EFcF9NIrBBffWaA8IuYa`xXlGqy*L(P> z@6kzE9)5Y>^}eZZ4rL8WMgD2C*5R z-chJQ&IX{T=XT3S{C0Y``m zio=a1fSj&rp&W7WN779NQQFmh;&Qb?&x`&PJ>_(o6H&n}eY3vNpXC{jOE`l`h|NI9 zhs^{=2(uHz=nV&K&&~?$e`|1jO%zSC5_NV9&}2)?6wZfwxDaFIYl^M12FE~{J4kMH zv%Sk+{g0#ctx|%T6aZ44wWs!MvdtT?WhKDF&E|GH55R8;c}P`Bj@1<6sG2|sS-jxf zwRU^$Y#l{bcngtDFI>YZ?9e1O6MQ)i zx|h(y3P>uRL#YHZTtFX{l|lfS{A}B^qllx~skg7#W%%>Zfo?T6B|CRkSvr+AhHcPQ zY=hd`S_!^W?6xo^r5SG9EBaiv(3daw+iSV~zB#@WyU_Aj&InHW{* zPM7&;`bNM5!9O|c!XN%S?d8A8$hVLh(^32jM~%hzIx0Q4^>{3NaXdiM+1vg0(qlUq z54C9CgR!W7tzF|%M~!j{==thYIcR>$ZGZP zU2DMWmAm0l3GY^W(bu&GXj|qtJOloO8L8d)p>(T2Qm?AjKdUux-_(F;!BrsXebXF2 zT|w?wASo+2f^!+O;iV5j?gZgtPMtc1!Skr?-n|>6IlR^Ya*;P1F)cD?5`!WTX0VV4 z%!$AOH*emw?|kpy?GeBz4?n!eD%Y%W=42Y6jDV+FcLF8_X2chvsO2hh8m>*M?eOlh zG9l6g;dTAIGrfN6z81ZZ3Ho`DNUD0e*G*tid5-R&R1_@iGh%4OvWN+W|FF}S zy6l@jI!!dv9E(lO0nj8?&dDM_{*U=XT|wl}FUdN6mPn$B95Cven6`Wr^cxvBTWX77 z;9=}~hplI*-v)7gvj8WM218g}UI7z=cUTHHibtDZ>d@xXHn zgZ^>mo#~0&M0J_8n#vLY2h|8ah-%6>cSubD06+jqL_t(*zy0cQyG}k^3v=wy_FBqc z4#OE^r(yWN2ZNQtcUKT)tBSg-tSq$|s{b_6w7LPW$k2D>7GS_x`U!21TtGT0_f+dj zDG||O-wr#Glu&+7!tm%Fh2K6S>8M*Am4xTRIn0l`ru#6>%RtiDar@LW072@3?!9sMZ0o9_@bk;d1AyoS1#$LzUhk6>UVfe-zTD9N;epJlobTs0hnXf z(mQ8Ac;krOpe>V$#I*o(Jr6)a%3omKWPvhM%0%CJD9lo)6h%hhy2MYv=SQ7?m~AtxMrK(IIIg1xoXl|+HwfM9SQkm(H! zBF32ygNQ?uGb0EvGVQq+pEm5Lt+5T`-})xz=nnTF#uN$wN`?vxwicn)wyhfxfDGC3 zx6T73ow2IQ0^5k-D3`H6g$J$^XX>n>YXq;r#P^}>?!B76uy4-shM^kGv@$=@l!<&$D0nG(gh)RJ%=;Ub$3nuOB_m z95ZJdH*d2Cc0EMhC3!UESAKZP>YBSSfX-uH$CEXN6cXl)0iwT6MBtP(BH`f(Kuzm? zTJ5OKn>p;|L7N9R)ZUS^Fl~6_{f^2aeC{Wt`!GOKMI}{4QhCQt!mD07o}TB3Y?z6W z{2tn;fGB#4%k@Od4zYje8qUh2(L2YNip{Xp@IZ(fiueKSb}zs7+A;nwy(F zoqo%}w6T$>%0$YNQE8aJ^3u8bT-YBc0qP43DPt|(BHOj2!kuxvef$(a(q7sPr3{Pf9N#ws?eqN8Pcn~Z zF;}t%py)Vz`V<~TCGg*jLa5AX#^&aJj|$q>+2sl%s)72QM+rd`5_#sw@W_qb07lA? zMMCr#z__t8YC-7&CW$iL#>=A|EdX}qLKaayckkE?A6Up-#W(O>M~)wZenTO_{Qk^y z2Yf1R>6)~QfHNDL+MM2$P`nc713R~GW8I=2`vzE7>g+~i6PPJrQt+ILcDe^eOznoX z(0?+boO2$a3Fkze07;YSi_gFK39DRN2%U+NrvdMjtdDU-0*Fh%`3IdqhMpA_mA35x zoE41AS-~X~BV!nw5)GI9M@EO3Yli@m?k8e*J`quetgfNK&fIK-(2BR`c5b(WI5?qc zt#|mgedo3Ru**IDR$f+3zmKE8^UYBy)%EfnPfky-0+b^t16j*r3fDoQao zbPMS+?`8o#;yvxoZWrm5!NNu#WW0p*j2ngNzOMNZK|GN!;umoM5CTc}@3u5(5M}GM zBFA_PrQEB&Ug)%<@*suJ-AWnIMZtK`Pn`ucqG-hxdQoXLKS=zq^N;qXul#rcN$=7g z%ME*%`|sJ5A>ID&n;x|pnm;}P6(#+9929(f!W_VP=In_fl({%CVeU{=&sp(FjI&tA zYHVT>^E&m-p9HN(M1h$b8;3uYBbEecLPhOVpTlVgjK>mDH54^8Uh^(3(9l8VRY1UyMC;_+EWf!DP*FETHLK+<3=zq=j1u+e|?q0veB_8;FO z3Bq*mmE^}C`l+w@{6qa}Ely*hNo8VNnz@a3 zK<~(?R`si01`5Gk7ZfU(M}v7)^IT*TR zr1wF?uNGmo23BiewFd5^8W3G1`sjWGl0rJU@tb6s;;;L92Qb*fdXV)zIWZObDFeqP zY4GN0274?v3f^8S3IR0*A{B)xI!@Grr~&P)j6A;#7!gsxWtQW2(@Xq(zs=<@thZs^ zt)!Il6aB1WhS5aBXGMdEMiCtr(9MB^*-*w5T?XBkoJr5>zKmCOP4taqrfem$CUQj*3j{HD9@-{rt5JL2! z;W4N8<^hr_noDkGx|JeJ$xH{R3tg-z4r5Vt@IUf9djR>6M=) z63Z|A!Y`ofTkH7M8pFE4{fckbL}Pd<6js;a6f7mnZH2PMx|RMJ2Dvp;hO*uVFC zzh_T8@q`;qtDmXtYR|Br>U-3t>PIS@9O4P&Dgdd{3rwnAvQ5$9$#|$OE-tZ>5)5q7 zXXa%S#glv9e$p(H-x7T932#12XfELTBJ)%D?a}oXlw40nZ7zq4`W=1hNqNfuN9vFJ0#*7qb6m+S$UXQ=DV*mG zGK+kj|5$d|9{G09)gR&ynFV?r<;t#)LFR3&jj~Pff<#{EAW~gocX46xVlJp&^mnCf zVf(8O2zQBKgW`t|gx{rWJVm*EjnVrhk6~;|WElcURiDa7YmMqy2Im6T>6#w#GU^bS zWc3MpRroruI(?XbzY?k(DnoG8IdAn}J|vZdU;YgwQ7V;@*47zi;N0Z}{wBZ1pRjo% zFIN5$IjTNJ`LQdn;Coaa`Wc0jV=~=HlIKW3qA@rWOG)5+r_sMJjN9j*KZrgWM{UUM zlhGrl;yFOQPX8iJqg+?F`?v;{=Y~ib)!*N5Q~KyJA+fI&XnV<*-Kqg2dm5 z=Mtb)(MxqrHbJ@`y-D{aTT(@ZTqJa(0FeTco^0r|w9EpV!(L$_9-cf-{EO%u;Cg`X z&}cyG;IIZhBapj@ZbDulCn%zal-6l2(UPLUSPkU#1G*EZYE866@Xa`XPeub?7QFl z5%nR*q!sAqvaFgQCiz+M*r1I8=DcO~U8Cq46D$wCUAm3fUYucXUSDGk1Cw^TuFbmp z2CZjs#ImpreC&~j2m*q`ZCJj#YxVXc9D!SUCCKymt8#wlg0wROryb42uOP7Z2GCuT4~zX7oJPuYz+ z>=bcoFZ&{meL40m#_`iug6d=gw#3TXE?(@mH;71@g5!BZZ@Pd(7y(J;SY7=z25_mI z&g(3kV5?hgg=E*&HiABmpc@^n zHVBZkwsMWVc=%Z>&ch);pVi(wY4xqm)`cz0Z9v~C=*N>O{Fa(Z+qG@22Mf83L-H1E zo%^u`N~1qLvv)l}UFAJNe;Ky^+jB(G?Q+@GnhLwA z>9}$8IJgB!`r>0dJt8U1L(K+OBn%5`I@rZ#ikDWNUQmsDm52Xa3Ca^yCO9H420WG1 zz9dAe$*%c4DxscT-R@cgUboy0k4kvA+Kaxfbwk_o`so?)C(OwEQeaoO3MBQaTK%(H z1NTi0h!$K0lHNDX@zWLLz6Fxp9Suk%Hu);WJ61_rp3l6H1mWvRRXt%K2t!`QyZ&R@FV zhW=vK(g0_Tfj+1r^6pl=7j56U+u+IU&GUVBuAzmfn4`9#EZsJ*EybHq2_$+FAhO%` z_NnvsPE)_7o`5GLuD@2w$cK$l$O9w1Ty-$zX=RWl*+l;aQ zAo*Qy8n>gzPr?u}jxo0F?(DEV4{Sg&y~B!Nq;8Ea+4tW(X*Y>*xG^u&4s9cz46XF)-nVdV=2LAVBTV5(qJ+%(nag5=pCY+ zeIB6<;r!!F7rz7MD>Cy?=HN`ieVs*i^6>7XBbUNF{HWjh$GjT=Nrx;Wb^;*j{<{E4 z87IuOQc$_3jXb?{5y6YzB*rlE#+5So6{QUrfuL-Nas2zlhJD0=r24*yvW|}ozE(^P z|GhpU=l)xFbzSLM#{?*4*m<8?U>=#79CxFQtuXg5yzn5PKLd!3(5JnV$e!&shT%$j zMlkj^ZZ5NI1VRKNv+GxT?c}L5L_C|c{f`huZ%-A5O=g|#L{mffpa?SZaIT2odHH!5 zB@_U}EWrzy*|{@qfG~-M%(|P4pl9v6YTHm-LHb1irp*Y$#sP3C`pmRV%nVz3MYcWr z!eI=oB?tphb6t_=+8yL63Dn}^6vDtbqMBCQ_RTeT7aO-Xesqe+Nz;H!i){-+iyX$^ z6mI-apTA)@+6Ji_geiwkKDAI ztzFFPiiRfv4*d{girWB5#{iP13P=hVK;1m((=?PC(MzZ^l~h}J&(ugsf zXl|#qsc+F*qR~P+E2N9nC)6II`$eX?+NF$_bgpe> zeY~^p26yCGU;!byB9clWF~_=~NOEzE_X%7wZdzMukL=rO$dM_x+1p3z?d+v17^-Fy zv2xNjQsx&AKf;(XygyFZW#;C0T6%1f$abIJx5surkPAQ)03rbYQ&%tG9E2$B7>vzM z##&w$4nA;lv1127O(d`<-iAJD>!H;6JVenlPxQTMyp@0A`KM535D^n&!yDJy?8sYh zxqJ9yP&YL08S$O@Jm1jZL%#m4xTaw2Vxm>0uB@)HZ=HN112k{9|~O2zun7 zMP!ePa_A;rK0GjBLyDYys}DuZI6&GZlr(9!@8KQLPw<3Dhr2*@9zSuyTA{~kH*B&) zPah1Tc@EFp`E&2s&BhkXp+Bgm%Wz)u2teA@S1lEx5k!MoVEZw!{cW@%Bt->|OQZ~GvU3-%0<6mNbz%ZT;xr=H zi(lQfJI`3k?bUxjYqz0SQ&MqMfZ%>;m{6$D(Er;f4p{|J>AQ&lag{o{NI8<>2@c~G z^zm&qhF-viSRap`KWCRay67{>(9QIn#Z=40xyHkLwi)EJ^#EvXAhK*@W4GN#!xJkH ztgK;yhkt!_uokQw{Stqow_v_j&-C8OmO;pG8bP$68#58RDS6r{72vWa{(lM&oj#7zE>aQ(DGclsF*yP6 zv3lnW5gK9_$DwoMEQ4sJGvqtLoT_mz<4-v|6Oc2Eq%2M;4)AM2D!~0kJT{YVhWVRW z)Qx{-+$dna)&S)bprrT6P(Pnb$A$m(-QpxBPNl6AY`=8ivj~{&8s;a6jgR!GQ7Ndbi zf1cyH07#1bmD*c?o=9NaCg8|nH6rQ#*Y>L=TCIWA8d$A?|J5}hxs7B5_al&0#%W_X zA{^3$O5^X44TnpULp)5o9a>9okzbG+|Xa&LYawvgz1Aj!QW7x7Rqpx=DpHI zKcjO!=X5UTqAkK_yv)!DqA#@Ry7Jbpdjf9iD0yHgKN1Z*gOix)=_%K%g+RTq?BVlz zkDk%Jf_Sj>OIUrPY>+k>m@7pV{ykalD_@e6)ByZlaV~0uStB9b@&CM=< zeD1mD97tMOS?Tl7cfRu-`{EbB=zZ|Fe(Sd!Ai975ewRCjZ6f;wz5A6S`#_ z;}Wu@r~rd&__!4AC5s2fDVt=E0+KGdk*sQj_mYqFPBF+_1PorH|KdW@XQG<}6ZUVf z9a{_Nca_Jl zhJU=5MH2Z7f*WB!^!$Q+)bm!hAT8AswMFhPUyIH=Ocv%5CJOtxdN=pN+hOuMkK9*3 zkQ_ksfzB1}NqoP~U0+DnDt0gz1xI&A%NqnFB~eta;R{!e%Xg#eGU|!obUD?^9lck- zbkyxIiC+x!UrDaiK@I6h+2qWCYvK3|Ue9x(;jZrS&o{jQg%-0gOCj@!Y!Z0DcjQ2F z7Usxjfj0da-DCF9#Y ze12B3CF4PMqw7J1=tQTHXF2+3=(lf5s|S^}7c_ERWl)-M*X8h;ND@EjK|L3BTs{wF z4ZLGHNsympsG6@=##1D3>MPJkXibe_odHbqicx4VOnkmP8Fs`EoNfSJ_nF= zQ%#=DV4R9)>&E{fa> zuZ3xJ{J3n9n)20W6-fGVY1P&5SgnDdz6LZm%6>^UyyEM^c~N!-;`cO1iYFC4uivuo z6knp>;^UM~d1%wKA2~!zAd`!iRjNqaq#-BZ+*+Y{q1kNJ#Ogy zNIC(1TUa;xUV%qLyAY)le>sfaNqH9*VslYe=6sr*G8YvUI?z=4WWd+ClPBIUC$5v| z?tTnNnpJ3XvC%+M(K~|aN!|ioiT*lP4r}0gL{qH*Nh5l5=SKaG(@z4OLKH#wiB6J@ z2hYs$O>>!$sL+rL==G+1ZP(U9Y<+8p9tl5%QCeq54>o(Zt-EUqfZ;Fzz-i0ONhY`q z;JbC$rB`HHUrz^iXr~C;kdA}v0sx2D3CAHnSRBRq?2L_KgD^CQ?h?IbT0FKi(>?aY zo-MZHfgRR^?Zp+GbziN!Y0cgJ08LYE@58%n3y!XfvHiGFf5U!s1p5OtRTE1omI+Vz zsV5(@wdFB}xXS8oblDG2Uf`S`fc+8@7wo|YHd|#ywM~yBYZ;!j+asgc(l-I3Otz<= zK4gVCIJ3rR`OK+HcJj;>z_55n!)`-B(y^&qwqxf;+fDGMnYkFgzu#`wUB!O4#fo#2 z?FFJ^76?d+J!9SVHoI1L3Fo@qc5wer+rMXz2h_nIHheF38Et(49chon833}2yg$zN zJh%f}-W=>DW^v$6-~sH$(i5>Mtje*S4{ad|=cIl6jpKle(ZvGN6umlveOWf)SwH!S z1K3Lt6o(dXX&KF{wm1FXHq(8~H}5fTY`t10dQva-BH!+e8io*nk) ziF2r^sW$;h#ap92oEM-}GCz3r7;JxK|C5;bZjX$y)=WZ zNs5(~m)h2vb>yFAw}@ub1laUiL!AvGC)iTG&YnN?3;^07lIXb$E%w^EGp-vJ{V&#I z3_bEA8*A*T$M+%^h_Pnc?841HYZ;y+h)%X0erTNIX}J$4yLI$$r-uO4}Dg9mUDmnSQdJAtH3YGft;S~RfgpG55b zHjdHct>zHT8G&tzQs`S&fuvN#2il@rG<@(qo1UA|*TeNETzi79L2hA&-dMB}ZMq61 z4QqDwxLO1EM-7PX6NXEHgG38fRVgxhxsO-f6Ycj=*;t2s)%mED_h(+t`xQv4W|4wS zQDG)0CNWaFMF-O&p;cnZ!7pMY1n`rR&6R~1AZZavz;I4Wx;zFtxRli=0VBcz43US2 zN4&Epp4S(_IU}nJ#Q^lQOi~2G+dk10O8%hxK>w!ExfK@cc#~G-PfY0g-wc> zRUoNq>fSan-r6*|^x#3|;>C;hz3+X`nN)dp-3B;Q;88K7>(;IV`~)}&1>G`{ac{4= zYbpU36p{4Ekt6m`|MX9uxB6T>@4JoR{S->;R1~T4P~*;&!g$2O0L0Pn=AlOCiRiI_ zL3a`ct*J0@Qbbf%l-b6Owf68syZxxBrAx|>&T{rrhkfVhMT_>2$PB5;^dM4UOY@Ns+cN zI9-q;g}&`V0_f{mj3)+(@>G_WN2J5OM2yNb?Dg&3pTH>?++LqSE2^}|4J zD2TOBJ+nMPm~M$EDisx_wtZ`@tzVO3O)VpK?Bq$9c_M4V z>=hGfZ10X*j69O@tkeLYpwrs>h%dT+pDj>#`j{# z&pU?(`)yr$5$(7hU|JbWwAm|1&JbO(&(;BUc+!ESFYwRDQi2(r20cMWNpw9q&Ai|EAUJ0}pg>;cZD4b*>6HmbOL@v5Q zN_~Le(aI_P)HUWhT@L3kKl(jpPV$a}VPBjcwu~5nq|ffR%|s;S_6p-gnjeoysuUDP ziadXd7(xkcqBs2t7{1^GR_=aWfTa4apkDblZ<~NI4h%eWt~v_qB$5X2Oz!zso|`#Jk&JLH9j|SSJLF>R?bFt9^M*Aw zHM^0)t{o59&Rw;P1sS#&;Ji8O>gvP@VH~hgrj-EnE-6W{9Bl1*+}?V#(M|!nNn?Ji ztzB<5L}V*0Ny0$htf{#ZFZ*MF`$qYF+s3Dd5b|Z&Q_ntQ8QHPc(*>Bcu@j?UdjPO%d-sg}@CQdRu$r_@8_EziZL)$ABH$sPJM~VxUB20gkxF1t zq4imc+GhYlZ7f4T)2XPU*YNT`;9j~^PjVztQCe)(HC0wx8~{mApF9DerqK#=vh10s zpC+naibox-zus)8h}MVAzvUGaTSZk3UeijU9}s5M-?omfe!O#G1cujjMaoM|CQ=lD zQbm39Xi*wuk^a5hh~9;Re(Yn*n>P6EV^WR1+}>fkzt2&R-b;GY{WL&QW)uG7GysF3 ziIE}ZsdW3~Gly(_d5TBCV+r8Cyv_@tfO8JkrdWU!0{Pxs0e}1(MVCo|sr6hmP$)## zIxYH3w2=huVlWidNPtDHyAs6jLAbb=wPeedEpFtc+_m0oQ+}ciJ}C1MlK(2lDv;Ex z@}B;D7$B+W7qyd=2CDBn+e~e*Yw8QSuis&tO1Yr6lF~pRg@69%fA;7BDHt*AesH$~ zjHPT4{UM;KjIZ8)`)&LB*S}6Q!l9BPhO7d8;fb&}~|i1ke;uFay0KFbwt- zHq9K+du!ZE^D_}Vm)XH59<{xXJ!-q@hlyB&whvF+>5JFwEh3yJWJDAefH32eh=3O> z13>06#*jjOO4usHAgomw0UWgs_!iC@;qS<04!R;wi*tbX6BvUD%y)_sCx;~hl1ji_ zSz2gYwyq~C1X+{*!udYC+073Qw3i7Fn(TnGOe$TGD;|2FzzFDV-~Y}D2gxQv_X3x(VVo3XKy&~4=bpAo*6+4~ zIlF|i<=o9iOTv(K|K?iTyLp`v?9KtoEqLXuZ^!#*bGP;4-879T5!E&80g{$kIl73O z19-W-e8XCrdx$=f0PUCokW@4nea`!v=nptG>E4UD zUxSp({j%vRe{O-K-u@r7B?2Xn+CMfP?I?4sytU5HGx02qGahj06i>#`G)%rE1JVZ# zH%B_n>vICI@n7r65_9VGtwC}ESPB7{%zQ3BOHnp&4^IFjjkTrd-vkbm6p1t~uN=M- z#Tw<9gNR>XE{nrJQncKn`aKWIVA5qpTCd>w1=yF;O^&Mqg*(sk4tIh8a8wT0#6P$} zBN^)%Ip@&zaGgs4*eaPstkbiU7v*-$!ZZAU2kVlEN0S*+YXpc5uf!du;DcD`63FQ+3h^V5+{AMSqffBlvL5 zaq4Mz^25Phi7|UREEkTSb{k!4ZdHb8c_zP=& z>xez`e}2VY{?sRl{9cJyZJ1RVEcgy#684X<%EIHlf6i*k)f!l>fz=vVt$~j~4QS1g zjNpC+k`CbrsefPy87GcAps8Y6r!sMtl#7lhCo2w_ElU<_mZ$>JM*?xlVcVTRQm8;u zh}Y(*P-+e&4Hh>@IUf9Ajiq|i{$88vQ~TXEJtvur_Asr>YE+2GW1ctJOTVQpO!t2I zDqVD$?o6wD;jXlyd`RcoL~{sGC%RbRPaS2rH#j&5O`3&l7acMVg+=pgm(Ex+AUPNd zje14D$RJpoWKE*qW056s7=8p;_}F3GjDsoZgDlt^9Zx9-c3SeweNvgw-S zTzZe5RbJ91>Rr*-lun!OiDr@^snSX>uDsO_0+I$az4}O`UH$z*Aw*T)xha*BYL9Mi zoiC@>eGyf(qXP%IK{v+9jM?zWyc_z?NCAOC;4B7%<6|SP`%J|ljhxa*E-!jk@&fVj z!R9$~DqctV2XFJEUe4>ZNlvDxMH7FJE$lbpQT3rVQ`^bOq@vkKcl)I;eaUSAe(l$O z%?=(s=yGN0l>g|D{>Y9VJ?izXKJvA%ea%6kCvZ&mumAe5?jS`nMnxq3>}NmgQE~(> z{o%j=(7y89U-6;}jQafZ&*Ru^gBv-k?bT=0&%$V^(o@SZqN137@{^xL_k!T=j!peT zyZW<&2_JMb5dmJX)g4CjMLcF7f(Gp?;uwN^$`2_u;^P&vJw>ymMrQ z*H_-XQldykcjV_!aLvVZD~UN<$;-d@j(f^R^Om+?oQ7)-&+#q6HNWd=R0ryp3+SK( zDAl)0hAtytz1yR)ikH-P`@19eqsl=B%fDR47?H6o%Rlud^*7Ze^Ol1|;XfUu%Cnlc z_0IvSq|>XE#>+;rRVGbZD#7xLbgG2>_t%BzO2ekQd3T@F(|$F0Ad<=tLC(Rc{w^0> zb)xY;;4QM@FrV;L;grZHfd;ixM@NpN6 z(L3|;vBUk3)8=D?57KP43MBnFwe0G*tk%F!R|DZ(s(CM@S;V`E4;5c2nqOc@*&QqB zO}I^KM}b;j{PCQDxJ5ApR;W^V}>v3wkGQq94SY$X@o+ zrAq`V$oI8G-x~7SI@hzxM?9@IT+k(51%NGe)K_7kjaILa50G>AwV(4`6V$B!y>!6knVnz`$%8x-I0T!S>cPQikpoEy=n3dpcB^&R#tqo5 zLFpT1*NJ^+5+GW-M?rC#t-}s&YHHl->zdIm8Nf*D1Bcs5*jFUSO`=!CCKJ73Tvn;; zHPZol7NySGmUY-ER9D;3OboUGx9r^cD+GBN1gx2DyLN1~ja7gi@gsB-yNmz8CUs~g z#m1M?07B;3e|qT=TZ0GG*8W9oA6o5VQy*WZ?}g@`yA2J9Y$5?&=^TNXfZ)j)`tWc+ zfXGzr5%=Oyoo}ZqP8`2s$4_3uDQzJ-FYJ5Jkqr!YW4p1*_CC5rRY+7)vv*FPv-Z|2 z1f)r_7hibJ3IURWeFa3?hP~HC^sIdVNq5;}4?Sp@q}b)UNjr1;0wBzBD=xwo8qPH# z1_!t?WA?1CQ^p>Y7sQYbn>jyw%<8x2|3s!jIC2`A+G1=^)Vc5g@5}u4o|Xj&cW*o;`UM zJL2PjZx`*CfB9DkxKrSPfNoxIx8rXg_dp#2l1fk350EqyKK;d)UdC=E0|%;#NZM|1 zojA)JA--D9n*t!|0&>22^sv&UdgWnfBWK--OB0rxj*NwN8J8zZS6TtO$7TZYT)$Cow{DNx2=cFW<%&pp*osh8j`8l3XPWE>C*DRTNw6Zx4yfIJ zWM+@nR@$>qKI*S+r9T}zcf;xjXKd}73VU+*IxE7C=sMA5ZvrIk9YeoN2WIG@-yX6& z3{`6BZ;w1sLvD+9?rMY8_byuN1RXE|CsZP;7Gz&U)sjNvpU&p**57yYExK~&=83r& z@Gr{nZni06do;e6Ba%9hw3gP5vP+3NS42`KW3mo-yZ}hbhw)#xR5pEQxM>bi{p&l$ z3p$_2+!4rZqY{P>tRCO923A^h<@VibFZz18ZfgDT%`@Upn4vdTAhTWtlCIS4>e*@y z+z&ONxqlT%dOx(p&!7zVGmumZgn%S-7#GdKa7oc7MV*+9MGRBLa10a0N(_q@7%5c5 zXb2dZk)DBaMFzcqAE09OjF=M9E$(TS6DgQvKqv)_ls4{#&~u7ft|F)5+N3HE?*;_S zN+X2Vb>+_V`mOu=CM|#}&nl2qHFa;B+Da3T`heO>iasIPwaeSirHD7JyXV zVs(@fHY7OimlV;p<Y?F-h}*=toOVGe9vYwN1YiB<)W^lF#= z_j6Y*k-nCVp>7pG(#Ia%>DOt;lG zw1EUIiufonlRP;k;nh0@kFYXAA494XvoK5Fs-i#Vv9_fFa7ps$q{t=R`!_N+yr2OT z!uwNWL!-}&5@gP^&J-6G_VE!Q&Y{kUSSrx*Z1BU>QU>rpNUTdiDBO)5W zDvZblG>VHu;8jf2UGmvbm1&(_3wGp6%Rp-?BA?yM6KC6Sl4*)e!p_&B;8Vm(YeDkyPI;rai*Ab9OJA(^jmJ5*CN+s|;*J zk7;ezH3^COv)nwBLW>g%|9pr=D^n9??<~E^B>OetJGSk9#Sb zp4BG0aTQ22=y)N6}ofC?n#KGKT#mJjy6gOlMzjpPd27 zr)XE|2l8N~z9R!K8H%YtD6Ietuf6t~8-wlIwaee9{I%=-G91*ocn3wm9VMFL1mPBt zIr|ouoooN;7e0rBhg~=(37nE>NNQfr$j-Ea(lVdlB+5N@p~=2=^n%4D=Rgl3=toHq zpA0C8d14m&X+fYSfTZ!zZZi54xJhFuoGnP`tKz!{z22s=Cx<#1G{VQs15VNUAV&jB ztOtsaCMkYib_VrOiosYJQQw)vhB5XV<=a4R)>BXMfL}iG+2;m=nQ!kKdPOe)8cSne34$O165viPlr71&6i>!UJmom9 zBqKZJu_n&^;i^ehQkAK=9M?Eb%67$$<4UZuEm^i~OBN;WAVCt`00JP0eczYH()&Ko zbMAM$KR|>Cii`|u`U1D_{mwo2+;h)4_nde8z3-XhX8@D|)?L^IfQW7+pY;C0{RiTy zXP?1=!e<#DU2(BzjA-45h)B9SMI$XIx~iVt1(J4kbrIQOc5?ji)OWU}NHwJ>4Ti_c zSyM-1W^HBs?B^ehx%AJ;i(~N)!vCFz4ny;m$3~)oZ&;2OMW);y9GaYG?_*IZtHd!& zJVgZ+{10oKQFV<(F-e#Cvb^!F*QRVvOykc{${4(r zu-+khGm!LAfTTu;b(L_Wr~Q3^r0I#1-+|RLC8H6g6&>^0X5}rB2c%xhQa`SLeM_Vn z{Bt&7eh|dRZo8)4*JU?p96Acg0SUHCuE4OJZ4UsDoYC#@ML6u)eLDVn+gnjOqansC zi4sX3T;@=w?Pkvuo?-bPWV2o$^qyOl|AUmpSj^^4)KGjwCD3ORjIGg;e&)w(;LFP3 z;dtO+PmDp=2ppXN*gb@2*B-#)V+{Ig9E~*)6{-s3{Ru#SqtM$%DxKh)Re?B;Vct+b z^ELN0H@5Iyp`d1AV7XxEA%m*I=)4NK5-P`GA~X#2T;^LR`cX?8yzmU@TBC8&+I*bl z$OHr+4gn+`WzsBzud8pJhplc#Pg=)vG@Ny{c%!90gUB|kH(GCr#5Q>o$_q2IA3Kl3jC#F*r117$J;oB|JX1QolqF-v_?9+ zw32m^Z);e2*qF`_jNS_W$ru_(N!|y|U5_W^xp*Xg`2Kr2R>gO>?vAfL{}!HlXC*`9 zGS-e^CsEeF3MZ!99c$ljJlyJ<=|6-mDGRk2V9l*#;i$w|;Nsbn@z7lhJEYB&y-CAsJd@LE%4Mb7H6nQ(rw)RnH{QQ79(nlTSiO7|Z^XM{{5!##gd2(g zubpI}&S?Tkt1!wfV;n=k!~vo({lRblr)ePRE&5|RdAbFrTVT2c{{Pkju0zTU^19^t^83>>5sd2`<>t+6={j|i9&sE95>@`=W<*kH z=G?)B@Pi1R7QT?y8F(St8B@9#WKu9Zx`Cgd|tCI`Td^z44>(9^08>S z<~7Z7^WUaM-;CUiW_UyQ#BIRq@Yl&~ND`{$%aPNp>@%$#ef? z8^xyL$Ou*Dh-7Tj{YD?ThS2NUb#!9ryoTVNE?+nohY#+LejLkIfl5?oQK76$9v+?~ z?OAE5@LcYY@o`)()FHd*x8NwZGQQC5Z?;SEp7)Kq+fRG~@YC`Y@wGqyT72nCUrKU8|O|L5PO=L=9RmZLky#*lS6&PSn{`}huY9#qbJ zQj5S!lb9+I)?J$ZdO%?c?RLn-Zc{-lC#%IE;(3E9Z=-0jA~v(!8- zKYmZPbm#Z{$&2(t(XHQ;uQ;Ljp8U3((o%NPZZ0xqqi?e@&()hV6hFt7EnF8kYX1rp zO@Ku%DeuUldS>6gsSI7AHbj>0yqV6l-nGzm!fe+sT&W+ONInC~G`8dIpDIKO>nq2v~b_?2K$%n`ndd$zYhwxsve2(?E zyT9|a4`1VtwuGDqk%!IeD=;?aZ{=HThkfYdjVvmV)O_+aZeDZu{cJYDR0Oxd^U5cI7f>rCHgaAa}dis@k`M^2&9f70-JIR5h z&@0l_2}o+_1Z*fWAgP=WR1w#20Fox^Mw&_*jyhv|pwq7sB88S9vr#!aItafsP)!uk zS{&JqqXRq}cdy7IlFn{LPBkzTuNoxe;CZf5|N3TZA<$ix5Y@JFJUZt!#@*|e!S8GT za5&DM?2jwh0+d46E$wWGE+SpdKxY}%4bfMEvveHWmH{kms~(It>=bI@>rQp|$2-S} z`U$}A0)}ie8|n$1vXY3SZ85WYJPz&K8!x=FGp-ERMn4u_t<6pGGe5RDIx+3sv-eW$ z$NBWBZfxAp5s&kZV`IIHXKa~A(V3Pvz*7R`g-^cT+YP9&EgpM(J^UlG006IV0XE#V z=P*H42zn#$L3GNVf$q5X-qo?`{`tHY0WOZ=?s*dpIs%?IY*~b~ON0fhc2>aXB8@j7{LO1t|c8 z5lMTAfV*mOE4C_gq7~%q8El3BcI#_#4a2^2c-a!{ukGu`y7E}DY!<<7=3y^WPbAV& z0>j{#`$A7#y3QD!pkL4{m*BYF$gHWadG8EJT2+WhN@QHxZTriw#9MFgB;Z6tJobrC zQD%Ff{zV>g1OV*zG-eFI;MgA^g7FOcX#+Ba&INOm&BpFsC*s+cUdtkqqFWv_5-I$( zM}ef;jwd5c?0qV+V4P7t6pLmzB`4^OjDKyV2GK90G$WF#AjXJU*e5k`+gooQh&QO) zIP#c_*vrppX^)@$%;$*$8*%v>px(Fl$MZORt>atL@wxUu7cO0lElcOdk3D`rb&fbn z=e)f0P+TGk?&_7xWBs!FXh6ia1N)(Uhfc&*z{>_mf)z>ul&To}^V{p=(T%GT==kje z$727v(KynJl!1t($|%N$dijRoF?il6#w$LDyZyua`q%eP2Y=kOA%x0aHq6@YvMGJ z^iJuG4_S{p6-er9InY$_Xgrrd0uZP!5&}yvT)>0KnbR<4gNaemcw9lR5hA$_<;*;c z%jd$3=%F@KE($D_IdK6REGYU^235kC7>P&$u|!O^TLZSj%9XE8MM(t$CgnyWT6dXT8CG{0SivnmBOgZ^T%ICAP}OkC}arE6El=Epx5tJZIhK8(!I_MvcYnj6FniK{(>FdldW zV$TTJ+jyZ5oP|*ekaTzi<5Hps*5T>Zs>fo{lG$+yK*FITmxz@2PMUx4 zUxg9#08zE-iCQ){R;*r`y!}4&%I-LH@?6X#BG|*L7sgV&17p`6+X1tE{k1(Xx1}(A zCDGN^6puav*o7heji+CaLl>_S{fl{O6yxv_K*%uiM#>Rb;2g!Tf?}&cGv{+uYW~8^ zGpV)WcRDwn-Jj_w1Lh^u3&(Vg(iO5y0!e#AAn7VREt%6`KVXMH0wAfS$q0DNwjT)~ z>E!!l@0Byg*&EvOG+z2n^0y`*eIP(w!-FB_gFzyF>J7FIfOZX5@z(+5T!F!Nj+sFu zmUf~Xt-EVY%$)<^iel_XL8MHB5N4+nai&N1v=A1arNXlc&+LmAE{HX2=I||WANTTU z1I{8^+pfcLobN_~=PJv%Mij zecSQ&(KvYGLb5$^9xg{vqEhp&)vI_;4G~WV)R%EwfA77qa0zn|vJMSp z&LY@4hye01??5KnjrE4eLIQ&ngs@21>V-W!OKn}~`}BQr)h+9PPRxG0n?vVz@;h|0 zkN5`$l2)JyE=OoMbnQyasVZ8)0*=oxjJGPTI0#IgD|mNAzlArMs${w} z_49@|)!40zH=jEVB)$EX`>;S#`^`Rcv#)cyI0uqC9!ztS#?$c1XaVl_ z`{R#49#1^+1kNEklEI$FcDZ3-cXxL(@Otve@5F!j55Ivh``*;Q`B*cr^qas%qfWA{EJ;8**Y>N2=7rc*6 zT3qj$h|Aqqq215K3D&TyD4zslcFdj~U5geH6}3HiLbRQn$2Go%>_kw^YfwfH5nzlC zabW-cv<6n;EujH0a0SYx1O{H-fpUb18Z3*K3BP*m@Zspa){R18Nh~7bYHNewD*M** ziF^wx$Y(tF%=Wm>-1ry(djY*h0_be2jnfzkfA#C%h}Czmi}{O|;DDf?=bj}}=rNjA zz`TZ{@G3Yoa*Qrp)`jDP(RlNFdO<0+H5S29DA4b7ljHQA7(VP z67h8=ZCC@XOoSDHUD5!yd`^?xdTq)^BP~n*Oi+I-VZB+3fux^YzZ9nrSwvF%*pcp+ zQ%)yUFwSYxL|+z)=0~AU={v}tNES2k$2~J+ofOumkz=W;B#s~N%{LStDzGon_3%#9 zK+^Z`(@fEW;!GnyCRXR6Q9zN^6+}nGQ!g=yiT2rp1E%4qZ6OLGb8;WveMT|J_d75G zlssJ}4u<5{RcHkfPAhQ&Pzjx^5%P;R6KNCEfu3K$_ThHtMJjtK3{Kt8_fW?iyCg8Y6gIV5w`W zj@Wc6lYLdp+t59(AEms1H4#bc;4`Y3Gbi9Xb$XTF9|r{TwM@_b!hnc$^t5M)j`6(8?w7&#w2`3+0BI9<#{M#npE8 zxBTw`lG0|0Urg_p%@4(|n#+NlH}Wk{%YWzBO!quL=GXK5`8Ct?^ZZ`Z(tV6aX>I8y zX?1}c(od#IlSxCnIToeC1d-|hX8)o6(J^OM{M1kWRBR!Vy8vy0q#8qy(MZaWY^wxr zMqyq}IVJL0XygyP29WeWO#?|&!%qL1Zh`3*m~MgT7D)7q>&=}8Bvl?DMRx8=Z=5)F z2098uDIAd)k+i9?Ia+4|ByILLye0|}mP+JS0!o#6X_S=j*~*`-!SG1%1zF@VjUXKW zT!Gf$@S(R{26l5nxhziOSl9ntCX=u8=Fji7o>of(%{(nHuQ-2x&&_G3EAL5kDKZaf z3gtD*iQIEpkk|7(UeC|-a!pfSR9#h#;pGhI_Ms$$@OjFIq+7g4*^>sUzLVvf&vdU> z;b=xZplLqWwD;P~pUWOSw;Z35(@4tFO>4)yp-1y*Kx|!dddd1GSv?O>KAP9Z=lT2` z0BaqR?vFCO$9knUq^vXu93I}pmU<%n$f?KdO7T$1`YL74{uIi|%gC>LRBqz97R!ui zBmF8(Xt6h3Qv=S`Pt~WVZ2V&j+&*)WiMe> z(zxec-*3yuk@95Q#dfx>Y)8{6d;f$pOFdjc>#+|MD+m@VO{{;TL`(9(?e@ zbUqVZhxdQ;o8OF|`I(=I)vH${H@YXfy1G&o)G;gb)H$(o$G`vg|9|MkDd7r*$$L>t>j8fW@G*5Pmd=5M(EhdgI2-Sf}?`9Du}(HPpgnm^yI zi}bP4jC9KK+rRzW3FxZBJfj>b=k{GQ!|N={kDy}p6UsA{ja9(ojv#yNr;n~+NUE-< z3CD2D)~t)wcikOJmoG;))t>ZBFf6n={l+|`!`e~!+;I$B51zh?PI6nE=_eiyK+=lZ zCd%R4fS0v*^7c=SloHa}2mAA$_vL->v2dOXtZ2_0x8j6s9=h@R?f%N2dBZTh@#d*4 zH>4+V)eR}{^~1VRR|mx8c5{LGZ;oVB{+q@IeOgX`o5nD?d$_3U#@09GI9cWXJT*MZdXLTx=>kPnnbv_|Dn0 z()HB1lsb8%W$=x&KFewQJV#?zohkVQgNb6~$7xHhjv@mZ$0=Kd;heAwX(S5Q|N6Pd zWA(g-G_6;l*QlhvOdnZS`S85zo?EAskRNYO^S3wT6)nCwPs{Uoyj5CWMt*<(y!Xm) zIr;W}`EI^`^K&exIM1z~pWkQxJWqbFN4Grvz3O~B&nPY<65o#+PQS}^3w*d1aPE`ObMABAGlHgc zn2tlQUb%`6c@TcTiGUS{lXDs!&glHQsi`UPCh{mbPnYw2`8;aPoL4QscwYW+HU4Pt z&gXsK-S=>vkk_)#p69kX+ROT0@>g!svgYyV?w0dB{?2Vew9n8vrPt(f3>@RpXEkCk zYMaSRTfTNXv(>S$S{;j)uZ#zt_aXJhR6DF?o&pv25ju^TTL4dVmq-fjvu`mLp|l_ z)H>oWt}R|TGcY@_ws9I81mc*X7kHn2(p5Muf8xjPK@W=a@8hF5);<^~03BASKg4EMd$IA-!PvNA zP296#7LJs#nLRKN``>w+NUO(V{_GkYi*CX04_n_0TswS<;1l}*l3t88E4u*I-V4}q zEZ#kQ3A=|Y(TzM!x*W4ebg4v{oVXTSHm#3Ei@S(sdKtj!8FZC{v3B`v0#LA81CFn~VW|R{+rXI)Z^P{V)BTk(ejO}k7#`*dX(MuVl=w>q@ zDUA(~REeH?+#EG6^I_cEQ*ir@gfsSC>1YeQ|v$ec2F; zh{`j&t%di<>^HCW@=c*fRzBl5(oWzS@V)W++lONNj-BXq%V^_^L@8~FFMjR|I7u(V z#&JCM9y~w<+QaZL$k!M@I{od&-fqh>`u5@Ve5Vmdj-HM;_nnHNipE&Aaz(6KfSd}# z=v5-U?mKcahD&Qu)A1c3FKZwoDpp<50n+sG`|e84miHXQF8|zc9J$UwDX+&41slqN z>&Qnk=V-$Kq7zG!>_GhXs5k^_I;L}f7jHRLmhmr4kbFj_c~pkMxoPP)-v~D9<)eKu z+;bs5_ux8!q$|))XVxQHkreNxmQ$clFuQ-P$e>8=k(Ae9hv&`Fea!!*b|oIG_B#ntJwm=6L}=!L1!fUXu}IEl85DPx&O zd!j;U!-kD1t+zMJrw35Mq$-ALxThZjJ@aM+MA33pIL+54n>)Xn5inC7kf)n+bAEq& z-9;~FLZ^YGw$$x!GMX~0xkA`G{ViZLXKX#%z7o_ba#h4m5*oMhC=C-VLq^!=zz#3Yx+RAjPP)48q#zA7$)AFjl=7qxOJO>c^nF4+GV{ zGe;(CvtY&Ic>Iya;=U~p#PYQpW9GaiiAewE%X?rDnnG|w2?pT|;HkkkdG|+o!YGBg z9vQO@2Kkm?sAxwcl0LTi{#e`vP=_ps4|FFW=?HmCDq*x?RK}>A#<0GxUX&&<6ub_Q zboqk$fFw6WYdwY&Fuu<{{aON&E?T%S8MycK_D3_qm0G@Y%vfXd{ad1aUQ?XL;D0|% z_kO$-HP?;Dx)m^&s}>Rs@k+b^Xk&Dul8B*1nW4EaVa&LGQDgknXEqYWG2+;f<1m(I z@y^r(GgC)Dl=3cRcr>bwWsB#*lsDip=t2UN86{T0+#*1po7T-wAjzk{`)uq#0lE&s z!w`MN+eLj%X*~Sk1F>KcKvFz1A3J$5MWE_sjE%v-j^RnFv$c`3=f|46RwZwp&%Cl1 zP~6#=Q(GPntt1-bqWMHKi+GJlso!{gPf}7fDyKP$++YD0Y3|fI^yWLk@(iLFT{S_C{<&OGe$ckMK?9TyoDkF=fHGlJ2&|VH&0nZ zCRC1RKhrgmfADRxpj#J_o_51SviDElZ@R7MVyY{xM3Qrc#^D-`mjf`a#2TQ2vD=TQ ztv)=%3N%G;iIG4FUZrLdRS9qp<6#72dDlPzN*aCZ6v4I9`LY^gU+1WNUNpjI10JZf zK@t>W6e11I1)Hc0bsp>Cc`8h+3(S5c-*_z^uSTd_FLT)VL^b8{ECf4!{a5(imw-Z5 z7~%I5600A;j2_rDl-FRNM=;j$4qr=zC%*N*-r=|;`h~jI)leTI!c|pQPh+#vP*hG^ zwQ_GwHK23AS3QJq?WJxyobcQ32h85y-jP5@zVjf4UxE+%5RQx>K+{u~-g=EZ?FX89 z_@zeK$Ci52=Vd)i9=+)jQUmwm(^2uRAu%>!6V0a^$or~}C` zMx?uWgp~cn=1q7!t54CD>X~i?lKLhiqX07iR|vq>NTD!oc=5J2=PcJ!$6@j2Z?EO! zQ$ez8x@iiHU5DR(`|bF{Km5aFsIzX}x_Fq#MjmI)nw134x$xQb+OhsYw!A(*ZyHE? z`z`l_0!i&F`$=Vk^HXvA`*eRhPI3jd$^s3vzV)qdC6D}%KKf`FVRXroB}plhzJKUF z={Dysl??Wy^?T~6rvQ@v2Y~ZyQhAo?vo#7kbm-9J%l_kk{ByBsBSL8ai*1DTG#X_s z3w3z~e1zV)xz8wY8hpAbCU;i43hi(j2OzJ#O_cThr=zZAZj9jdau6pVqZp4mZ}?2- zCc$Ny+%ag z4gjAWgjTlwte+so%e?C-QREiRY3JK01H{-D7eO;!z%fZbbK%n2v+!=%k?M9GplWyj z^#mj;Da9ZX+JoBjtO~%S(oy3$@Hx*~p>Un3vb>v0l@jR1Mxq(l<9NjRx}QFC{*?|- z-s5?PBur<%u4PSW)|eIriAHZd1sZ*jIakorAV#Z$3B=_(!+oq*wY7EdXv{mjyxtS* zc>g+n3#RS8+RZ%Hn?P2Mfu0^BWw4eRMYD6hx_w=H8!q8`wHQGpxddL*~)=ytK zh9{Ds-f_iP^Duc#rzR9_`5f($x;jU*XXiHx>m9f^0!f#|qYrKjNM2eprxl^npbrI- zrr9~sim5oNVJ^piUN4`Ll1Oo#@_E^AvUz!8VNWk&;>ULLT~Sf-&lX^fgyxtAlHNvl zGKl?-j7Xu!*JM+VQCr!>P}EnBqRfJ816bP6yfSOyYNCL4(9S5@V5P2IAC4184#cIi z$KW*Z&C6Wc#`U&23uBhvjnTqE0t0HlfJ2lMDA%qsj}uX<1!Xu9OLgibja|x|UQ?!5=28^xcX%$YbjnKiQ! zzGay8=pf%bU~A^BevEWoC(C%LP5^i_nb+mXdH}v(I19j>dC$4uFGm@cb*W&ESvY@Q zEM2w~S{9Hx)6~9w$MG_JEE)aQ!Us4HIY;_cmBX`-z_T{vAfao{Ocd5L6Rp+FyY&ug zP>eAl^U@%6;mMOYm>DAKWK(;JzC0IxwXu8w|B0Q^S-j-l$A;0AiS0g}#( z4LDI?c}!k_^`Xtm$!nl6WxaNM%C~ErU^`6hd3zM**TNi^D1kIVoA*|Y@jv-xZ&AE7 zvNW5(2iHoyg1bqxc}1yBu(uy{b#xbrdwdT1*ThIss-{jM|$Q?ibyJr>3;rN zKXhOQBppK+B5mJ@gDQcfGn)m0p%1|rP?>^`L|p1i)u$xdL1V>i_4mGXk@YeOv%Qk& z15y z1}ps zgXekPyge+_&ELL|{0xyv#$r%(*6t;|p zwErZI9Y@(QyPOlud48{Y&e1+B%1!msoxY*H;jn`>z(FiKa<9IgtI5#x5?;u5zr7O~ z)Fli((OEFIlT#FoFEzYPx}o%N3WScH+OnGYY`3f){-S*gZ8??q`=8ln?zX8izT5`D zG(nt#JJ+sVn;a4fD%D8&U;V3pm1N0+N|hxmJ2txL@BZ%Zrm^I2L7uj`I%XY}b#-+S zN#)ZCNUH6CY2W$IcjC)m{&K3|Z~o?Q#^*o(`84*dgS4_yNYtJD(I5R$2p)a>@yFv? zoYj8u3tx<1`WL?x3l=O$V@A2Rn{>7B;cv&1PLh>n>LA&1>6mi-SU=xSyM;8);8B&y zrC!uH8mBB1L~^tYw+g8tOU^ z`fYekqiS~x2JE!vG^QG6P z&beO5k{uk|%$JEr%+>~F%#LR-cwYk2vQA`W_ztwO#qh^tY6Abd2)JKM3d zRtcuecCM3@z9YW1l$ZWchv*vY9In&9RMFyM?T7UItmym^{Nj|1)+ud;OzFi7^_Wce zT7EstJ@vP6ze?^jF7op796V<-$tTj5*3*|sHK2XW%6lr8aJ*!4Vr`UIgOx!c11iH9 z8x(-S&7Vu2xI7eE3gx&y{k}OBP2Ue9Ry z;(7X`dxH;OlJ708>6##)Bfsiz>+QSbyvea+#}W_ZI^uPAubD5=P5jQ=&UD{5FUND+ zIxo}To-6Z_C)T#twp@-woV9n|MF5XAF?)VjR5sOP;}G%fXI_d|hya>JBrOJ#s*AzK zQQHOdG%3O;bWY+`Nx2n}G}D7Cqp|;?jVjpD|3R6@*dR`!`zml^t4<8NhN~xI<&v4P z1|aFYx%KFcdSmPJFUHxk{pc!j!ht4ySm&^#&{RYeUAkg!tlzK_SwMfhz4P4!B%M*! zhI8<{&=JC;)u3mr#o_nmzS#EG{^%j7K_fv^W|a2C`ZY^qS?9bsbbT;hd*@i3Jbf-s zoxe;J`KovTd#)w(+oJ)%>%Mn($JSTh#sT_lbS~IfApP4ufs1N!yf+W-5Xt9vtrjf-Ld=KQ^~$! z>HKB_#mtUbowYdEz8+us>!+f&xdZ!@CiJ}*qUTCC`re4U?_P+V?uuB@UWctOkxQR` z1KlvT+}O2@mtjMQy)A? z<_BWl{F&G{3Yy&?ufF<98sq9+{Z1UajeyJ7-LpPA=g&zF-*>$Yko3h@6Oa_8Fs-e% zu};mkZH1mDP2KZ#>_YBe+8z&XTokRS-B3NpMI5^8T>N79<>(#3;V=4P0~f7Xye#I= znhmh`Ozb;&C{A9w5GT%GjJa*IjA0^c&pyQE8nKRH!a zkW?{e-pV#b-YWx=_7;Go_r#W407+?S^2%4!5F8UfMY|;4h(mg6QGGm>?p0o!^HWw{ zhk@C<6lEr5db@QCO!eqgo?EqEak}4=o9jo~QbGL53$*|Ek=76Sc5K6*|Es@>zxsur zkLqQsPNs0!g#x%@&0eae_tT3Z8yWoH!ou?Aa4X zAcFLIZ?pwxZ4JFk5hkmQ6HIyqZP&5GhbU$^{@(xck7Dy?A{|1sR^q8PEi46QCoMuO zI08j7ftpKzdtob_PAwl(S2F@8&p4HC%FX#F7Z;xE^JSK%fuvJy_kL%#nM|d-0!s;V z`_6P3`ErQuo1>A*sCw;om~r#i|K8(K#yA(8`V0jFM#XyZ#TVmG|MX8W9Ia2rn<^6$ zkQBkYghQzcJd}5mHWD4uFB;XK>%JcSCDqZ@IX4z|&5!#x-ixwvPRiAUYZ(pMXU|&@ zEprwyM$6*0{paJq{qc!|0}T$KX=E90B%N3bwN-_)QqMg0Pn7K6i{-snP6 zziHE^m_zhL^%pNbzcXHW>y4O0y3xHxxJPA;K+>5Ia}PZ5P_)h|!@E+%JBQ8y3f&*G ziGFg|@-Cu@&Vgy|MhW{SMF9*eBXUe>Rb1-19;@co#pgeLPXdyjICd81@?`9R!L6&q zP}kfQ;|OkMq==+Tm(&9!y%bwt-X47z?Cb! z$SqZ+Bk}0N4@TFLIe2@DIC|nzy!-C{#8TyP98lTtKZAYqmGnGMM=oaU^2r5&!@JOmz1Q`D%2?_&Og>bQeTp`Nbl;= zzPMq_6Fiz>>SDS=dnP8IYIx%J=C>+n$4w)A!KL=8KX>r z)~^OZSq&iP%1R>8F#q-sTtoP91t25ilW(z%h(r}IWSBZ6L79>As+i9P2d^WT(i=Mp zCp>;tkWYZt1QL-E0WiFu0=yEgRbl8L5Xkxq+;KkE@q=FfG_H578u3}7mS9)U6)N^2 zV6<6%pBk*Q9Gik&1ttxpdENRGNe98FhWC2M5_nWWlxU4C68IFPfgZn`n_Gw`*O)wY z4FF8)?;A+8gHeH}I@uO<^Qn&MLZ_zhfTYy1US}&l&r)vv*J5rbKlwfkkaT#c7f($? zQ43Ib3^3LLJc@n#!OhG^)ltnbL~fa)$xWb0)+k<(QZ;Smn9E=B)-UnBSL{dEQg`RR ze0Lr9+;rD>*KF5e*Li_~I&jdFyoTv|D!dD!v0zfcgyxr)vTWCD@A)8`_qjZsQ(#;T zxUOTXL1WuC+t_ZLw3*m8CTSbnHXAjzoiv)*wkP(Pf1iEMO|Ir97i(sHFP``572?*M zH?LvB&@|?r)ns{$zf`qglAwmul`SA&$OgQQf*; zuD8_WsXWXL6!Qj89ZTJaLlA|vF8gCSh1xZUu;o_fX1andT3askd&W5>OLSp$2|@cXjdT%{5u7p@Aq>q~zc%%=%$oNWBM`{wsH8pwD+S_^!Lvus#*%l%2KdI(WGWcI)4TEz&W& zlr4aD7se81t;Tcm%h7g4C83bJm9Ty<@v2AnyFdeErVs_|$+mbNHnqqwu_$xny43`Mv(u(qA6f2>@iD+UewasWh zwU?pyF}vVfZ*bF^6vEyIhQHM0gsW~SN@)O#;Fy#)BRbW;7;95EBP3Yxn6mvU-fA!} z>^U^|{YK8N|HqdSF!px+3P4qbl@A1V6>bmZBf7t<_h!^c;tekepfq~3?mJJ738q^@ z5CU_}Q|6PJcagLC<5xAqVa6SSj#_9YF~v8~@y&eFMv|x<9-3O8Lb9Q5{hI$NOGTY@ z1|+v`VY_0=%rc-OxWNs2&Lei}P5Jya3qW+$Q!LP25lVL@NTFAOmV#H)gW0rlo3;4L z(frpiTf~FYjiC-2R0bthm$)KpA>t)v4#RYg^7PPWdoGbghJ@#!ZG!)$-W8rRxLvz%uT zo;SqD$m~&JWVK+IR>N3S*$>Rxdy)vd=ePrF+}B#a?Q(x+7Qc9SF?=KV|B(_}j&VT4 zAji*Oi!X##QHA_`RaxZ33vAICZt8b)ooMIG7tjf=P^&A_)e&V&Aeb~=4uH+T7D-mO z6<@5y&7T_*10VXE1MdJNb}!;sr}c!Pu|l)f5_#LSixno)1NT|p`{}E7B(TZH&?2Fx zGtJq9hjOfQ#k?X*B zm)AY~049BBmCxJ+Kx`K4Qc3W2JilH*NAyF+B-ekhK^*`6xw^K7Hb|ll~iXY4=4}{qBnmsebYE#HX4p#_#IaUUu3qtl9EP^ z-x!smFrNJtC@-{g|IC)!sC3Yj=jR*CJNr7evo~(EyRJ08=rgs6Dxt;_%B_0sKp2i# za`807)7)V=bz|EqBDeC@8~FTv{K50VJgdU6BaTGpXm5UmeJm8R>N;cg{TV;-8Xx)S zVd{NZT+xRCT^0UAG}i9O*hNI1_{Gj#fv8zwN;fc< zzH_(!=FmXZJywRJ@#3VYQ->q(A-zNsy|?@Vv;#xD?w>L>&7hO*E(wr)HVQxMlZy{F zW|j0Aci~x@Smm`vHOFYkZ==k~O_V4Yx8{DOlg*SU_{B35}mgO=wr+B9eQj0ey?&#uJFInpG>BQitgtMd6{D`8+&`@I=fRU ztUJv2EzBL0_wm5=q5QX2(?OKmY)l$})u|)di#Dw5X0P-1V~f|dDNLfz`peoY9k_O@ z^TdM$QQi{v4XwTpPSP^JTmFf(kZ6n&k!X69eW+`FWENq|TA#==Z`DX*Al_V{?>xfd z#OSwd(O3z_p0eom9JAwaaeM~DmyKTo>XY2_Q?;J`2j5#6k3&wIpPeILlyX+OOnUk8 zoivRDEX?V+n(D` z0k8)*-;<2YM_XN&Ng(tB;F5Odj}pncqXq-5KMCg3bmc6Q+}rdnN>dYicPz_yIxnF- zCh?UdLXDkVR$cA5(MhiShpQU7<2T8rMV?fF`HxA%%A5O76~|1lsGb_>5T0SE`vRr6b20zE)7-v)!haa zaKS5{#(bCPPjbyo{6%xYD&6CcR>C?gX z)2P$9N$jF8bN$Z-otbV*UH3<5bC;kAo;!MPlahhh>s&vEClAPB6zeRjqT}BNFV^>2 z?%91T5g}D9RXoKqsnp3~UcFJ|*K0q2_tS(I++jGFK&XNN4jYhJDxUVEF^vUvioxHxQZ} zjhjSbUmekXs$_1@t7XB?LKYsP2~!@q%OE8;#Vnyj#7TOUd*y+|DadUZEl|bA3ZZda zs=RGy-FpvYxZ0U(*LSneRPT;s_js?WT~w7n&?8-@OMgit#$ac+K6maj(`HCSrjVR61YG)O!5YAiKt6>;C17RY-Cy!!g9rt1h|H7vLs|2WKP;-tvdj3s+F1TE_yfsCaa_U z!-+)Dn=fM~UgZ5q^5|3_Dof^U`I-+nnp#-kY@DQ(zbUzKeKf=i{956Rg11yp7G>Fd z86ngY(7ME+OhMgnN@dHS*q^S=8LnG=3W7+oNJyYSl zI4149*mmc9Vd{9c5r|>Ag#aW_@(7cJ^%tNbg$~pIWN@(x#3}h~=MRZUKs88?XdZlL zW{GnI-YQN1}MKDucjEzYIAo)6e4ZiraX~o{Ln=TA{k_6tM`X56p# z;V#r<)Wgqo0adkJbJUc9!<GmX!ur_BEJ7Ex^c62BQvU}5UVwp zPFT+p@fI{*b*G6jzM!vj@D*{p1g9;ljrn$eMvQ^pV67WA|R*ZVxd;_{>{gIBK0=8#`QUboz+}Up8svMoNG17 zbu}eBaZWZ7k~b-aBzweGh^Z4l$?Fv4D%<$T-tFbsNC;|5Xs`*X;vOyEYMp8=i73Cy zfq>kOMM6rj@;CQS6vL33PFqD;c`3FavkH64?_#BLiuXNuu7%ehUB_WX{5-q2vB#eu zg&m=-|3XfcO>cfb9=sMnP!To>2caZT*AT-HjV)hI(B;uds?f)iD z3`GAYaq{;65+_C_qdsF2kkE^L`Rc0Kk~xPtpS>iZ4&hSP@?^ROed%k);RU4f?f0-V z@vf2H?0LBXNAq_1@zzbh{bx!EMPw+NVnG2Hl}SxeZKrr7_*jUxH-2tszp>T++rM;S z@wU%wUkRVWb=%C;VZLZQI{qLtYus+#*%vK^h#(US3|02gZ40fOg{`E8PEn2O z7JmlPh<;}Um}N%Y3JldWaH^k%K;xs|WGCN{*{1B=g*{JZ<2j!|*FK58DlT0g-{A>!CIAVV{G#G+?Mvcz{h6l1IQQ>X#U zypFU@Xjt&HPtwe%Rm|vN3}8kodrr*YO$Oku?sqLx$@S7UGnD)$@cN6M(PC6{K3|ky z%|J)G`86Q6M*jZyVfZU}C=+pqm8!I4F9bb)E+#mF4G*UjuHJ6O!w9xyV8>$l9W0Z3*Ot zzLVN>L~wP&ANanX-Rt@x6elzhj#d-mE~Db)Zoa0eKvT+y@mL8}yBW zuWa8Go@STBFZ=fVFccw8ooh@@D=AQT&_!C5Tw9B%vW?(PajzW$4eQ?#CY;v|GbEgw zeNEiHqEh9U=`)>_Kc>v99hj2n7v#hG+W^A&q$bzkhqxGizXECejvVLl9CM>x`5($^ z;nugA&IedicLTOGO=xlDwQMM2zZhYpwM)LioN0xhwBBf)=nN(IDdXiP10&61j9|5q z82`F%V9PO%$ivci{zYZtS{G>?MJmZ?#gk+`Ans*vY$O;|%Yms4caGu-Td-`<6yWiR zZ{wn`=pm!cC?k91HER|N&ar{oLEHUp1GMrChGT|0(ZcC$2zE4?GXDwdBesh$bk8Ak zmP|mztV>7l4NTe@hQ)m5G9&FbAJ{hXRZB0a$nJc(Q(ca;3K z`@MDbUKa-j3mWK4SMHkAt`|tX{<)_O@}=b1y&s@PQT~?u(0KTi5*ym_ai$vGcDwfB z_&(7cZt|3DB9EZ2m@k>tzm{b}qI2NB0p6elCJe`rD}ItE<@N!48mpDhEH9^1EsH&F z{q&;g5GM4QNK;QmLxQ)thnoIm$P{L@O_v+M7pty(xaWel_c|FGZHHC``y6JOG7yQR z|KWEUQ&u^=EQ=iMmQTZgQuN}+qamFX;&Sx$80*w9VW`Zukl38-zHXWN0 z&;LFX6`y@MK>kd#g7BQ_lM21(CfXo6j@7rC3Zq@a9V&e3TWH&hcF?A9WXsJ?x#B;%hEI`4EkV)-4@{G9#W>b<4pVPhuy4 zYNmE*@yknF!0}_Rr!#9^>6>gYswP!3T~=U?NsRM?oOh7Ib8T?r0Z}z8d8?(ph@Yyg zM9k1?JLaJFSlhHe9zf-}x+tY>?uM+gRO+QEw)zVy=8R=^J{TuztwA-K-6k$XC*WTQ zMPOu;otey#xL(f8N*Q(qOTtVN6GH==kjmh2$4Wh32N>@YoiDH(m~Kxg&^FeZN|xNF{v2gZ zc#d%Q=pnopaM+OpF{{G`*L>3tP1;3Bb|pofZ>NKnJdYSueAORWO~R>M zt&K~lnJ-f&9a%?*?F+1E!HEcGHY5VSN_UNX6SgJEZBu2?JU2Uu4rS~)BR#0%Tu5X& zy{=IvrLRQRz7*|$#;txN=v7A}^C*9?6@H-X?okJUpK2QtkMuioZTHBsgh>S?+qVq2 z){1SNi8zk2qN{dVLwGe}*!-6+A6h{d&96m{?i07%D+d>aDKSFIl_1oCDTD_(JaBJf&UPFJIDos^Ey-CUqNKm zFCBE%s~S@H3g3QT$dZ^(JLCBgAVP<{z6WL@B)l8lKi$@s{zn!mG1yYE2{JTxDutG( z?8O%KEDl7IY;xEO@xLmQv4TP>o2-TY=@$h)g);52>2LqSSBuaFrWaFuQ!l_4vB*-P zLZ(5*-c6a&2seleHA8=+$UHwd$nY1=d~)qHV6z>cErMM$d~j`D_f1Y0=N8YP4-5$4 znK*rN@E%<3a1iBc?Zu6|S*isvg2u_;X2@yvcU^N|4A(q2{YSkPk%~+{o);6*jucIv zHDDmyf;o{2!$tsyl`oBwI*8`=3*jIZut>`FMSc7c)rRp(x5vENIKJ%nx-^)(^WWe%*Vr!Ut zrj6}$+-9O*J>l}%a+d1Uqs4QUk7Yx#APFp^j)xKe8UN7@w#Bzl5t-%it(k=b86XH)M0vh9iG$e>NN97h!E%MrQrh+m)H}gNt0F=kXZ)*U zd}I5+MzIKuejmpq20p8PSaV6eKjnTr(P++%Hn>=z_rMdaUUuIZbSLk{ROkS(MpK$w zhqh#B@B~g;A=kj$`QtVD$2A<9y9lzFJIPAuSdCxTt`_3J$NlE}Dvc-4*ORqYSDd`1 z(*>jDCbxR7j#mT4-D-}Ds_rK+=lA7>@l6`~p zm{$$`8rKIpzQ&YVkC{2cxaY_wwQ#ONea%zK(IGBng7bG8jrvk54bF6tna!0BhL1TY zZ#xzPX}N5c%`E45O#}jMY;gg7` zy|WRnRGZUwUxT9N1f(BWEX>}z|DbEpg`fK7EIQRCwGoRC$@c{q`Z~95Kvd0{CZKC! zhwfyo&>?L$$4#;8_N=OS_9NP?n;3OAdndbN>Qp&6`4YaZ`OL3=P1t|@)YeGU^I`3N zCP0$R;C;k>z%#Yx`Y7d)x4XT=pl-DQ-Jbk%=3>!pRRgNruhBzX2mxEk#=Gf>v)~Q8gNG#|=#XuqV?JcMXG*j(pL$g&|haxGCeAh37 zMq!=w9ah6MkEj}_*4dOG6DG$bSgiYDWmz|}>Ig!IgSLUe`enD-eaWECKQ;JNFAy9e z#@^rRiB6U(eAu|l(nKwE$VV%j-0Z9raK^w_bsqUQ)CgVxa~VdVqw{4WTof^Oz#OX3 zMuDicxzQsSDLr~-W#g0fME$PKrd7xN!K8rOt5U;{&3A|$Isp2OuCAJR=><^ryQ|6R zD|fI=(z1{M$wDQt8LS11Fzt-QcRfxn=s2_SL{0udTemEx^F9+`2z?;_0_AiJraj|e z8$4T%uDyPb7GSH95sz2{96H#Us!F>8e2Er!mwp+BeCr5(*lgI}m4TjvUg>1ifUP6BN)rZP`V>64SYtdy zS4FR%$+Vl#nu)XqLRxa8*jRBFs5YWRvAvUGK}>4@v0HaUPUkd1jJU&K@0=V~qRrSN zJ&<)D@>n}%hv9(k!?7Xg!kV*rk0Hdg$8koD10>G3=St50Bwy?J%R%Lnd_46(1ql!v zun3CDWSMN$#FsQPug>eLR~E3Jkv#oxL~at(l>F7AkLC7q1?-1)pqF`iDn)$U`jLZ5?relksZSq`UWM<&*Bh`cyS()zP76PHyu)L61%?; z538b@484{SvE5i}Iov?!EOq}@w+=}Gx}AwSabRSN5b8K%claESJzlHYW61eXB^4kJ zJ6I!nMR?dXHTrf$7>zPqK5+<54D+*pErES}z>Rk^Stc}i$bl+aB@lnXi5(7p;=P`% z2Go8`*9rvUWtQ|k@W_$2A9xI$>_?jJ{+Xnq_X=1ws68Di7MKsscGL7l0dWQynxYAY zQo#+UcxVIwj&T&piCn{nAF|%TPn^3Zk8#Juvm#8~`)duinc%0-;=wYD{=O7iE>(-Yg^Te{78w&YSNZ6meBmXHPYQVg8raxgjK*%{ zG~Y}}TScw!+eri0XN+YjP2Ds&st z<&3+%6urjspUuh1#tR9j@@fw`v*y+81!$ zGZVgl&ey-#MJ&M~aT%O^sAPM%ejE;p0ydB*JKh;y2E|<_mU0S7-8a+;yw#aZkd4Zc zApylD1X9&o8#ffI{0+OAr9KzsWC@vh$WE=�z0w7-uLCSd0<8oVOYfH24ApQr@gq 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