From 696820c6ca17da56f6b05a60da811decc466ddb5 Mon Sep 17 00:00:00 2001 From: jacktengg Date: Thu, 26 Feb 2026 17:51:21 +0800 Subject: [PATCH 01/13] [feat](condition cache) Support condition cache for external table --- .../rowset/segment_v2/condition_cache.cpp | 28 + .../olap/rowset/segment_v2/condition_cache.h | 28 + be/src/olap/rowset/segment_v2/row_ranges.h | 63 ++ be/src/vec/exec/format/generic_reader.h | 21 +- be/src/vec/exec/format/orc/vorc_reader.cpp | 71 +++ be/src/vec/exec/format/orc/vorc_reader.h | 13 + .../format/parquet/vparquet_group_reader.cpp | 185 +++++- .../format/parquet/vparquet_group_reader.h | 14 + .../exec/format/parquet/vparquet_reader.cpp | 3 + .../vec/exec/format/parquet/vparquet_reader.h | 10 + be/src/vec/exec/format/table/iceberg_reader.h | 4 + .../exec/format/table/table_format_reader.h | 8 + .../format/table/transactional_hive_reader.h | 4 + be/src/vec/exec/scan/file_scanner.cpp | 75 +++ be/src/vec/exec/scan/file_scanner.h | 12 + .../rowset/segment_v2/row_ranges_test.cpp | 198 +++++++ .../vec/exec/format/condition_cache_test.cpp | 550 ++++++++++++++++++ 17 files changed, 1263 insertions(+), 24 deletions(-) create mode 100644 be/test/vec/exec/format/condition_cache_test.cpp diff --git a/be/src/olap/rowset/segment_v2/condition_cache.cpp b/be/src/olap/rowset/segment_v2/condition_cache.cpp index f4ebd2584fc287..def9b3c9243992 100644 --- a/be/src/olap/rowset/segment_v2/condition_cache.cpp +++ b/be/src/olap/rowset/segment_v2/condition_cache.cpp @@ -49,4 +49,32 @@ void ConditionCache::insert(const CacheKey& key, std::shared_ptrcapacity(), result->capacity(), CachePriority::NORMAL)); } +bool ConditionCache::lookup(const ExternalCacheKey& key, ConditionCacheHandle* handle) { + auto encoded = key.encode(); + if (encoded.empty()) { + return false; + } + auto* lru_handle = LRUCachePolicy::lookup(encoded); + if (lru_handle == nullptr) { + return false; + } + *handle = ConditionCacheHandle(this, lru_handle); + return true; +} + +void ConditionCache::insert(const ExternalCacheKey& key, + std::shared_ptr> result) { + auto encoded = key.encode(); + if (encoded.empty()) { + return; + } + std::unique_ptr cache_value_ptr = + std::make_unique(); + cache_value_ptr->filter_result = result; + + ConditionCacheHandle(this, LRUCachePolicy::insert(encoded, (void*)cache_value_ptr.release(), + result->capacity(), result->capacity(), + CachePriority::NORMAL)); +} + } // namespace doris::segment_v2 diff --git a/be/src/olap/rowset/segment_v2/condition_cache.h b/be/src/olap/rowset/segment_v2/condition_cache.h index cc66b20417c4ee..55ce6d0cb03868 100644 --- a/be/src/olap/rowset/segment_v2/condition_cache.h +++ b/be/src/olap/rowset/segment_v2/condition_cache.h @@ -69,6 +69,30 @@ class ConditionCache : public LRUCachePolicy { std::shared_ptr> filter_result; }; + // Cache key for external tables (Hive ORC/Parquet) + struct ExternalCacheKey { + ExternalCacheKey(const std::string& path_, int64_t modification_time_, int64_t file_size_, + uint64_t digest_) + : path(path_), + modification_time(modification_time_), + file_size(file_size_), + digest(digest_) {} + std::string path; + int64_t modification_time; + int64_t file_size; + uint64_t digest; + + [[nodiscard]] std::string encode() const { + std::string key = path; + char buf[24]; + memcpy(buf, &modification_time, 8); + memcpy(buf + 8, &file_size, 8); + memcpy(buf + 16, &digest, 8); + key.append(buf, 24); + return key; + } + }; + // Create global instance of this class static ConditionCache* create_global_cache(size_t capacity, uint32_t num_shards = 16) { auto* res = new ConditionCache(capacity, num_shards); @@ -90,6 +114,10 @@ class ConditionCache : public LRUCachePolicy { bool lookup(const CacheKey& key, ConditionCacheHandle* handle); void insert(const CacheKey& key, std::shared_ptr> filter_result); + + bool lookup(const ExternalCacheKey& key, ConditionCacheHandle* handle); + + void insert(const ExternalCacheKey& key, std::shared_ptr> filter_result); }; class ConditionCacheHandle { diff --git a/be/src/olap/rowset/segment_v2/row_ranges.h b/be/src/olap/rowset/segment_v2/row_ranges.h index 2f990faa762d70..d6de02f90d04b5 100644 --- a/be/src/olap/rowset/segment_v2/row_ranges.h +++ b/be/src/olap/rowset/segment_v2/row_ranges.h @@ -192,6 +192,52 @@ class RowRanges { *result = std::move(tmp_range); } + // Calculates the exception (set difference) of the two specified RowRanges objects: left \ right. + // The result contains all row indexes that are in the left ranges but NOT in the right ranges. + // For example: + // [100, 300) \ [150, 200) = [100, 150), [200, 300) + // [100, 300) \ [0, 150) = [150, 300) + // [100, 300) \ [250, 400) = [100, 250) + // [100, 200) \ [200, 300) = [100, 200) + // [100, 300) \ [0, 400) = + // [100, 200), [300, 400) \ [150, 350) = [100, 150), [350, 400) + static void ranges_exception(const RowRanges& left, const RowRanges& right, RowRanges* result) { + RowRanges tmp_range; + int right_index = 0; + for (auto it1 = left._ranges.begin(); it1 != left._ranges.end(); ++it1) { + int64_t current_from = it1->from(); + int64_t current_to = it1->to(); + for (int i = right_index; i < right._ranges.size(); ++i) { + const RowRange& range2 = right._ranges[i]; + if (current_from >= current_to) { + // Current range fully consumed + break; + } + if (current_to <= range2.from()) { + // Current remaining range is entirely before range2, no more subtraction needed + break; + } + if (current_from >= range2.to()) { + // range2 is entirely before the current remaining range, advance right_index + right_index = i + 1; + continue; + } + // There is overlap between [current_from, current_to) and range2 + if (current_from < range2.from()) { + // Left portion before the overlap: [current_from, range2.from()) + tmp_range.add(RowRange(current_from, range2.from())); + } + // Advance current_from past the overlap + current_from = range2.to(); + } + // Add whatever remains of the current left range + if (current_from < current_to) { + tmp_range.add(RowRange(current_from, current_to)); + } + } + *result = std::move(tmp_range); + } + static roaring::Roaring ranges_to_roaring(const RowRanges& ranges) { roaring::Roaring result; for (auto it = ranges._ranges.begin(); it != ranges._ranges.end(); ++it) { @@ -275,6 +321,23 @@ class RowRanges { _count += range_to_add.count(); } + // Returns the row index (within the original row space) of the pos-th element + // across all ranges. For example, if ranges are [0,3000) and [8000,11000), + // pos=0 returns 0, pos=2999 returns 2999, pos=3000 returns 8000. + int64_t get_row_index_by_pos(int64_t pos) const { + size_t remaining = pos; + for (const auto& range : _ranges) { + size_t range_len = range.count(); + if (remaining < range_len) { + return range.from() + remaining; + } + remaining -= range_len; + } + // pos is out of bounds; return -1 to indicate invalid + DCHECK(false) << "pos " << pos << " is out of bounds for RowRanges with count " << _count; + return -1; + } + uint64_t get_digest(uint64_t seed) const { for (auto range : _ranges) { seed = range.get_digest(seed); diff --git a/be/src/vec/exec/format/generic_reader.h b/be/src/vec/exec/format/generic_reader.h index 620112a71e7999..4cec1bcca35c88 100644 --- a/be/src/vec/exec/format/generic_reader.h +++ b/be/src/vec/exec/format/generic_reader.h @@ -35,6 +35,16 @@ namespace doris::vectorized { class Block; class VSlotRef; + +// Context passed from FileScanner to readers for condition cache integration. +// On MISS: readers populate filter_result per-granule during predicate evaluation. +// On HIT: readers skip granules where filter_result[granule] == false. +struct ConditionCacheContext { + bool is_hit = false; + std::shared_ptr> filter_result; // per-granule: true = has surviving rows + static constexpr int GRANULE_SIZE = 2048; +}; + // This a reader interface for all file readers. // A GenericReader is responsible for reading a file and return // a set of blocks with specified schema, @@ -103,7 +113,16 @@ class GenericReader : public ProfileCollector { bool _fill_all_columns = false; TPushAggOp::type _push_down_agg_type {}; - // For TopN queries, rows will be read according to row ids produced by TopN result. +public: + // Pass condition cache context to the reader for HIT/MISS tracking. + virtual void set_condition_cache_context(std::shared_ptr ctx) {} + + // Returns true if this reader has delete operations (e.g. Iceberg position/equality deletes, + // Hive ACID deletes). Used to disable condition cache when deletes are present, since cached + // granule results may become stale if delete files change between queries. + virtual bool has_delete_operations() const { return false; } + +protected: bool _read_by_rows = false; std::list _row_ids; diff --git a/be/src/vec/exec/format/orc/vorc_reader.cpp b/be/src/vec/exec/format/orc/vorc_reader.cpp index cf41dee95172b5..b1f3c5a4eeef32 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.cpp +++ b/be/src/vec/exec/format/orc/vorc_reader.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include "vec/exprs/vdirect_in_predicate.h" @@ -2250,6 +2251,9 @@ Status OrcReader::_get_next_block_impl(Block* block, size_t* read_rows, bool* eo return Status::OK(); } + _last_read_row_number = _row_reader->getRowNumber() == std::numeric_limits::max() + ? 0 + : _row_reader->getRowNumber(); if (_lazy_read_ctx.can_lazy_read) { std::vector columns_to_filter; int column_to_keep = block->columns(); @@ -2264,6 +2268,23 @@ Status OrcReader::_get_next_block_impl(Block* block, size_t* read_rows, bool* eo // reset decimal_scale_params_index; _decimal_scale_params_index = 0; try { + // Condition cache HIT: skip consecutive false granules before reading + if (_condition_cache_ctx && _condition_cache_ctx->is_hit) { + auto& cache = *_condition_cache_ctx->filter_result; + uint64_t granule = _last_read_row_number / ConditionCacheContext::GRANULE_SIZE; + auto max_granule = cache.size(); + while (granule < max_granule && !cache[granule]) { + granule++; + } + if (granule < max_granule) { + uint64_t target_row = granule * ConditionCacheContext::GRANULE_SIZE; + if (target_row > _last_read_row_number) { + _row_reader->seekToRow(target_row); + } + } + // If granule >= max_granule: no more surviving granules in cache, + // but cache may not cover all rows. Let nextBatch determine actual EOF. + } rr = _row_reader->nextBatch(*_batch, block); if (rr == 0 || _batch->numElements == 0) { *eof = true; @@ -2363,6 +2384,23 @@ Status OrcReader::_get_next_block_impl(Block* block, size_t* read_rows, bool* eo // reset decimal_scale_params_index; _decimal_scale_params_index = 0; try { + // Condition cache HIT: skip consecutive false granules before reading + if (_condition_cache_ctx && _condition_cache_ctx->is_hit) { + auto& cache = *_condition_cache_ctx->filter_result; + uint64_t granule = _last_read_row_number / ConditionCacheContext::GRANULE_SIZE; + auto max_granule = cache.size(); + while (granule < max_granule && !cache[granule]) { + granule++; + } + if (granule < max_granule) { + uint64_t target_row = granule * ConditionCacheContext::GRANULE_SIZE; + if (target_row > _last_read_row_number) { + _row_reader->seekToRow(target_row); + } + } + // If granule >= max_granule: no more surviving granules in cache, + // but cache may not cover all rows. Let nextBatch determine actual EOF. + } rr = _row_reader->nextBatch(*_batch, block); if (rr == 0 || _batch->numElements == 0) { *eof = true; @@ -2480,6 +2518,24 @@ Status OrcReader::_get_next_block_impl(Block* block, size_t* read_rows, bool* eo bool can_filter_all = false; RETURN_IF_ERROR_OR_CATCH_EXCEPTION(VExprContext::execute_conjuncts( filter_conjuncts, &filters, block, &result_filter, &can_filter_all)); + + // Condition cache MISS: mark granules with surviving rows (non-lazy path) + if (_condition_cache_ctx && !_condition_cache_ctx->is_hit) { + auto& cache = *_condition_cache_ctx->filter_result; + auto* filter_data = result_filter.data(); + size_t num_rows = block->rows(); + for (size_t i = 0; i < num_rows; i++) { + if (filter_data[i]) { + size_t granule = (_last_read_row_number + i) / + ConditionCacheContext::GRANULE_SIZE; + if (granule >= cache.size()) { + cache.resize(granule + 1, false); + } + cache[granule] = true; + } + } + } + if (can_filter_all) { for (auto& col : columns_to_filter) { std::move(*block->get_by_position(col).column).assume_mutable()->clear(); @@ -2697,6 +2753,21 @@ Status OrcReader::filter(orc::ColumnVectorBatch& data, uint16_t* sel, uint16_t s sel[new_size] = i; new_size += result_filter_data[i] ? 1 : 0; } + + // Condition cache MISS: mark granules with surviving rows + if (_condition_cache_ctx && !_condition_cache_ctx->is_hit && new_size > 0) { + auto& cache = *_condition_cache_ctx->filter_result; + for (uint16_t i = 0; i < size; i++) { + if (result_filter_data[i]) { + size_t granule = (_last_read_row_number + i) / ConditionCacheContext::GRANULE_SIZE; + if (granule >= cache.size()) { + cache.resize(granule + 1, false); + } + cache[granule] = true; + } + } + } + _statistics.lazy_read_filtered_rows += static_cast(size - new_size); data.numElements = new_size; return Status::OK(); diff --git a/be/src/vec/exec/format/orc/vorc_reader.h b/be/src/vec/exec/format/orc/vorc_reader.h index bc341a08854c6b..71fda539b6182c 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.h +++ b/be/src/vec/exec/format/orc/vorc_reader.h @@ -232,6 +232,16 @@ class OrcReader : public GenericReader { bool count_read_rows() override { return true; } + void set_condition_cache_context(std::shared_ptr ctx) override { + _condition_cache_ctx = std::move(ctx); + } + + bool has_delete_operations() const override { + return (_position_delete_ordered_rowids != nullptr && + !_position_delete_ordered_rowids->empty()) || + (_delete_rows != nullptr && !_delete_rows->empty()); + } + protected: void _collect_profile_before_close() override; @@ -700,6 +710,9 @@ class OrcReader : public GenericReader { std::unique_ptr _batch; std::unique_ptr _reader = nullptr; std::unique_ptr _row_reader; + + uint64_t _last_read_row_number = -1; + std::shared_ptr _condition_cache_ctx; std::unique_ptr _orc_filter; orc::RowReaderOptions _row_reader_options; diff --git a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp index c66eccc642a1ca..44641fc75210da 100644 --- a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp @@ -116,7 +116,8 @@ Status RowGroupReader::init( _col_name_to_slot_id = colname_to_slot_id; _slot_id_to_filter_conjuncts = slot_id_to_filter_conjuncts; _read_ranges = row_ranges; - _remaining_rows = row_ranges.count(); + _filter_read_ranges_by_condition_cache(); + _remaining_rows = _read_ranges.count(); if (_read_table_columns.empty()) { // Query task that only select columns in path. @@ -326,6 +327,7 @@ Status RowGroupReader::next_batch(Block* block, size_t batch_size, size_t* read_ return _do_lazy_read(block, batch_size, read_rows, batch_eof); } else { FilterMap filter_map; + int64_t batch_base_row = _total_read_rows; RETURN_IF_ERROR((_read_column_data(block, _lazy_read_ctx.all_read_columns, batch_size, read_rows, batch_eof, filter_map))); RETURN_IF_ERROR( @@ -378,6 +380,12 @@ Status RowGroupReader::next_batch(Block* block, size_t batch_size, size_t* read_ _filter_conjuncts, &filters, block, &result_filter, &can_filter_all)); } + // Condition cache MISS: mark granules with surviving rows (non-lazy path) + if (!can_filter_all) { + _mark_condition_cache_granules(result_filter.data(), block->rows(), + batch_base_row); + } + if (can_filter_all) { for (auto& col : columns_to_filter) { std::move(*block->get_by_position(col).column).assume_mutable()->clear(); @@ -409,6 +417,100 @@ Status RowGroupReader::next_batch(Block* block, size_t batch_size, size_t* read_ } } +// On condition cache HIT, removes row ranges whose granules have no surviving rows from +// _read_ranges BEFORE column readers are created. This makes ParquetColumnReader skip I/O +// entirely for false-granule rows — both predicate and lazy columns — via its existing +// page/row-skipping infrastructure. +// +// After filtering, _condition_cache_ctx is set to nullptr because: +// 1. The batch-level cache checks in _do_lazy_read() / non-lazy path are now redundant +// (false-granule rows have already been excluded from _read_ranges). +// Maps each batch row to its global parquet file position via _read_ranges, then marks +// the corresponding condition cache granule as true if the filter indicates the row survived. +// batch_seq_start is the number of rows already read sequentially before this batch +// (i.e., _total_read_rows before the batch started). +void RowGroupReader::_mark_condition_cache_granules(const uint8_t* filter_data, size_t num_rows, + int64_t batch_seq_start) { + if (!_condition_cache_ctx || _condition_cache_ctx->is_hit) { + return; + } + auto& cache = *_condition_cache_ctx->filter_result; + for (size_t i = 0; i < num_rows; i++) { + if (filter_data[i]) { + // row-group-relative position of this row + int64_t rg_pos = _read_ranges.get_row_index_by_pos(batch_seq_start + i); + // global row number in the parquet file + size_t granule = (_current_row_group_idx.first_row + rg_pos) / + ConditionCacheContext::GRANULE_SIZE; + if (granule >= cache.size()) { + cache.resize(granule + 1, false); + } + cache[granule] = true; + } + } +} + +// 2. The MISS population code paths should not execute on a HIT. +// 3. FileScanner retains its own shared_ptr to the context for cache finalization. +void RowGroupReader::_filter_read_ranges_by_condition_cache() { + if (!_condition_cache_ctx || !_condition_cache_ctx->is_hit) { + return; + } + auto& filter_result = *_condition_cache_ctx->filter_result; + if (filter_result.empty()) { + return; + } + + _read_ranges = + filter_ranges_by_cache(_read_ranges, filter_result, _current_row_group_idx.first_row); + _is_row_group_filtered = _read_ranges.is_empty(); + _condition_cache_ctx = nullptr; +} + +// Filters read_ranges by removing rows whose cache granule is false. +// +// Cache granule i covers global file rows [i*GS, (i+1)*GS). Since read_ranges uses +// row-group-relative indices and first_row is the global position of the row group's +// first row, granule i maps to row-group-relative range: +// [max(0, i*GS - first_row), max(0, (i+1)*GS - first_row)) +// +// We build a RowRanges of all false-granule regions (in row-group-relative coordinates), +// then subtract from read_ranges via ranges_exception. +// +// Granules beyond cache.size() are kept conservatively (assumed true). +// +// Example 1: first_row = 0, read_ranges = [0, 8192), cache = {true, false, true, false} +// false granules 1,3 -> filtered = [2048, 4096), [6144, 8192) +// Result: [0, 2048), [4096, 6144) +// +// Example 2: first_row = 1024, read_ranges = [0, 4096), cache = {false, true, false} +// granule 0 -> rg [-1024, 1024) clipped to [0, 1024) +// granule 2 -> rg [3072, 5120) clipped to [3072, 4096) by ranges_exception +// filtered = [0, 1024), [3072, 5120) +// Result: [1024, 3072) +RowRanges RowGroupReader::filter_ranges_by_cache(const RowRanges& read_ranges, + const std::vector& cache, + int64_t first_row) { + constexpr int64_t GS = ConditionCacheContext::GRANULE_SIZE; + RowRanges filtered_ranges; + + for (size_t i = 0; i < cache.size(); i++) { + if (!cache[i]) { + int64_t rg_from = + std::max(static_cast(0), static_cast(i) * GS - first_row); + int64_t rg_to = std::max(static_cast(0), + (static_cast(i) + 1) * GS - first_row); + if (rg_from < rg_to) { + filtered_ranges.add(RowRange(rg_from, rg_to)); + } + } + } + + RowRanges result; + RowRanges::ranges_exception(read_ranges, filtered_ranges, &result); + return result; +} + Status RowGroupReader::_read_column_data(Block* block, const std::vector& table_columns, size_t batch_size, size_t* read_rows, bool* batch_eof, @@ -505,6 +607,8 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re pre_read_rows = 0; pre_eof = false; FilterMap filter_map; + int64_t batch_base_row = _total_read_rows; + ; RETURN_IF_ERROR(_read_column_data(block, _lazy_read_ctx.predicate_columns.first, batch_size, &pre_read_rows, &pre_eof, filter_map)); if (pre_read_rows == 0) { @@ -512,6 +616,29 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re break; } pre_raw_read_rows += pre_read_rows; + + // Condition cache HIT: check if all rows in this batch are in false granules + bool cache_skip_batch = false; + if (_condition_cache_ctx && _condition_cache_ctx->is_hit) { + auto& cache = *_condition_cache_ctx->filter_result; + int64_t first_rg_pos = _read_ranges.get_row_index_by_pos(batch_base_row); + int64_t last_rg_pos = + _read_ranges.get_row_index_by_pos(batch_base_row + pre_read_rows - 1); + size_t start_granule = (_current_row_group_idx.first_row + first_rg_pos) / + ConditionCacheContext::GRANULE_SIZE; + size_t end_granule = (_current_row_group_idx.first_row + last_rg_pos) / + ConditionCacheContext::GRANULE_SIZE; + bool has_surviving_granule = false; + for (size_t g = start_granule; g <= end_granule && !has_surviving_granule; g++) { + if (g < cache.size() && cache[g]) { + has_surviving_granule = true; + } + } + if (!has_surviving_granule) { + cache_skip_batch = true; + } + } + RETURN_IF_ERROR(_fill_partition_columns(block, pre_read_rows, _lazy_read_ctx.predicate_partition_columns)); RETURN_IF_ERROR(_fill_missing_columns(block, pre_read_rows, @@ -536,31 +663,43 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re { SCOPED_RAW_TIMER(&_predicate_filter_time); - // generate filter vector - if (_lazy_read_ctx.resize_first_column) { - // VExprContext.execute has an optimization, the filtering is executed when block->rows() > 0 - // The following process may be tricky and time-consuming, but we have no other way. - block->get_by_position(0).column->assume_mutable()->resize(pre_read_rows); - } - result_filter.assign(pre_read_rows, static_cast(1)); - std::vector filters; - if (_position_delete_ctx.has_filter) { - filters.push_back(_pos_delete_filter_ptr.get()); - } + // Condition cache HIT: skip predicate evaluation for false-granule batches + if (cache_skip_batch) { + can_filter_all = true; + result_filter.assign(pre_read_rows, static_cast(0)); + } else { + // generate filter vector + if (_lazy_read_ctx.resize_first_column) { + // VExprContext.execute has an optimization, the filtering is executed when block->rows() > 0 + // The following process may be tricky and time-consuming, but we have no other way. + block->get_by_position(0).column->assume_mutable()->resize(pre_read_rows); + } + result_filter.assign(pre_read_rows, static_cast(1)); + std::vector filters; + if (_position_delete_ctx.has_filter) { + filters.push_back(_pos_delete_filter_ptr.get()); + } - VExprContextSPtrs filter_contexts; - for (auto& conjunct : _filter_conjuncts) { - filter_contexts.emplace_back(conjunct); - } + VExprContextSPtrs filter_contexts; + for (auto& conjunct : _filter_conjuncts) { + filter_contexts.emplace_back(conjunct); + } - { - RETURN_IF_ERROR(VExprContext::execute_conjuncts(filter_contexts, &filters, block, - &result_filter, &can_filter_all)); - } + { + RETURN_IF_ERROR(VExprContext::execute_conjuncts( + filter_contexts, &filters, block, &result_filter, &can_filter_all)); + } - if (_lazy_read_ctx.resize_first_column) { - // We have to clean the first column to insert right data. - block->get_by_position(0).column->assume_mutable()->clear(); + // Condition cache MISS: mark granules with surviving rows + if (!can_filter_all) { + _mark_condition_cache_granules(result_filter.data(), pre_read_rows, + batch_base_row); + } + + if (_lazy_read_ctx.resize_first_column) { + // We have to clean the first column to insert right data. + block->get_by_position(0).column->assume_mutable()->clear(); + } } } diff --git a/be/src/vec/exec/format/parquet/vparquet_group_reader.h b/be/src/vec/exec/format/parquet/vparquet_group_reader.h index 0cf2b36eb1b6bd..72a8f2f6508431 100644 --- a/be/src/vec/exec/format/parquet/vparquet_group_reader.h +++ b/be/src/vec/exec/format/parquet/vparquet_group_reader.h @@ -31,6 +31,7 @@ #include "olap/id_manager.h" #include "olap/utils.h" #include "vec/columns/column.h" +#include "vec/exec/format/generic_reader.h" #include "vec/exec/format/parquet/parquet_common.h" #include "vec/exec/format/table/table_format_reader.h" #include "vec/exprs/vexpr_fwd.h" @@ -183,6 +184,11 @@ class RowGroupReader : public ProfileCollector { void set_remaining_rows(int64_t rows) { _remaining_rows = rows; } int64_t get_remaining_rows() { return _remaining_rows; } + // Filters read_ranges by removing row chunks whose condition cache granules are all-false. + // Pure algorithm, exposed as static for testability. + static RowRanges filter_ranges_by_cache(const RowRanges& read_ranges, + const std::vector& cache, int64_t first_row); + void set_row_id_column_iterator( const std::pair, int>& iterator_pair) { @@ -198,6 +204,10 @@ class RowGroupReader : public ProfileCollector { _col_name_to_block_idx = col_name_to_block_idx; } + void set_condition_cache_context(std::shared_ptr ctx) { + _condition_cache_ctx = std::move(ctx); + } + protected: void _collect_profile_before_close() override { if (_file_reader != nullptr) { @@ -235,6 +245,9 @@ class RowGroupReader : public ProfileCollector { Status _rewrite_dict_predicates(); Status _rewrite_dict_conjuncts(std::vector& dict_codes, int slot_id, bool is_nullable); void _convert_dict_cols_to_string_cols(Block* block); + void _filter_read_ranges_by_condition_cache(); + void _mark_condition_cache_granules(const uint8_t* filter_data, size_t num_rows, + int64_t batch_seq_start); Status _get_current_batch_row_id(size_t read_rows); Status _fill_row_id_columns(Block* block, size_t read_rows, bool is_current_row_ids); @@ -259,6 +272,7 @@ class RowGroupReader : public ProfileCollector { int64_t _dict_filter_rewrite_time = 0; // If continuous batches are skipped, we can cache them to skip a whole page size_t _cached_filtered_rows = 0; + std::shared_ptr _condition_cache_ctx; std::unique_ptr _pos_delete_filter_ptr; int64_t _total_read_rows = 0; const TupleDescriptor* _tuple_descriptor = nullptr; diff --git a/be/src/vec/exec/format/parquet/vparquet_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_reader.cpp index 606ec6b123427c..2448d0a96a704f 100644 --- a/be/src/vec/exec/format/parquet/vparquet_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_reader.cpp @@ -828,6 +828,9 @@ Status ParquetReader::_next_row_group_reader() { _current_group_reader->set_current_row_group_idx(_current_row_group_index); _current_group_reader->set_row_id_column_iterator(_row_id_column_iterator_pair); _current_group_reader->set_col_name_to_block_idx(_col_name_to_block_idx); + if (_condition_cache_ctx) { + _current_group_reader->set_condition_cache_context(_condition_cache_ctx); + } _current_group_reader->_table_info_node_ptr = _table_info_node_ptr; return _current_group_reader->init(_file_metadata->schema(), candidate_row_ranges, _col_offsets, diff --git a/be/src/vec/exec/format/parquet/vparquet_reader.h b/be/src/vec/exec/format/parquet/vparquet_reader.h index f04c950c224acf..64114842a636be 100644 --- a/be/src/vec/exec/format/parquet/vparquet_reader.h +++ b/be/src/vec/exec/format/parquet/vparquet_reader.h @@ -175,6 +175,14 @@ class ParquetReader : public GenericReader { bool count_read_rows() override { return true; } + void set_condition_cache_context(std::shared_ptr ctx) override { + _condition_cache_ctx = std::move(ctx); + } + + bool has_delete_operations() const override { + return _delete_rows != nullptr && !_delete_rows->empty(); + } + protected: void _collect_profile_before_close() override; @@ -306,6 +314,8 @@ class ParquetReader : public GenericReader { bool _row_group_eof = true; size_t _total_groups; // num of groups(stripes) of a parquet(orc) file + std::shared_ptr _condition_cache_ctx; + // Through this node, you can find the file column based on the table column. std::shared_ptr _table_info_node_ptr = TableSchemaChangeHelper::ConstNode::get_instance(); diff --git a/be/src/vec/exec/format/table/iceberg_reader.h b/be/src/vec/exec/format/table/iceberg_reader.h index ffbb18d1255ea6..08b6231ef00d5e 100644 --- a/be/src/vec/exec/format/table/iceberg_reader.h +++ b/be/src/vec/exec/format/table/iceberg_reader.h @@ -85,6 +85,10 @@ class IcebergTableReader : public TableFormatReader, public TableSchemaChangeHel virtual void set_delete_rows() = 0; + bool has_delete_operations() const override { + return _equality_delete_impl != nullptr || TableFormatReader::has_delete_operations(); + } + Status read_deletion_vector(const std::string& data_file_path, const TIcebergDeleteFileDesc& delete_file_desc); diff --git a/be/src/vec/exec/format/table/table_format_reader.h b/be/src/vec/exec/format/table/table_format_reader.h index 00442dc45f992f..2de784558d64c1 100644 --- a/be/src/vec/exec/format/table/table_format_reader.h +++ b/be/src/vec/exec/format/table/table_format_reader.h @@ -106,6 +106,14 @@ class TableFormatReader : public GenericReader { bool count_read_rows() override { return _file_format_reader->count_read_rows(); } + void set_condition_cache_context(std::shared_ptr ctx) override { + _file_format_reader->set_condition_cache_context(std::move(ctx)); + } + + bool has_delete_operations() const override { + return _file_format_reader->has_delete_operations(); + } + protected: std::string _table_format; // hudi, iceberg, paimon std::unique_ptr _file_format_reader; // parquet, orc diff --git a/be/src/vec/exec/format/table/transactional_hive_reader.h b/be/src/vec/exec/format/table/transactional_hive_reader.h index 29d1b1ec334e68..ec130e755c9115 100644 --- a/be/src/vec/exec/format/table/transactional_hive_reader.h +++ b/be/src/vec/exec/format/table/transactional_hive_reader.h @@ -89,6 +89,10 @@ class TransactionalHiveReader : public TableFormatReader, public TableSchemaChan Status get_next_block_inner(Block* block, size_t* read_rows, bool* eof) final; + bool has_delete_operations() const override { + return !_delete_rows.empty() || TableFormatReader::has_delete_operations(); + } + Status init_reader( const std::vector& column_names, std::unordered_map* col_name_to_block_idx, diff --git a/be/src/vec/exec/scan/file_scanner.cpp b/be/src/vec/exec/scan/file_scanner.cpp index 97c622cedc24c6..89c1b027859fe4 100644 --- a/be/src/vec/exec/scan/file_scanner.cpp +++ b/be/src/vec/exec/scan/file_scanner.cpp @@ -165,6 +165,11 @@ Status FileScanner::init(RuntimeState* state, const VExprContextSPtrs& conjuncts ADD_COUNTER_WITH_LEVEL(_local_state->scanner_profile(), "RuntimeFilterPartitionPrunedRangeNum", TUnit::UNIT, 1); + _condition_cache_hit_range_counter = ADD_COUNTER_WITH_LEVEL( + _local_state->scanner_profile(), "ConditionCacheHitRangeNum", TUnit::UNIT, 1); + _condition_cache_filtered_batch_counter = ADD_COUNTER_WITH_LEVEL( + _local_state->scanner_profile(), "ConditionCacheFilteredBatchNum", TUnit::UNIT, 1); + _file_cache_statistics.reset(new io::FileCacheStatistics()); _file_reader_stats.reset(new io::FileReaderStats()); @@ -382,6 +387,9 @@ void FileScanner::_get_slot_ids(VExpr* expr, std::vector* slot_ids) { Status FileScanner::open(RuntimeState* state) { RETURN_IF_CANCELLED(state); RETURN_IF_ERROR(Scanner::open(state)); + if (_local_state) { + _condition_cache_digest = _local_state->get_condition_cache_digest(); + } RETURN_IF_ERROR(_split_source->get_next(&_first_scan_range, &_current_range)); if (_first_scan_range) { RETURN_IF_ERROR(_init_expr_ctxes()); @@ -431,6 +439,7 @@ Status FileScanner::_get_block_wrapped(RuntimeState* state, Block* block, bool* do { RETURN_IF_CANCELLED(state); if (_cur_reader == nullptr || _cur_reader_eof) { + _finalize_condition_cache_for_range(); // The file may not exist because the file list is got from meta cache, // And the file may already be removed from storage. // Just ignore not found files. @@ -446,6 +455,11 @@ Status FileScanner::_get_block_wrapped(RuntimeState* state, Block* block, bool* } else if (!st) { return st; } + _init_condition_cache_for_range(); + // Pass condition cache context to the reader + if (_cur_reader && _condition_cache_ctx) { + _cur_reader->set_condition_cache_context(_condition_cache_ctx); + } } if (_scanner_eof) { @@ -1756,11 +1770,72 @@ Status FileScanner::_init_expr_ctxes() { return Status::OK(); } +void FileScanner::_init_condition_cache_for_range() { + _condition_cache_hit = false; + _condition_cache = nullptr; + _condition_cache_ctx = nullptr; + + if (_condition_cache_digest == 0 || _is_load) { + return; + } + + // Disable condition cache when delete operations exist (e.g. Iceberg position/equality + // deletes, Hive ACID deletes). Cached granule results may become stale if delete files + // change between queries while the data file's cache key remains the same. + if (_cur_reader && _cur_reader->has_delete_operations()) { + return; + } + + auto* cache = segment_v2::ConditionCache::instance(); + segment_v2::ConditionCache::ExternalCacheKey cache_key( + _current_range.path, _current_range.__isset.file_size ? _current_range.file_size : -1, + _current_range.__isset.modification_time ? _current_range.modification_time : 0, + _condition_cache_digest); + + segment_v2::ConditionCacheHandle handle; + _condition_cache_hit = cache->lookup(cache_key, &handle); + if (_condition_cache_hit) { + _condition_cache = handle.get_filter_result(); + COUNTER_UPDATE(_condition_cache_hit_range_counter, 1); + } else { + // Allocate empty cache for population during miss + _condition_cache = std::make_shared>(); + } + + // Create context to pass to readers + _condition_cache_ctx = std::make_shared(); + _condition_cache_ctx->is_hit = _condition_cache_hit; + _condition_cache_ctx->filter_result = _condition_cache; +} + +void FileScanner::_finalize_condition_cache_for_range() { + if (_condition_cache == nullptr || _condition_cache_hit || _condition_cache_digest == 0 || + _is_load) { + _condition_cache = nullptr; + _condition_cache_hit = false; + _condition_cache_ctx = nullptr; + return; + } + + auto* cache = segment_v2::ConditionCache::instance(); + segment_v2::ConditionCache::ExternalCacheKey cache_key( + _current_range.path, _current_range.__isset.file_size ? _current_range.file_size : -1, + _current_range.__isset.modification_time ? _current_range.modification_time : 0, + _condition_cache_digest); + + cache->insert(cache_key, std::move(_condition_cache)); + _condition_cache = nullptr; + _condition_cache_hit = false; + _condition_cache_ctx = nullptr; +} + Status FileScanner::close(RuntimeState* state) { if (!_try_close()) { return Status::OK(); } + _finalize_condition_cache_for_range(); + if (_cur_reader) { RETURN_IF_ERROR(_cur_reader->close()); } diff --git a/be/src/vec/exec/scan/file_scanner.h b/be/src/vec/exec/scan/file_scanner.h index 24c5d0d03b0ace..c9cf87dc11055c 100644 --- a/be/src/vec/exec/scan/file_scanner.h +++ b/be/src/vec/exec/scan/file_scanner.h @@ -31,6 +31,7 @@ #include "common/status.h" #include "exec/olap_common.h" #include "io/io_common.h" +#include "olap/rowset/segment_v2/condition_cache.h" #include "pipeline/exec/file_scan_operator.h" #include "runtime/descriptors.h" #include "util/runtime_profile.h" @@ -234,6 +235,14 @@ class FileScanner : public Scanner { int64_t _last_bytes_read_from_local = 0; int64_t _last_bytes_read_from_remote = 0; + // Condition cache for external tables + uint64_t _condition_cache_digest = 0; + bool _condition_cache_hit = false; + std::shared_ptr> _condition_cache; + std::shared_ptr _condition_cache_ctx; + RuntimeProfile::Counter* _condition_cache_hit_range_counter = nullptr; + RuntimeProfile::Counter* _condition_cache_filtered_batch_counter = nullptr; + private: Status _init_expr_ctxes(); Status _init_src_block(Block* block); @@ -279,6 +288,9 @@ class FileScanner : public Scanner { _counter.num_rows_filtered = 0; } + void _init_condition_cache_for_range(); + void _finalize_condition_cache_for_range(); + TPushAggOp::type _get_push_down_agg_type() { return _local_state == nullptr ? TPushAggOp::type::NONE : _local_state->get_push_down_agg_type(); diff --git a/be/test/olap/rowset/segment_v2/row_ranges_test.cpp b/be/test/olap/rowset/segment_v2/row_ranges_test.cpp index cd9cc5fbaf4413..8e9d41af1c1184 100644 --- a/be/test/olap/rowset/segment_v2/row_ranges_test.cpp +++ b/be/test/olap/rowset/segment_v2/row_ranges_test.cpp @@ -135,5 +135,203 @@ TEST_F(RowRangesTest, TestRangesToRoaring) { EXPECT_EQ(row_ranges_union.count(), row_bitmap.cardinality()); } +TEST_F(RowRangesTest, TestRangesException) { + // Case 1: Right subtracts a hole from the middle of left + // [100, 300) \ [150, 200) = [100, 150), [200, 300) + { + RowRanges left = RowRanges::create_single(100, 300); + RowRanges right = RowRanges::create_single(150, 200); + RowRanges result; + RowRanges::ranges_exception(left, right, &result); + EXPECT_EQ(150, result.count()); // 50 + 100 + EXPECT_EQ(2, result.range_size()); + EXPECT_EQ(100, result.get_range_from(0)); + EXPECT_EQ(150, result.get_range_to(0)); + EXPECT_EQ(200, result.get_range_from(1)); + EXPECT_EQ(300, result.get_range_to(1)); + } + + // Case 2: Right trims the left side + // [100, 300) \ [0, 150) = [150, 300) + { + RowRanges left = RowRanges::create_single(100, 300); + RowRanges right = RowRanges::create_single(0, 150); + RowRanges result; + RowRanges::ranges_exception(left, right, &result); + EXPECT_EQ(150, result.count()); + EXPECT_EQ(1, result.range_size()); + EXPECT_EQ(150, result.get_range_from(0)); + EXPECT_EQ(300, result.get_range_to(0)); + } + + // Case 3: Right trims the right side + // [100, 300) \ [250, 400) = [100, 250) + { + RowRanges left = RowRanges::create_single(100, 300); + RowRanges right = RowRanges::create_single(250, 400); + RowRanges result; + RowRanges::ranges_exception(left, right, &result); + EXPECT_EQ(150, result.count()); + EXPECT_EQ(1, result.range_size()); + EXPECT_EQ(100, result.get_range_from(0)); + EXPECT_EQ(250, result.get_range_to(0)); + } + + // Case 4: No overlap (right is after left) — left unchanged + // [100, 200) \ [200, 300) = [100, 200) + { + RowRanges left = RowRanges::create_single(100, 200); + RowRanges right = RowRanges::create_single(200, 300); + RowRanges result; + RowRanges::ranges_exception(left, right, &result); + EXPECT_EQ(100, result.count()); + EXPECT_EQ(1, result.range_size()); + EXPECT_EQ(100, result.get_range_from(0)); + EXPECT_EQ(200, result.get_range_to(0)); + } + + // Case 5: Right fully covers left — result is empty + // [100, 300) \ [0, 400) = + { + RowRanges left = RowRanges::create_single(100, 300); + RowRanges right = RowRanges::create_single(0, 400); + RowRanges result; + RowRanges::ranges_exception(left, right, &result); + EXPECT_EQ(0, result.count()); + EXPECT_TRUE(result.is_empty()); + } + + // Case 6: Multiple left ranges, single right range cutting through both + // [100, 200), [300, 400) \ [150, 350) = [100, 150), [350, 400) + { + RowRanges left; + left.add(RowRange(100, 200)); + left.add(RowRange(300, 400)); + RowRanges right = RowRanges::create_single(150, 350); + RowRanges result; + RowRanges::ranges_exception(left, right, &result); + EXPECT_EQ(100, result.count()); // 50 + 50 + EXPECT_EQ(2, result.range_size()); + EXPECT_EQ(100, result.get_range_from(0)); + EXPECT_EQ(150, result.get_range_to(0)); + EXPECT_EQ(350, result.get_range_from(1)); + EXPECT_EQ(400, result.get_range_to(1)); + } + + // Case 7: No overlap (right is before left) — left unchanged + // [100, 200) \ [0, 50) = [100, 200) + { + RowRanges left = RowRanges::create_single(100, 200); + RowRanges right = RowRanges::create_single(0, 50); + RowRanges result; + RowRanges::ranges_exception(left, right, &result); + EXPECT_EQ(100, result.count()); + EXPECT_EQ(1, result.range_size()); + EXPECT_EQ(100, result.get_range_from(0)); + EXPECT_EQ(200, result.get_range_to(0)); + } + + // Case 8: Empty right — left unchanged + // [100, 200) \ = [100, 200) + { + RowRanges left = RowRanges::create_single(100, 200); + RowRanges right; + RowRanges result; + RowRanges::ranges_exception(left, right, &result); + EXPECT_EQ(100, result.count()); + EXPECT_EQ(1, result.range_size()); + EXPECT_EQ(100, result.get_range_from(0)); + EXPECT_EQ(200, result.get_range_to(0)); + } + + // Case 9: Empty left — result is empty + // \ [100, 200) = + { + RowRanges left; + RowRanges right = RowRanges::create_single(100, 200); + RowRanges result; + RowRanges::ranges_exception(left, right, &result); + EXPECT_EQ(0, result.count()); + EXPECT_TRUE(result.is_empty()); + } + + // Case 10: Left equals right — result is empty + // [100, 200) \ [100, 200) = + { + RowRanges left = RowRanges::create_single(100, 200); + RowRanges right = RowRanges::create_single(100, 200); + RowRanges result; + RowRanges::ranges_exception(left, right, &result); + EXPECT_EQ(0, result.count()); + EXPECT_TRUE(result.is_empty()); + } + + // Case 11: Multiple right ranges punching multiple holes + // [0, 100) \ [10, 20), [30, 40), [60, 70) = [0, 10), [20, 30), [40, 60), [70, 100) + { + RowRanges left = RowRanges::create_single(0, 100); + RowRanges right; + right.add(RowRange(10, 20)); + right.add(RowRange(30, 40)); + right.add(RowRange(60, 70)); + RowRanges result; + RowRanges::ranges_exception(left, right, &result); + EXPECT_EQ(70, result.count()); // 10 + 10 + 20 + 30 + EXPECT_EQ(4, result.range_size()); + EXPECT_EQ(0, result.get_range_from(0)); + EXPECT_EQ(10, result.get_range_to(0)); + EXPECT_EQ(20, result.get_range_from(1)); + EXPECT_EQ(30, result.get_range_to(1)); + EXPECT_EQ(40, result.get_range_from(2)); + EXPECT_EQ(60, result.get_range_to(2)); + EXPECT_EQ(70, result.get_range_from(3)); + EXPECT_EQ(100, result.get_range_to(3)); + } + + // Case 12: Multiple left ranges, multiple right ranges + // [0, 50), [100, 150), [200, 250) \ [25, 125), [225, 300) + // = [0, 25), [125, 150), [200, 225) + { + RowRanges left; + left.add(RowRange(0, 50)); + left.add(RowRange(100, 150)); + left.add(RowRange(200, 250)); + RowRanges right; + right.add(RowRange(25, 125)); + right.add(RowRange(225, 300)); + RowRanges result; + RowRanges::ranges_exception(left, right, &result); + EXPECT_EQ(75, result.count()); // 25 + 25 + 25 + EXPECT_EQ(3, result.range_size()); + EXPECT_EQ(0, result.get_range_from(0)); + EXPECT_EQ(25, result.get_range_to(0)); + EXPECT_EQ(125, result.get_range_from(1)); + EXPECT_EQ(150, result.get_range_to(1)); + EXPECT_EQ(200, result.get_range_from(2)); + EXPECT_EQ(225, result.get_range_to(2)); + } + + // Case 13: Verify consistency with roaring bitmap approach + { + RowRanges left; + left.add(RowRange(10, 50)); + left.add(RowRange(80, 120)); + RowRanges right; + right.add(RowRange(30, 90)); + + RowRanges result; + RowRanges::ranges_exception(left, right, &result); + + // Verify using roaring bitmaps + roaring::Roaring left_bitmap = RowRanges::ranges_to_roaring(left); + roaring::Roaring right_bitmap = RowRanges::ranges_to_roaring(right); + roaring::Roaring expected = left_bitmap - right_bitmap; + + roaring::Roaring result_bitmap = RowRanges::ranges_to_roaring(result); + EXPECT_EQ(expected.cardinality(), result_bitmap.cardinality()); + EXPECT_TRUE(expected == result_bitmap); + } +} + } // namespace segment_v2 } // namespace doris diff --git a/be/test/vec/exec/format/condition_cache_test.cpp b/be/test/vec/exec/format/condition_cache_test.cpp new file mode 100644 index 00000000000000..05cf37d314fb27 --- /dev/null +++ b/be/test/vec/exec/format/condition_cache_test.cpp @@ -0,0 +1,550 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you 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 "olap/rowset/segment_v2/condition_cache.h" + +#include + +#include +#include +#include + +#include "vec/exec/format/generic_reader.h" +#include "vec/exec/format/parquet/vparquet_reader.h" +#include "vec/exec/format/table/iceberg_reader.h" + +namespace doris::vectorized { + +constexpr int GS = ConditionCacheContext::GRANULE_SIZE; // 2048 + +class FilterRangesByCacheTest : public testing::Test {}; + +// Single contiguous range, first_row = 0, alternating true/false granules. +TEST_F(FilterRangesByCacheTest, SingleRangeAlternatingGranules) { + // 4 full granules = 8192 rows, range [0, 8192) + RowRanges ranges; + ranges.add(RowRange(0, 4 * GS)); + // granule 0=true, 1=false, 2=true, 3=false + std::vector cache = {true, false, true, false}; + + auto result = RowGroupReader::filter_ranges_by_cache(ranges, cache, /*first_row=*/0); + + // Expect granules 0 and 2 kept: [0, 2048), [4096, 6144) + EXPECT_EQ(result.range_size(), 2); + EXPECT_EQ(result.count(), 2 * GS); + EXPECT_EQ(result.get_range_from(0), 0); + EXPECT_EQ(result.get_range_to(0), GS); + EXPECT_EQ(result.get_range_from(1), 2 * GS); + EXPECT_EQ(result.get_range_to(1), 3 * GS); +} + +// All granules true -> ranges unchanged. +TEST_F(FilterRangesByCacheTest, AllGranulesTrue) { + RowRanges ranges; + ranges.add(RowRange(0, 3 * GS)); + std::vector cache = {true, true, true}; + + auto result = RowGroupReader::filter_ranges_by_cache(ranges, cache, 0); + + EXPECT_EQ(result.range_size(), 1); + EXPECT_EQ(result.count(), 3 * GS); + EXPECT_EQ(result.get_range_from(0), 0); + EXPECT_EQ(result.get_range_to(0), 3 * GS); +} + +// All granules false -> empty ranges. +TEST_F(FilterRangesByCacheTest, AllGranulesFalse) { + RowRanges ranges; + ranges.add(RowRange(0, 3 * GS)); + std::vector cache = {false, false, false}; + + auto result = RowGroupReader::filter_ranges_by_cache(ranges, cache, 0); + + EXPECT_EQ(result.range_size(), 0); + EXPECT_EQ(result.count(), 0); +} + +// first_row offset shifts granule boundaries. +TEST_F(FilterRangesByCacheTest, NonZeroFirstRow) { + // first_row = 1024, range [0, 4096) -> 4096 rows + // Sequential positions 0..4095, global_seq = 1024..5119 + // granule 0 (global 0..2047): seq 0..1023 -> range [0, 1024) + // granule 1 (global 2048..4095): seq 1024..3071 -> range [1024, 3072) + // granule 2 (global 4096..6143): seq 3072..4095 -> range [3072, 4096) + RowRanges ranges; + ranges.add(RowRange(0, 4096)); + // granule 0=false, 1=true, 2=false + std::vector cache = {false, true, false}; + + auto result = RowGroupReader::filter_ranges_by_cache(ranges, cache, /*first_row=*/1024); + + // Only granule 1 kept: rows with global_seq in [2048, 4096) -> range [1024, 3072) + EXPECT_EQ(result.range_size(), 1); + EXPECT_EQ(result.count(), 2048); + EXPECT_EQ(result.get_range_from(0), 1024); + EXPECT_EQ(result.get_range_to(0), 3072); +} + +// Range that doesn't start at 0 (from page index filtering). +TEST_F(FilterRangesByCacheTest, RangeNotStartingAtZero) { + // Range [2048, 6144) = 4096 rows, first_row = 0 + // Granule 0 (false): covers rg-relative [0, 2048) — no overlap with [2048, 6144) + // Granule 1 (true): covers rg-relative [2048, 4096) — kept + // Beyond cache: [4096, 6144) kept conservatively + RowRanges ranges; + ranges.add(RowRange(2048, 6144)); + std::vector cache = {false, true}; + + auto result = RowGroupReader::filter_ranges_by_cache(ranges, cache, 0); + + // False granule [0, 2048) doesn't overlap [2048, 6144), so nothing is filtered + EXPECT_EQ(result.range_size(), 1); + EXPECT_EQ(result.count(), 4096); + EXPECT_EQ(result.get_range_from(0), 2048); + EXPECT_EQ(result.get_range_to(0), 6144); +} + +// Multiple non-contiguous ranges (from page index filtering) with a single-entry cache. +TEST_F(FilterRangesByCacheTest, NonContiguousRangesGranuleSpansGap) { + // Ranges: [0, 1000), [5000, 6000) = 2000 total rows, first_row = 0 + // Granule 0 covers rg-relative [0, 2048) — only overlaps [0, 1000) + // [5000, 6000) is in granule 2 ([4096, 6144)) which is beyond cache -> kept conservatively + RowRanges ranges; + ranges.add(RowRange(0, 1000)); + ranges.add(RowRange(5000, 6000)); + + // Granule 0 = false -> discard [0, 1000); [5000, 6000) kept (beyond cache) + std::vector cache = {false}; + auto result = RowGroupReader::filter_ranges_by_cache(ranges, cache, 0); + EXPECT_EQ(result.count(), 1000); + EXPECT_EQ(result.range_size(), 1); + EXPECT_EQ(result.get_range_from(0), 5000); + EXPECT_EQ(result.get_range_to(0), 6000); + + // Granule 0 = true -> keep all + std::vector cache2 = {true}; + result = RowGroupReader::filter_ranges_by_cache(ranges, cache2, 0); + EXPECT_EQ(result.count(), 2000); + EXPECT_EQ(result.range_size(), 2); +} + +// Non-contiguous ranges where granule boundaries fall within ranges. +TEST_F(FilterRangesByCacheTest, NonContiguousRangesMultipleGranules) { + // Ranges: [0, 3000), [8000, 11000) = 6000 total rows, first_row = 0 + // Granule 0 (false): rg-relative [0, 2048) — overlaps [0, 2048) of first range + // Granule 1 (true): rg-relative [2048, 4096) — overlaps [2048, 3000) of first range + // Granule 2 (false): rg-relative [4096, 6144) — no overlap with either range + // [8000, 11000) is in granules 3-5, all beyond cache -> kept conservatively + RowRanges ranges; + ranges.add(RowRange(0, 3000)); + ranges.add(RowRange(8000, 11000)); + + // granule 0=false, 1=true, 2=false + std::vector cache = {false, true, false}; + auto result = RowGroupReader::filter_ranges_by_cache(ranges, cache, 0); + + // Granule 0 removes [0, 2048) from [0, 3000) -> [2048, 3000) kept + // Granule 2 [4096, 6144) doesn't overlap [8000, 11000) -> [8000, 11000) kept + EXPECT_EQ(result.range_size(), 2); + EXPECT_EQ(result.get_range_from(0), 2048); + EXPECT_EQ(result.get_range_to(0), 3000); + EXPECT_EQ(result.get_range_from(1), 8000); + EXPECT_EQ(result.get_range_to(1), 11000); + EXPECT_EQ(result.count(), (3000 - 2048) + (11000 - 8000)); // 952 + 3000 = 3952 +} + +// Cache smaller than the actual row range -> out-of-range granules kept conservatively. +TEST_F(FilterRangesByCacheTest, CacheSmallerThanRange) { + // 4 granules of rows, cache only covers 2 + RowRanges ranges; + ranges.add(RowRange(0, 4 * GS)); + std::vector cache = {false, true}; // only 2 entries + + auto result = RowGroupReader::filter_ranges_by_cache(ranges, cache, 0); + + // Granule 0 = false -> skip; granule 1 = true -> keep + // Granule 2, 3 beyond cache -> kept conservatively + EXPECT_EQ(result.range_size(), 1); // [GS, 4*GS) merged since granules 1,2,3 all kept + EXPECT_EQ(result.count(), 3 * GS); + EXPECT_EQ(result.get_range_from(0), GS); + EXPECT_EQ(result.get_range_to(0), 4 * GS); +} + +// Partial granule at the end of a range. +TEST_F(FilterRangesByCacheTest, PartialGranuleAtEnd) { + // Range [0, 3000) = 3000 rows, first_row = 0 + // Granule 0: seq [0, 2048) -> [0, 2048) + // Granule 1: seq [2048, 3000) -> [2048, 3000) (partial, only 952 rows) + RowRanges ranges; + ranges.add(RowRange(0, 3000)); + std::vector cache = {true, false}; + + auto result = RowGroupReader::filter_ranges_by_cache(ranges, cache, 0); + + // Only granule 0 kept + EXPECT_EQ(result.range_size(), 1); + EXPECT_EQ(result.count(), GS); + EXPECT_EQ(result.get_range_from(0), 0); + EXPECT_EQ(result.get_range_to(0), GS); +} + +// Empty ranges input. +TEST_F(FilterRangesByCacheTest, EmptyRanges) { + RowRanges ranges; + std::vector cache = {true, false, true}; + + auto result = RowGroupReader::filter_ranges_by_cache(ranges, cache, 0); + + EXPECT_EQ(result.range_size(), 0); + EXPECT_EQ(result.count(), 0); +} + +// Large first_row offset (simulating second row group in file). +TEST_F(FilterRangesByCacheTest, LargeFirstRowOffset) { + // first_row = 100000 (second row group starts here) + // Range [0, 2048) = one full granule + // global_seq = 100000 + 0 = 100000, granule = 100000/2048 = 48 + int64_t first_row = 100000; + RowRanges ranges; + ranges.add(RowRange(0, GS)); + std::vector cache(50, false); // 50 granules, all false + cache[48] = true; // granule 48 = true + + auto result = RowGroupReader::filter_ranges_by_cache(ranges, cache, first_row); + + // global_seq for first chunk: 100000, granule 48 = true -> keep + // But first chunk may not be the full range if 100000 is not aligned... + // 100000 / 2048 = 48, 49*2048 = 100352, so rows_to_granule_end = 100352 - 100000 = 352 + // chunk 1: [0, 352) -> granule 48 = true -> keep + // chunk 2: [352, 2048) -> global_seq = 100352 -> granule 49 = false -> discard + EXPECT_EQ(result.count(), 352); + EXPECT_EQ(result.range_size(), 1); + EXPECT_EQ(result.get_range_from(0), 0); + EXPECT_EQ(result.get_range_to(0), 352); +} + +// ============================================================ +// Mock / Testable reader classes +// ============================================================ + +// GenericReader whose has_delete_operations() result is configurable, +// used as the inner file-format reader for table-format readers. +class MockFileFormatReader : public GenericReader { +public: + bool mock_has_deletes = false; + Status get_next_block(Block*, size_t*, bool*) override { return Status::OK(); } + bool has_delete_operations() const override { return mock_has_deletes; } +}; + +// Concrete IcebergTableReader (pure-virtual stubs filled in). +// Exposes the protected _equality_delete_impl for testing. +class TestableIcebergReader : public IcebergTableReader { +public: + using IcebergTableReader::IcebergTableReader; + void set_delete_rows() override {} + Status _read_position_delete_file(const TFileRangeDesc*, DeleteFile*) override { + return Status::OK(); + } + std::unique_ptr _create_equality_reader(const TFileRangeDesc&) override { + return nullptr; + } + void test_set_equality_delete(std::unique_ptr impl) { + _equality_delete_impl = std::move(impl); + } +}; + +// Minimal EqualityDeleteBase (only needs to be non-null for the check). +class MockEqualityDelete : public EqualityDeleteBase { +public: + MockEqualityDelete() : EqualityDeleteBase(nullptr) {} + Status _build_set() override { return Status::OK(); } + Status filter_data_block(Block*, const std::unordered_map*) override { + return Status::OK(); + } +}; + +// ============================================================ +// These tests reproduce the logic from +// FileScanner::_init_condition_cache_for_range() (file_scanner.cpp) +// using real ConditionCache + real reader instances. +// ============================================================ + +class ConditionCacheDeleteOpsTest : public testing::Test { +protected: + void SetUp() override { + _cache.reset(segment_v2::ConditionCache::create_global_cache(10 * 1024 * 1024, 4)); + } + + void TearDown() override { _cache.reset(); } + + // Reproduces the exact logic from FileScanner::_init_condition_cache_for_range(). + // Returns whether the condition cache context was created (i.e. cache was not skipped). + void simulate_init_condition_cache(GenericReader* reader, uint64_t digest, + const std::string& path, + /*out*/ bool& cache_hit, + /*out*/ std::shared_ptr>& cache, + /*out*/ std::shared_ptr& ctx) { + cache_hit = false; + cache = nullptr; + ctx = nullptr; + + // Mirrors: if (_condition_cache_digest == 0 || _is_load) return; + if (digest == 0) { + return; + } + + // Mirrors: if (_cur_reader && _cur_reader->has_delete_operations()) return; + if (reader && reader->has_delete_operations()) { + return; + } + + auto* cc = _cache.get(); + if (cc == nullptr) { + return; + } + + segment_v2::ConditionCache::ExternalCacheKey key(path, -1, 0, digest); + + segment_v2::ConditionCacheHandle handle; + cache_hit = cc->lookup(key, &handle); + if (cache_hit) { + cache = handle.get_filter_result(); + } else { + cache = std::make_shared>(); + } + + ctx = std::make_shared(); + ctx->is_hit = cache_hit; + ctx->filter_result = cache; + } + + // Inserts a pre-populated entry into the cache for the given path/digest. + void prepopulate_cache(const std::string& path, uint64_t digest) { + segment_v2::ConditionCache::ExternalCacheKey key(path, -1, 0, digest); + auto filter = std::make_shared>(std::vector {true, false, true}); + _cache->insert(key, filter); + } + + std::unique_ptr _cache; +}; + +// -- ParquetReader: no deletes -> cache populated (MISS) -- +TEST_F(ConditionCacheDeleteOpsTest, ParquetNoDeletes_CachePopulated) { + TFileScanRangeParams params; + TFileRangeDesc range; + auto reader = ParquetReader::create_unique(params, range, nullptr, nullptr); + + bool hit = false; + std::shared_ptr> cache; + std::shared_ptr ctx; + simulate_init_condition_cache(reader.get(), 42, "/data/file.parquet", hit, cache, ctx); + + EXPECT_FALSE(hit); + EXPECT_NE(ctx, nullptr); + EXPECT_NE(cache, nullptr); + EXPECT_FALSE(ctx->is_hit); +} + +// -- ParquetReader: with position deletes -> cache skipped -- +TEST_F(ConditionCacheDeleteOpsTest, ParquetWithPositionDeletes_CacheSkipped) { + TFileScanRangeParams params; + TFileRangeDesc range; + auto reader = ParquetReader::create_unique(params, range, nullptr, nullptr); + std::vector deletes = {1, 5, 10}; + reader->set_delete_rows(&deletes); + + bool hit = false; + std::shared_ptr> cache; + std::shared_ptr ctx; + simulate_init_condition_cache(reader.get(), 42, "/data/file.parquet", hit, cache, ctx); + + EXPECT_EQ(ctx, nullptr); + EXPECT_EQ(cache, nullptr); +} + +// -- OrcReader: no deletes -> cache populated (MISS) -- +TEST_F(ConditionCacheDeleteOpsTest, OrcNoDeletes_CachePopulated) { + TFileScanRangeParams params; + TFileRangeDesc range; + auto reader = OrcReader::create_unique(params, range, "", nullptr); + + bool hit = false; + std::shared_ptr> cache; + std::shared_ptr ctx; + simulate_init_condition_cache(reader.get(), 99, "/data/file.orc", hit, cache, ctx); + + EXPECT_FALSE(hit); + EXPECT_NE(ctx, nullptr); + EXPECT_NE(cache, nullptr); + EXPECT_FALSE(ctx->is_hit); +} + +// -- OrcReader: with position deletes -> cache skipped -- +TEST_F(ConditionCacheDeleteOpsTest, OrcWithPositionDeletes_CacheSkipped) { + TFileScanRangeParams params; + TFileRangeDesc range; + auto reader = OrcReader::create_unique(params, range, "", nullptr); + std::vector pos_deletes = {0, 3, 7}; + reader->set_position_delete_rowids(&pos_deletes); + + bool hit = false; + std::shared_ptr> cache; + std::shared_ptr ctx; + simulate_init_condition_cache(reader.get(), 99, "/data/file.orc", hit, cache, ctx); + + EXPECT_EQ(ctx, nullptr); + EXPECT_EQ(cache, nullptr); +} + +// -- OrcReader: with ACID deletes -> cache skipped -- +TEST_F(ConditionCacheDeleteOpsTest, OrcWithAcidDeletes_CacheSkipped) { + TFileScanRangeParams params; + TFileRangeDesc range; + auto reader = OrcReader::create_unique(params, range, "", nullptr); + TransactionalHiveReader::AcidRowIDSet acid_deletes; + acid_deletes.insert({1, 0, 5}); + reader->set_delete_rows(&acid_deletes); + + bool hit = false; + std::shared_ptr> cache; + std::shared_ptr ctx; + simulate_init_condition_cache(reader.get(), 99, "/data/file.orc", hit, cache, ctx); + + EXPECT_EQ(ctx, nullptr); + EXPECT_EQ(cache, nullptr); +} + +// -- IcebergTableReader: with equality deletes -> cache skipped -- +TEST_F(ConditionCacheDeleteOpsTest, IcebergWithEqualityDeletes_CacheSkipped) { + TFileScanRangeParams params; + TFileRangeDesc range; + auto inner = std::make_unique(); + inner->mock_has_deletes = false; + RuntimeProfile profile("test"); + TestableIcebergReader reader(std::move(inner), &profile, nullptr, params, range, nullptr, + nullptr, nullptr); + reader.test_set_equality_delete(std::make_unique()); + + bool hit = false; + std::shared_ptr> cache; + std::shared_ptr ctx; + simulate_init_condition_cache(&reader, 42, "/data/iceberg.parquet", hit, cache, ctx); + + EXPECT_EQ(ctx, nullptr); + EXPECT_EQ(cache, nullptr); +} + +// -- IcebergTableReader: with position deletes in inner reader -> cache skipped -- +TEST_F(ConditionCacheDeleteOpsTest, IcebergWithPositionDeletes_CacheSkipped) { + TFileScanRangeParams params; + TFileRangeDesc range; + auto inner = std::make_unique(); + inner->mock_has_deletes = true; // inner reader has position deletes + RuntimeProfile profile("test"); + TestableIcebergReader reader(std::move(inner), &profile, nullptr, params, range, nullptr, + nullptr, nullptr); + + bool hit = false; + std::shared_ptr> cache; + std::shared_ptr ctx; + simulate_init_condition_cache(&reader, 42, "/data/iceberg.parquet", hit, cache, ctx); + + EXPECT_EQ(ctx, nullptr); + EXPECT_EQ(cache, nullptr); +} + +// -- TransactionalHiveReader: inner reader has deletes -> cache skipped -- +TEST_F(ConditionCacheDeleteOpsTest, TransactionalHiveInnerDeletes_CacheSkipped) { + TFileScanRangeParams params; + TFileRangeDesc range; + auto inner = std::make_unique(); + inner->mock_has_deletes = true; + RuntimeProfile profile("test"); + auto reader = TransactionalHiveReader::create_unique(std::move(inner), &profile, nullptr, + params, range, nullptr, nullptr); + + bool hit = false; + std::shared_ptr> cache; + std::shared_ptr ctx; + simulate_init_condition_cache(reader.get(), 42, "/data/hive_acid.orc", hit, cache, ctx); + + EXPECT_EQ(ctx, nullptr); + EXPECT_EQ(cache, nullptr); +} + +// -- Pre-populated cache entry is NOT returned when deletes exist -- +TEST_F(ConditionCacheDeleteOpsTest, CacheHitSkippedWhenDeletesExist) { + const std::string path = "/data/cached_file.parquet"; + const uint64_t digest = 123; + + // Insert a cache entry + prepopulate_cache(path, digest); + + // Verify it would be a hit without deletes + { + TFileScanRangeParams params; + TFileRangeDesc range; + auto reader = ParquetReader::create_unique(params, range, nullptr, nullptr); + + bool hit = false; + std::shared_ptr> cache; + std::shared_ptr ctx; + simulate_init_condition_cache(reader.get(), digest, path, hit, cache, ctx); + + EXPECT_TRUE(hit); + EXPECT_NE(ctx, nullptr); + EXPECT_TRUE(ctx->is_hit); + EXPECT_NE(cache, nullptr); + EXPECT_EQ(cache->size(), 3); + } + + // Now with deletes: cache entry should NOT be returned + { + TFileScanRangeParams params; + TFileRangeDesc range; + auto reader = ParquetReader::create_unique(params, range, nullptr, nullptr); + std::vector deletes = {1, 2, 3}; + reader->set_delete_rows(&deletes); + + bool hit = false; + std::shared_ptr> cache; + std::shared_ptr ctx; + simulate_init_condition_cache(reader.get(), digest, path, hit, cache, ctx); + + EXPECT_EQ(ctx, nullptr); + EXPECT_EQ(cache, nullptr); + EXPECT_FALSE(hit); + } +} + +// -- Zero digest always skips cache, even without deletes -- +TEST_F(ConditionCacheDeleteOpsTest, ZeroDigest_CacheAlwaysSkipped) { + TFileScanRangeParams params; + TFileRangeDesc range; + auto reader = ParquetReader::create_unique(params, range, nullptr, nullptr); + + bool hit = false; + std::shared_ptr> cache; + std::shared_ptr ctx; + simulate_init_condition_cache(reader.get(), 0, "/data/file.parquet", hit, cache, ctx); + + EXPECT_EQ(ctx, nullptr); + EXPECT_EQ(cache, nullptr); + EXPECT_FALSE(hit); +} + +} // namespace doris::vectorized From 08db9f7aae3cc7d7cd9129297c9801d537aa5c2c Mon Sep 17 00:00:00 2001 From: jacktengg Date: Sun, 1 Mar 2026 23:07:42 +0800 Subject: [PATCH 02/13] improve --- be/src/vec/exec/format/generic_reader.h | 4 ++++ be/src/vec/exec/format/orc/vorc_reader.cpp | 10 ++++----- be/src/vec/exec/format/orc/vorc_reader.h | 2 ++ .../format/parquet/vparquet_group_reader.cpp | 5 ++--- .../vec/exec/format/parquet/vparquet_reader.h | 2 ++ .../exec/format/table/table_format_reader.h | 2 ++ be/src/vec/exec/scan/file_scanner.cpp | 21 +++++++++++-------- be/src/vec/exec/scan/file_scanner.h | 2 +- .../vec/exec/format/condition_cache_test.cpp | 4 ++-- 9 files changed, 31 insertions(+), 21 deletions(-) diff --git a/be/src/vec/exec/format/generic_reader.h b/be/src/vec/exec/format/generic_reader.h index 4cec1bcca35c88..17d54c1061093a 100644 --- a/be/src/vec/exec/format/generic_reader.h +++ b/be/src/vec/exec/format/generic_reader.h @@ -117,6 +117,10 @@ class GenericReader : public ProfileCollector { // Pass condition cache context to the reader for HIT/MISS tracking. virtual void set_condition_cache_context(std::shared_ptr ctx) {} + // Returns the total number of rows the reader will produce. + // Used to pre-allocate condition cache with the correct number of granules. + virtual int64_t get_total_rows() const { return 0; } + // Returns true if this reader has delete operations (e.g. Iceberg position/equality deletes, // Hive ACID deletes). Used to disable condition cache when deletes are present, since cached // granule results may become stale if delete files change between queries. diff --git a/be/src/vec/exec/format/orc/vorc_reader.cpp b/be/src/vec/exec/format/orc/vorc_reader.cpp index b1f3c5a4eeef32..7938c759b24182 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.cpp +++ b/be/src/vec/exec/format/orc/vorc_reader.cpp @@ -2528,10 +2528,9 @@ Status OrcReader::_get_next_block_impl(Block* block, size_t* read_rows, bool* eo if (filter_data[i]) { size_t granule = (_last_read_row_number + i) / ConditionCacheContext::GRANULE_SIZE; - if (granule >= cache.size()) { - cache.resize(granule + 1, false); + if (granule < cache.size()) { + cache[granule] = true; } - cache[granule] = true; } } } @@ -2760,10 +2759,9 @@ Status OrcReader::filter(orc::ColumnVectorBatch& data, uint16_t* sel, uint16_t s for (uint16_t i = 0; i < size; i++) { if (result_filter_data[i]) { size_t granule = (_last_read_row_number + i) / ConditionCacheContext::GRANULE_SIZE; - if (granule >= cache.size()) { - cache.resize(granule + 1, false); + if (granule < cache.size()) { + cache[granule] = true; } - cache[granule] = true; } } } diff --git a/be/src/vec/exec/format/orc/vorc_reader.h b/be/src/vec/exec/format/orc/vorc_reader.h index 71fda539b6182c..bb07e1a7c85aa1 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.h +++ b/be/src/vec/exec/format/orc/vorc_reader.h @@ -236,6 +236,8 @@ class OrcReader : public GenericReader { _condition_cache_ctx = std::move(ctx); } + int64_t get_total_rows() const override { return _row_reader->getNumberOfRows(); } + bool has_delete_operations() const override { return (_position_delete_ordered_rowids != nullptr && !_position_delete_ordered_rowids->empty()) || diff --git a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp index 44641fc75210da..7002c4c303682b 100644 --- a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp @@ -442,10 +442,9 @@ void RowGroupReader::_mark_condition_cache_granules(const uint8_t* filter_data, // global row number in the parquet file size_t granule = (_current_row_group_idx.first_row + rg_pos) / ConditionCacheContext::GRANULE_SIZE; - if (granule >= cache.size()) { - cache.resize(granule + 1, false); + if (granule < cache.size()) { + cache[granule] = true; } - cache[granule] = true; } } } diff --git a/be/src/vec/exec/format/parquet/vparquet_reader.h b/be/src/vec/exec/format/parquet/vparquet_reader.h index 64114842a636be..12287df5a4edfc 100644 --- a/be/src/vec/exec/format/parquet/vparquet_reader.h +++ b/be/src/vec/exec/format/parquet/vparquet_reader.h @@ -179,6 +179,8 @@ class ParquetReader : public GenericReader { _condition_cache_ctx = std::move(ctx); } + int64_t get_total_rows() const override { return _t_metadata ? _t_metadata->num_rows : 0; } + bool has_delete_operations() const override { return _delete_rows != nullptr && !_delete_rows->empty(); } diff --git a/be/src/vec/exec/format/table/table_format_reader.h b/be/src/vec/exec/format/table/table_format_reader.h index 2de784558d64c1..c795afd995c26c 100644 --- a/be/src/vec/exec/format/table/table_format_reader.h +++ b/be/src/vec/exec/format/table/table_format_reader.h @@ -114,6 +114,8 @@ class TableFormatReader : public GenericReader { return _file_format_reader->has_delete_operations(); } + int64_t get_total_rows() const override { return _file_format_reader->get_total_rows(); } + protected: std::string _table_format; // hudi, iceberg, paimon std::unique_ptr _file_format_reader; // parquet, orc diff --git a/be/src/vec/exec/scan/file_scanner.cpp b/be/src/vec/exec/scan/file_scanner.cpp index 89c1b027859fe4..41f768e340bfe7 100644 --- a/be/src/vec/exec/scan/file_scanner.cpp +++ b/be/src/vec/exec/scan/file_scanner.cpp @@ -455,11 +455,7 @@ Status FileScanner::_get_block_wrapped(RuntimeState* state, Block* block, bool* } else if (!st) { return st; } - _init_condition_cache_for_range(); - // Pass condition cache context to the reader - if (_cur_reader && _condition_cache_ctx) { - _cur_reader->set_condition_cache_context(_condition_cache_ctx); - } + _init_reader_condition_cache(); } if (_scanner_eof) { @@ -1770,19 +1766,19 @@ Status FileScanner::_init_expr_ctxes() { return Status::OK(); } -void FileScanner::_init_condition_cache_for_range() { +void FileScanner::_init_reader_condition_cache() { _condition_cache_hit = false; _condition_cache = nullptr; _condition_cache_ctx = nullptr; - if (_condition_cache_digest == 0 || _is_load) { + if (_condition_cache_digest == 0 || _is_load || !_cur_reader) { return; } // Disable condition cache when delete operations exist (e.g. Iceberg position/equality // deletes, Hive ACID deletes). Cached granule results may become stale if delete files // change between queries while the data file's cache key remains the same. - if (_cur_reader && _cur_reader->has_delete_operations()) { + if (_cur_reader->has_delete_operations()) { return; } @@ -1798,14 +1794,21 @@ void FileScanner::_init_condition_cache_for_range() { _condition_cache = handle.get_filter_result(); COUNTER_UPDATE(_condition_cache_hit_range_counter, 1); } else { - // Allocate empty cache for population during miss + // Allocate cache pre-sized to total number of granules _condition_cache = std::make_shared>(); + int64_t total_rows = _cur_reader->get_total_rows(); + if (total_rows > 0) { + size_t num_granules = (total_rows + ConditionCacheContext::GRANULE_SIZE - 1) / + ConditionCacheContext::GRANULE_SIZE; + _condition_cache->resize(num_granules, false); + } } // Create context to pass to readers _condition_cache_ctx = std::make_shared(); _condition_cache_ctx->is_hit = _condition_cache_hit; _condition_cache_ctx->filter_result = _condition_cache; + _cur_reader->set_condition_cache_context(_condition_cache_ctx); } void FileScanner::_finalize_condition_cache_for_range() { diff --git a/be/src/vec/exec/scan/file_scanner.h b/be/src/vec/exec/scan/file_scanner.h index c9cf87dc11055c..4aaf00b695298d 100644 --- a/be/src/vec/exec/scan/file_scanner.h +++ b/be/src/vec/exec/scan/file_scanner.h @@ -288,7 +288,7 @@ class FileScanner : public Scanner { _counter.num_rows_filtered = 0; } - void _init_condition_cache_for_range(); + void _init_reader_condition_cache(); void _finalize_condition_cache_for_range(); TPushAggOp::type _get_push_down_agg_type() { diff --git a/be/test/vec/exec/format/condition_cache_test.cpp b/be/test/vec/exec/format/condition_cache_test.cpp index 05cf37d314fb27..9259c8899a5dc6 100644 --- a/be/test/vec/exec/format/condition_cache_test.cpp +++ b/be/test/vec/exec/format/condition_cache_test.cpp @@ -279,7 +279,7 @@ class MockEqualityDelete : public EqualityDeleteBase { // ============================================================ // These tests reproduce the logic from -// FileScanner::_init_condition_cache_for_range() (file_scanner.cpp) +// FileScanner::_init_reader_condition_cache() (file_scanner.cpp) // using real ConditionCache + real reader instances. // ============================================================ @@ -291,7 +291,7 @@ class ConditionCacheDeleteOpsTest : public testing::Test { void TearDown() override { _cache.reset(); } - // Reproduces the exact logic from FileScanner::_init_condition_cache_for_range(). + // Reproduces the exact logic from FileScanner::_init_reader_condition_cache(). // Returns whether the condition cache context was created (i.e. cache was not skipped). void simulate_init_condition_cache(GenericReader* reader, uint64_t digest, const std::string& path, From e2244fa8424d778f9985fcc9f3ccb07eacd31337 Mon Sep 17 00:00:00 2001 From: jacktengg Date: Mon, 2 Mar 2026 11:19:21 +0800 Subject: [PATCH 03/13] fix --- be/src/vec/exec/format/orc/vorc_reader.cpp | 67 ++++++++++--------- be/src/vec/exec/format/orc/vorc_reader.h | 3 + .../format/parquet/vparquet_group_reader.cpp | 2 + .../format/parquet/vparquet_group_reader.h | 2 + .../exec/format/parquet/vparquet_reader.cpp | 7 ++ .../vec/exec/format/parquet/vparquet_reader.h | 2 + be/src/vec/exec/scan/file_scanner.cpp | 14 ++-- be/src/vec/exec/scan/file_scanner.h | 5 +- 8 files changed, 59 insertions(+), 43 deletions(-) diff --git a/be/src/vec/exec/format/orc/vorc_reader.cpp b/be/src/vec/exec/format/orc/vorc_reader.cpp index 7938c759b24182..031f6f325152bf 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.cpp +++ b/be/src/vec/exec/format/orc/vorc_reader.cpp @@ -282,6 +282,8 @@ void OrcReader::_collect_profile_before_close() { if (_file_input_stream != nullptr) { _file_input_stream->collect_profile_before_close(); } + COUNTER_UPDATE(_orc_profile.condition_cache_filtered_rows_counter, + _statistics.condition_cache_filtered_rows); } } @@ -321,6 +323,8 @@ void OrcReader::_init_profile() { ADD_COUNTER_WITH_LEVEL(_profile, "FileFooterReadCalls", TUnit::UNIT, 1); _orc_profile.file_footer_hit_cache = ADD_COUNTER_WITH_LEVEL(_profile, "FileFooterHitCache", TUnit::UNIT, 1); + _orc_profile.condition_cache_filtered_rows_counter = + ADD_COUNTER_WITH_LEVEL(_profile, "ConditionCacheFilteredRows", TUnit::UNIT, 1); } } @@ -2224,6 +2228,31 @@ Status OrcReader::get_next_block(Block* block, size_t* read_rows, bool* eof) { return Status::OK(); } +void OrcReader::_filter_rows_by_condition_cache(size_t* read_rows, bool* eof) { + // Condition cache HIT: skip consecutive false granules before reading + if (_condition_cache_ctx && _condition_cache_ctx->is_hit) { + auto& cache = *_condition_cache_ctx->filter_result; + uint64_t granule = _last_read_row_number / ConditionCacheContext::GRANULE_SIZE; + auto max_granule = cache.size(); + while (granule < max_granule && !cache[granule]) { + granule++; + } + if (granule >= max_granule) { + // Cache is pre-allocated with the total number of + // granules, so no more surviving rows exist in this file. + *eof = true; + *read_rows = 0; + _statistics.condition_cache_filtered_rows += get_total_rows() - _last_read_row_number; + return; + } + uint64_t target_row = granule * ConditionCacheContext::GRANULE_SIZE; + if (target_row > _last_read_row_number) { + _row_reader->seekToRow(target_row); + _statistics.condition_cache_filtered_rows += target_row - _last_read_row_number; + } + } +} + Status OrcReader::_get_next_block_impl(Block* block, size_t* read_rows, bool* eof) { if (_io_ctx && _io_ctx->should_stop) { *eof = true; @@ -2268,22 +2297,9 @@ Status OrcReader::_get_next_block_impl(Block* block, size_t* read_rows, bool* eo // reset decimal_scale_params_index; _decimal_scale_params_index = 0; try { - // Condition cache HIT: skip consecutive false granules before reading - if (_condition_cache_ctx && _condition_cache_ctx->is_hit) { - auto& cache = *_condition_cache_ctx->filter_result; - uint64_t granule = _last_read_row_number / ConditionCacheContext::GRANULE_SIZE; - auto max_granule = cache.size(); - while (granule < max_granule && !cache[granule]) { - granule++; - } - if (granule < max_granule) { - uint64_t target_row = granule * ConditionCacheContext::GRANULE_SIZE; - if (target_row > _last_read_row_number) { - _row_reader->seekToRow(target_row); - } - } - // If granule >= max_granule: no more surviving granules in cache, - // but cache may not cover all rows. Let nextBatch determine actual EOF. + _filter_rows_by_condition_cache(read_rows, eof); + if (*eof) { + return Status::OK(); } rr = _row_reader->nextBatch(*_batch, block); if (rr == 0 || _batch->numElements == 0) { @@ -2384,22 +2400,9 @@ Status OrcReader::_get_next_block_impl(Block* block, size_t* read_rows, bool* eo // reset decimal_scale_params_index; _decimal_scale_params_index = 0; try { - // Condition cache HIT: skip consecutive false granules before reading - if (_condition_cache_ctx && _condition_cache_ctx->is_hit) { - auto& cache = *_condition_cache_ctx->filter_result; - uint64_t granule = _last_read_row_number / ConditionCacheContext::GRANULE_SIZE; - auto max_granule = cache.size(); - while (granule < max_granule && !cache[granule]) { - granule++; - } - if (granule < max_granule) { - uint64_t target_row = granule * ConditionCacheContext::GRANULE_SIZE; - if (target_row > _last_read_row_number) { - _row_reader->seekToRow(target_row); - } - } - // If granule >= max_granule: no more surviving granules in cache, - // but cache may not cover all rows. Let nextBatch determine actual EOF. + _filter_rows_by_condition_cache(read_rows, eof); + if (*eof) { + return Status::OK(); } rr = _row_reader->nextBatch(*_batch, block); if (rr == 0 || _batch->numElements == 0) { diff --git a/be/src/vec/exec/format/orc/vorc_reader.h b/be/src/vec/exec/format/orc/vorc_reader.h index bb07e1a7c85aa1..7a9daddd68932d 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.h +++ b/be/src/vec/exec/format/orc/vorc_reader.h @@ -141,6 +141,7 @@ class OrcReader : public GenericReader { int64_t lazy_read_filtered_rows = 0; int64_t file_footer_read_calls = 0; int64_t file_footer_hit_cache = 0; + int64_t condition_cache_filtered_rows = 0; }; OrcReader(RuntimeProfile* profile, RuntimeState* state, const TFileScanRangeParams& params, @@ -246,6 +247,7 @@ class OrcReader : public GenericReader { protected: void _collect_profile_before_close() override; + void _filter_rows_by_condition_cache(size_t* read_rows, bool* eof); private: struct OrcProfile { @@ -266,6 +268,7 @@ class OrcReader : public GenericReader { RuntimeProfile::Counter* evaluated_row_group_count = nullptr; RuntimeProfile::Counter* file_footer_read_calls = nullptr; RuntimeProfile::Counter* file_footer_hit_cache = nullptr; + RuntimeProfile::Counter* condition_cache_filtered_rows_counter = nullptr; }; class ORCFilterImpl : public orc::ORCFilter { diff --git a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp index 7002c4c303682b..eda35581a49aec 100644 --- a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp @@ -460,9 +460,11 @@ void RowGroupReader::_filter_read_ranges_by_condition_cache() { return; } + auto old_row_count = _read_ranges.count(); _read_ranges = filter_ranges_by_cache(_read_ranges, filter_result, _current_row_group_idx.first_row); _is_row_group_filtered = _read_ranges.is_empty(); + _condition_cache_filtered_rows += old_row_count - _read_ranges.count(); _condition_cache_ctx = nullptr; } diff --git a/be/src/vec/exec/format/parquet/vparquet_group_reader.h b/be/src/vec/exec/format/parquet/vparquet_group_reader.h index 72a8f2f6508431..290c8beb262c72 100644 --- a/be/src/vec/exec/format/parquet/vparquet_group_reader.h +++ b/be/src/vec/exec/format/parquet/vparquet_group_reader.h @@ -179,6 +179,7 @@ class RowGroupReader : public ProfileCollector { int64_t lazy_read_filtered_rows() const { return _lazy_read_filtered_rows; } int64_t predicate_filter_time() const { return _predicate_filter_time; } int64_t dict_filter_rewrite_time() const { return _dict_filter_rewrite_time; } + int64_t condition_cache_filtered_rows() const { return _condition_cache_filtered_rows; } ParquetColumnReader::ColumnStatistics merged_column_statistics(); void set_remaining_rows(int64_t rows) { _remaining_rows = rows; } @@ -270,6 +271,7 @@ class RowGroupReader : public ProfileCollector { int64_t _lazy_read_filtered_rows = 0; int64_t _predicate_filter_time = 0; int64_t _dict_filter_rewrite_time = 0; + int64_t _condition_cache_filtered_rows = 0; // If continuous batches are skipped, we can cache them to skip a whole page size_t _cached_filtered_rows = 0; std::shared_ptr _condition_cache_ctx; diff --git a/be/src/vec/exec/format/parquet/vparquet_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_reader.cpp index 2448d0a96a704f..ff7f1e17f8bd70 100644 --- a/be/src/vec/exec/format/parquet/vparquet_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_reader.cpp @@ -281,6 +281,8 @@ void ParquetReader::_init_profile() { ADD_CHILD_TIMER_WITH_LEVEL(_profile, "DictFilterRewriteTime", parquet_profile, 1); _parquet_profile.bloom_filter_read_time = ADD_CHILD_TIMER_WITH_LEVEL(_profile, "BloomFilterReadTime", parquet_profile, 1); + _parquet_profile.condition_cache_filtered_rows_counter = + ADD_COUNTER_WITH_LEVEL(_profile, "ConditionCacheFilteredRows", TUnit::UNIT, 1); } } @@ -700,6 +702,9 @@ Status ParquetReader::get_next_block(Block* block, size_t* read_rows, bool* eof) _reader_statistics.predicate_filter_time += _current_group_reader->predicate_filter_time(); _reader_statistics.dict_filter_rewrite_time += _current_group_reader->dict_filter_rewrite_time(); + _reader_statistics.condition_cache_filtered_rows += + _current_group_reader->condition_cache_filtered_rows(); + if (_current_row_group_index.row_group_id + 1 == _total_groups) { *eof = true; } else { @@ -1341,6 +1346,8 @@ void ParquetReader::_collect_profile() { _reader_statistics.dict_filter_rewrite_time); COUNTER_UPDATE(_parquet_profile.bloom_filter_read_time, _reader_statistics.bloom_filter_read_time); + COUNTER_UPDATE(_parquet_profile.condition_cache_filtered_rows_counter, + _reader_statistics.condition_cache_filtered_rows); COUNTER_UPDATE(_parquet_profile.page_index_read_calls, _column_statistics.page_index_read_calls); COUNTER_UPDATE(_parquet_profile.decompress_time, _column_statistics.decompress_time); diff --git a/be/src/vec/exec/format/parquet/vparquet_reader.h b/be/src/vec/exec/format/parquet/vparquet_reader.h index 12287df5a4edfc..710a792ed3e501 100644 --- a/be/src/vec/exec/format/parquet/vparquet_reader.h +++ b/be/src/vec/exec/format/parquet/vparquet_reader.h @@ -98,6 +98,7 @@ class ParquetReader : public GenericReader { int64_t predicate_filter_time = 0; int64_t dict_filter_rewrite_time = 0; int64_t bloom_filter_read_time = 0; + int64_t condition_cache_filtered_rows = 0; }; ParquetReader(RuntimeProfile* profile, const TFileScanRangeParams& params, @@ -233,6 +234,7 @@ class ParquetReader : public GenericReader { RuntimeProfile::Counter* predicate_filter_time = nullptr; RuntimeProfile::Counter* dict_filter_rewrite_time = nullptr; RuntimeProfile::Counter* bloom_filter_read_time = nullptr; + RuntimeProfile::Counter* condition_cache_filtered_rows_counter = nullptr; }; Status _open_file(); diff --git a/be/src/vec/exec/scan/file_scanner.cpp b/be/src/vec/exec/scan/file_scanner.cpp index 41f768e340bfe7..74e9ba98934753 100644 --- a/be/src/vec/exec/scan/file_scanner.cpp +++ b/be/src/vec/exec/scan/file_scanner.cpp @@ -165,10 +165,8 @@ Status FileScanner::init(RuntimeState* state, const VExprContextSPtrs& conjuncts ADD_COUNTER_WITH_LEVEL(_local_state->scanner_profile(), "RuntimeFilterPartitionPrunedRangeNum", TUnit::UNIT, 1); - _condition_cache_hit_range_counter = ADD_COUNTER_WITH_LEVEL( - _local_state->scanner_profile(), "ConditionCacheHitRangeNum", TUnit::UNIT, 1); - _condition_cache_filtered_batch_counter = ADD_COUNTER_WITH_LEVEL( - _local_state->scanner_profile(), "ConditionCacheFilteredBatchNum", TUnit::UNIT, 1); + _condition_cache_hit_counter = ADD_COUNTER_WITH_LEVEL(_local_state->scanner_profile(), + "ConditionCacheFileHit", TUnit::UNIT, 1); _file_cache_statistics.reset(new io::FileCacheStatistics()); _file_reader_stats.reset(new io::FileReaderStats()); @@ -439,7 +437,7 @@ Status FileScanner::_get_block_wrapped(RuntimeState* state, Block* block, bool* do { RETURN_IF_CANCELLED(state); if (_cur_reader == nullptr || _cur_reader_eof) { - _finalize_condition_cache_for_range(); + _finalize_reader_condition_cache(); // The file may not exist because the file list is got from meta cache, // And the file may already be removed from storage. // Just ignore not found files. @@ -1792,7 +1790,7 @@ void FileScanner::_init_reader_condition_cache() { _condition_cache_hit = cache->lookup(cache_key, &handle); if (_condition_cache_hit) { _condition_cache = handle.get_filter_result(); - COUNTER_UPDATE(_condition_cache_hit_range_counter, 1); + COUNTER_UPDATE(_condition_cache_hit_counter, 1); } else { // Allocate cache pre-sized to total number of granules _condition_cache = std::make_shared>(); @@ -1811,7 +1809,7 @@ void FileScanner::_init_reader_condition_cache() { _cur_reader->set_condition_cache_context(_condition_cache_ctx); } -void FileScanner::_finalize_condition_cache_for_range() { +void FileScanner::_finalize_reader_condition_cache() { if (_condition_cache == nullptr || _condition_cache_hit || _condition_cache_digest == 0 || _is_load) { _condition_cache = nullptr; @@ -1837,7 +1835,7 @@ Status FileScanner::close(RuntimeState* state) { return Status::OK(); } - _finalize_condition_cache_for_range(); + _finalize_reader_condition_cache(); if (_cur_reader) { RETURN_IF_ERROR(_cur_reader->close()); diff --git a/be/src/vec/exec/scan/file_scanner.h b/be/src/vec/exec/scan/file_scanner.h index 4aaf00b695298d..7150753985d82c 100644 --- a/be/src/vec/exec/scan/file_scanner.h +++ b/be/src/vec/exec/scan/file_scanner.h @@ -240,8 +240,7 @@ class FileScanner : public Scanner { bool _condition_cache_hit = false; std::shared_ptr> _condition_cache; std::shared_ptr _condition_cache_ctx; - RuntimeProfile::Counter* _condition_cache_hit_range_counter = nullptr; - RuntimeProfile::Counter* _condition_cache_filtered_batch_counter = nullptr; + RuntimeProfile::Counter* _condition_cache_hit_counter = nullptr; private: Status _init_expr_ctxes(); @@ -289,7 +288,7 @@ class FileScanner : public Scanner { } void _init_reader_condition_cache(); - void _finalize_condition_cache_for_range(); + void _finalize_reader_condition_cache(); TPushAggOp::type _get_push_down_agg_type() { return _local_state == nullptr ? TPushAggOp::type::NONE From 9a3d18d499cfdbcdf55ebf9d59d21f9eac9130ad Mon Sep 17 00:00:00 2001 From: jacktengg Date: Mon, 2 Mar 2026 15:24:05 +0800 Subject: [PATCH 04/13] fix --- be/src/vec/exec/format/orc/vorc_reader.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/be/src/vec/exec/format/orc/vorc_reader.h b/be/src/vec/exec/format/orc/vorc_reader.h index 7a9daddd68932d..d9e0854efbb995 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.h +++ b/be/src/vec/exec/format/orc/vorc_reader.h @@ -237,7 +237,9 @@ class OrcReader : public GenericReader { _condition_cache_ctx = std::move(ctx); } - int64_t get_total_rows() const override { return _row_reader->getNumberOfRows(); } + int64_t get_total_rows() const override { + return _row_reader ? _row_reader->getNumberOfRows() : 0; + } bool has_delete_operations() const override { return (_position_delete_ordered_rowids != nullptr && From a40e94525dda865e3a55a024decf788c7489703e Mon Sep 17 00:00:00 2001 From: jacktengg Date: Mon, 2 Mar 2026 22:18:59 +0800 Subject: [PATCH 05/13] fix --- be/src/vec/exec/scan/file_scanner.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/be/src/vec/exec/scan/file_scanner.cpp b/be/src/vec/exec/scan/file_scanner.cpp index 74e9ba98934753..eb925925563bbb 100644 --- a/be/src/vec/exec/scan/file_scanner.cpp +++ b/be/src/vec/exec/scan/file_scanner.cpp @@ -1769,7 +1769,7 @@ void FileScanner::_init_reader_condition_cache() { _condition_cache = nullptr; _condition_cache_ctx = nullptr; - if (_condition_cache_digest == 0 || _is_load || !_cur_reader) { + if (_condition_cache_digest == 0 || _is_load || _conjuncts.empty() || !_cur_reader) { return; } @@ -1817,6 +1817,15 @@ void FileScanner::_finalize_reader_condition_cache() { _condition_cache_ctx = nullptr; return; } + // Only store the cache if the reader was fully consumed. If the scan was + // truncated early (e.g. by LIMIT), the cache is incomplete — unread granules + // would remain false and cause surviving rows to be incorrectly skipped on HIT. + if (!_cur_reader_eof) { + _condition_cache = nullptr; + _condition_cache_hit = false; + _condition_cache_ctx = nullptr; + return; + } auto* cache = segment_v2::ConditionCache::instance(); segment_v2::ConditionCache::ExternalCacheKey cache_key( From 0d2ee527581e941823e058a48566d65b17d66290 Mon Sep 17 00:00:00 2001 From: jacktengg Date: Tue, 3 Mar 2026 10:45:55 +0800 Subject: [PATCH 06/13] add regression tests --- .../cache/condition_cache_orc.out | 8088 +++++++++++++++++ .../cache/condition_cache_parquet.out | 8088 +++++++++++++++++ .../cache/condition_cache_orc.groovy | 297 + .../cache/condition_cache_parquet.groovy | 297 + 4 files changed, 16770 insertions(+) create mode 100644 regression-test/data/external_table_p0/cache/condition_cache_orc.out create mode 100644 regression-test/data/external_table_p0/cache/condition_cache_parquet.out create mode 100644 regression-test/suites/external_table_p0/cache/condition_cache_orc.groovy create mode 100644 regression-test/suites/external_table_p0/cache/condition_cache_parquet.groovy diff --git a/regression-test/data/external_table_p0/cache/condition_cache_orc.out b/regression-test/data/external_table_p0/cache/condition_cache_orc.out new file mode 100644 index 00000000000000..ad7881ecb00677 --- /dev/null +++ b/regression-test/data/external_table_p0/cache/condition_cache_orc.out @@ -0,0 +1,8088 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !condition_cache0 -- +2 Bob 30 90 +4 David 28 92 +5 Eve 26 88 + +-- !condition_cache1 -- +1 Alice 25 85.5 +3 Charlie 22 75.5 + +-- !condition_cache2 -- +2 Bob 30 90 +4 David 28 92 +5 Eve 26 88 + +-- !condition_cache3 -- +1 Alice 25 85.5 +3 Charlie 22 75.5 + +-- !condition_cache4 -- +2 Bob 30 90 +4 David 28 92 +5 Eve 26 88 + +-- !condition_cache5 -- +1 Alice 25 85.5 +3 Charlie 22 75.5 + +-- !condition_cache_join0 -- +2 Bob 30 Marketing Manager +4 David 28 Engineering Senior Developer +5 Eve 26 Finance Analyst + +-- !condition_cache_join1 -- +2 Bob 30 Marketing Manager +4 David 28 Engineering Senior Developer +5 Eve 26 Finance Analyst + +-- !condition_cache_join2 -- +2 Bob 30 Marketing Manager +4 David 28 Engineering Senior Developer +5 Eve 26 Finance Analyst + +-- !condition_cache_join3 -- +2 Bob 30 Engineering Developer +3 Charlie 22 Marketing Manager +4 David 28 HR Specialist +5 Eve 26 Engineering Senior Developer + +-- !condition_cache_join4 -- +2 Bob 30 Engineering Developer +3 Charlie 22 Marketing Manager +4 David 28 HR Specialist +5 Eve 26 Engineering Senior Developer + +-- !condition_cache_join5 -- +2 Bob 30 Marketing Manager +4 David 28 Engineering Senior Developer +5 Eve 26 Finance Analyst + +-- !condition_cache_join6 -- +1 Alice Engineering 100000 +4 David Engineering 140000 + +-- !condition_cache_limit0 -- +6 name_6 26 56 +7 name_7 27 57 +8 name_8 28 58 +9 name_9 29 59 +10 name_10 30 60 +11 name_11 31 61 +12 name_12 32 62 +13 name_13 33 63 +14 name_14 34 64 +15 name_15 35 65 + +-- !condition_cache_limit1 -- +6 name_6 26 56 +7 name_7 27 57 +8 name_8 28 58 +9 name_9 29 59 +10 name_10 30 60 +11 name_11 31 61 +12 name_12 32 62 +13 name_13 33 63 +14 name_14 34 64 +15 name_15 35 65 + +-- !condition_cache_limit2 -- +6 name_6 26 56 +7 name_7 27 57 +8 name_8 28 58 +9 name_9 29 59 +10 name_10 30 60 +11 name_11 31 61 +12 name_12 32 62 +13 name_13 33 63 +14 name_14 34 64 +15 name_15 35 65 +16 name_16 36 66 +17 name_17 37 67 +18 name_18 38 68 +19 name_19 39 69 +20 name_20 40 70 +21 name_21 41 71 +22 name_22 42 72 +23 name_23 43 73 +24 name_24 44 74 +25 name_25 45 75 +26 name_26 46 76 +27 name_27 47 77 +28 name_28 48 78 +29 name_29 49 79 +36 name_36 26 86 +37 name_37 27 87 +38 name_38 28 88 +39 name_39 29 89 +40 name_40 30 90 +41 name_41 31 91 +42 name_42 32 92 +43 name_43 33 93 +44 name_44 34 94 +45 name_45 35 95 +46 name_46 36 96 +47 name_47 37 97 +48 name_48 38 98 +49 name_49 39 99 +50 name_50 40 50 +51 name_51 41 51 +52 name_52 42 52 +53 name_53 43 53 +54 name_54 44 54 +55 name_55 45 55 +56 name_56 46 56 +57 name_57 47 57 +58 name_58 48 58 +59 name_59 49 59 +66 name_66 26 66 +67 name_67 27 67 +68 name_68 28 68 +69 name_69 29 69 +70 name_70 30 70 +71 name_71 31 71 +72 name_72 32 72 +73 name_73 33 73 +74 name_74 34 74 +75 name_75 35 75 +76 name_76 36 76 +77 name_77 37 77 +78 name_78 38 78 +79 name_79 39 79 +80 name_80 40 80 +81 name_81 41 81 +82 name_82 42 82 +83 name_83 43 83 +84 name_84 44 84 +85 name_85 45 85 +86 name_86 46 86 +87 name_87 47 87 +88 name_88 48 88 +89 name_89 49 89 +96 name_96 26 96 +97 name_97 27 97 +98 name_98 28 98 +99 name_99 29 99 +100 name_100 30 50 +101 name_101 31 51 +102 name_102 32 52 +103 name_103 33 53 +104 name_104 34 54 +105 name_105 35 55 +106 name_106 36 56 +107 name_107 37 57 +108 name_108 38 58 +109 name_109 39 59 +110 name_110 40 60 +111 name_111 41 61 +112 name_112 42 62 +113 name_113 43 63 +114 name_114 44 64 +115 name_115 45 65 +116 name_116 46 66 +117 name_117 47 67 +118 name_118 48 68 +119 name_119 49 69 +126 name_126 26 76 +127 name_127 27 77 +128 name_128 28 78 +129 name_129 29 79 +130 name_130 30 80 +131 name_131 31 81 +132 name_132 32 82 +133 name_133 33 83 +134 name_134 34 84 +135 name_135 35 85 +136 name_136 36 86 +137 name_137 37 87 +138 name_138 38 88 +139 name_139 39 89 +140 name_140 40 90 +141 name_141 41 91 +142 name_142 42 92 +143 name_143 43 93 +144 name_144 44 94 +145 name_145 45 95 +146 name_146 46 96 +147 name_147 47 97 +148 name_148 48 98 +149 name_149 49 99 +156 name_156 26 56 +157 name_157 27 57 +158 name_158 28 58 +159 name_159 29 59 +160 name_160 30 60 +161 name_161 31 61 +162 name_162 32 62 +163 name_163 33 63 +164 name_164 34 64 +165 name_165 35 65 +166 name_166 36 66 +167 name_167 37 67 +168 name_168 38 68 +169 name_169 39 69 +170 name_170 40 70 +171 name_171 41 71 +172 name_172 42 72 +173 name_173 43 73 +174 name_174 44 74 +175 name_175 45 75 +176 name_176 46 76 +177 name_177 47 77 +178 name_178 48 78 +179 name_179 49 79 +186 name_186 26 86 +187 name_187 27 87 +188 name_188 28 88 +189 name_189 29 89 +190 name_190 30 90 +191 name_191 31 91 +192 name_192 32 92 +193 name_193 33 93 +194 name_194 34 94 +195 name_195 35 95 +196 name_196 36 96 +197 name_197 37 97 +198 name_198 38 98 +199 name_199 39 99 +200 name_200 40 50 +201 name_201 41 51 +202 name_202 42 52 +203 name_203 43 53 +204 name_204 44 54 +205 name_205 45 55 +206 name_206 46 56 +207 name_207 47 57 +208 name_208 48 58 +209 name_209 49 59 +216 name_216 26 66 +217 name_217 27 67 +218 name_218 28 68 +219 name_219 29 69 +220 name_220 30 70 +221 name_221 31 71 +222 name_222 32 72 +223 name_223 33 73 +224 name_224 34 74 +225 name_225 35 75 +226 name_226 36 76 +227 name_227 37 77 +228 name_228 38 78 +229 name_229 39 79 +230 name_230 40 80 +231 name_231 41 81 +232 name_232 42 82 +233 name_233 43 83 +234 name_234 44 84 +235 name_235 45 85 +236 name_236 46 86 +237 name_237 47 87 +238 name_238 48 88 +239 name_239 49 89 +246 name_246 26 96 +247 name_247 27 97 +248 name_248 28 98 +249 name_249 29 99 +250 name_250 30 50 +251 name_251 31 51 +252 name_252 32 52 +253 name_253 33 53 +254 name_254 34 54 +255 name_255 35 55 +256 name_256 36 56 +257 name_257 37 57 +258 name_258 38 58 +259 name_259 39 59 +260 name_260 40 60 +261 name_261 41 61 +262 name_262 42 62 +263 name_263 43 63 +264 name_264 44 64 +265 name_265 45 65 +266 name_266 46 66 +267 name_267 47 67 +268 name_268 48 68 +269 name_269 49 69 +276 name_276 26 76 +277 name_277 27 77 +278 name_278 28 78 +279 name_279 29 79 +280 name_280 30 80 +281 name_281 31 81 +282 name_282 32 82 +283 name_283 33 83 +284 name_284 34 84 +285 name_285 35 85 +286 name_286 36 86 +287 name_287 37 87 +288 name_288 38 88 +289 name_289 39 89 +290 name_290 40 90 +291 name_291 41 91 +292 name_292 42 92 +293 name_293 43 93 +294 name_294 44 94 +295 name_295 45 95 +296 name_296 46 96 +297 name_297 47 97 +298 name_298 48 98 +299 name_299 49 99 +306 name_306 26 56 +307 name_307 27 57 +308 name_308 28 58 +309 name_309 29 59 +310 name_310 30 60 +311 name_311 31 61 +312 name_312 32 62 +313 name_313 33 63 +314 name_314 34 64 +315 name_315 35 65 +316 name_316 36 66 +317 name_317 37 67 +318 name_318 38 68 +319 name_319 39 69 +320 name_320 40 70 +321 name_321 41 71 +322 name_322 42 72 +323 name_323 43 73 +324 name_324 44 74 +325 name_325 45 75 +326 name_326 46 76 +327 name_327 47 77 +328 name_328 48 78 +329 name_329 49 79 +336 name_336 26 86 +337 name_337 27 87 +338 name_338 28 88 +339 name_339 29 89 +340 name_340 30 90 +341 name_341 31 91 +342 name_342 32 92 +343 name_343 33 93 +344 name_344 34 94 +345 name_345 35 95 +346 name_346 36 96 +347 name_347 37 97 +348 name_348 38 98 +349 name_349 39 99 +350 name_350 40 50 +351 name_351 41 51 +352 name_352 42 52 +353 name_353 43 53 +354 name_354 44 54 +355 name_355 45 55 +356 name_356 46 56 +357 name_357 47 57 +358 name_358 48 58 +359 name_359 49 59 +366 name_366 26 66 +367 name_367 27 67 +368 name_368 28 68 +369 name_369 29 69 +370 name_370 30 70 +371 name_371 31 71 +372 name_372 32 72 +373 name_373 33 73 +374 name_374 34 74 +375 name_375 35 75 +376 name_376 36 76 +377 name_377 37 77 +378 name_378 38 78 +379 name_379 39 79 +380 name_380 40 80 +381 name_381 41 81 +382 name_382 42 82 +383 name_383 43 83 +384 name_384 44 84 +385 name_385 45 85 +386 name_386 46 86 +387 name_387 47 87 +388 name_388 48 88 +389 name_389 49 89 +396 name_396 26 96 +397 name_397 27 97 +398 name_398 28 98 +399 name_399 29 99 +400 name_400 30 50 +401 name_401 31 51 +402 name_402 32 52 +403 name_403 33 53 +404 name_404 34 54 +405 name_405 35 55 +406 name_406 36 56 +407 name_407 37 57 +408 name_408 38 58 +409 name_409 39 59 +410 name_410 40 60 +411 name_411 41 61 +412 name_412 42 62 +413 name_413 43 63 +414 name_414 44 64 +415 name_415 45 65 +416 name_416 46 66 +417 name_417 47 67 +418 name_418 48 68 +419 name_419 49 69 +426 name_426 26 76 +427 name_427 27 77 +428 name_428 28 78 +429 name_429 29 79 +430 name_430 30 80 +431 name_431 31 81 +432 name_432 32 82 +433 name_433 33 83 +434 name_434 34 84 +435 name_435 35 85 +436 name_436 36 86 +437 name_437 37 87 +438 name_438 38 88 +439 name_439 39 89 +440 name_440 40 90 +441 name_441 41 91 +442 name_442 42 92 +443 name_443 43 93 +444 name_444 44 94 +445 name_445 45 95 +446 name_446 46 96 +447 name_447 47 97 +448 name_448 48 98 +449 name_449 49 99 +456 name_456 26 56 +457 name_457 27 57 +458 name_458 28 58 +459 name_459 29 59 +460 name_460 30 60 +461 name_461 31 61 +462 name_462 32 62 +463 name_463 33 63 +464 name_464 34 64 +465 name_465 35 65 +466 name_466 36 66 +467 name_467 37 67 +468 name_468 38 68 +469 name_469 39 69 +470 name_470 40 70 +471 name_471 41 71 +472 name_472 42 72 +473 name_473 43 73 +474 name_474 44 74 +475 name_475 45 75 +476 name_476 46 76 +477 name_477 47 77 +478 name_478 48 78 +479 name_479 49 79 +486 name_486 26 86 +487 name_487 27 87 +488 name_488 28 88 +489 name_489 29 89 +490 name_490 30 90 +491 name_491 31 91 +492 name_492 32 92 +493 name_493 33 93 +494 name_494 34 94 +495 name_495 35 95 +496 name_496 36 96 +497 name_497 37 97 +498 name_498 38 98 +499 name_499 39 99 +500 name_500 40 50 +501 name_501 41 51 +502 name_502 42 52 +503 name_503 43 53 +504 name_504 44 54 +505 name_505 45 55 +506 name_506 46 56 +507 name_507 47 57 +508 name_508 48 58 +509 name_509 49 59 +516 name_516 26 66 +517 name_517 27 67 +518 name_518 28 68 +519 name_519 29 69 +520 name_520 30 70 +521 name_521 31 71 +522 name_522 32 72 +523 name_523 33 73 +524 name_524 34 74 +525 name_525 35 75 +526 name_526 36 76 +527 name_527 37 77 +528 name_528 38 78 +529 name_529 39 79 +530 name_530 40 80 +531 name_531 41 81 +532 name_532 42 82 +533 name_533 43 83 +534 name_534 44 84 +535 name_535 45 85 +536 name_536 46 86 +537 name_537 47 87 +538 name_538 48 88 +539 name_539 49 89 +546 name_546 26 96 +547 name_547 27 97 +548 name_548 28 98 +549 name_549 29 99 +550 name_550 30 50 +551 name_551 31 51 +552 name_552 32 52 +553 name_553 33 53 +554 name_554 34 54 +555 name_555 35 55 +556 name_556 36 56 +557 name_557 37 57 +558 name_558 38 58 +559 name_559 39 59 +560 name_560 40 60 +561 name_561 41 61 +562 name_562 42 62 +563 name_563 43 63 +564 name_564 44 64 +565 name_565 45 65 +566 name_566 46 66 +567 name_567 47 67 +568 name_568 48 68 +569 name_569 49 69 +576 name_576 26 76 +577 name_577 27 77 +578 name_578 28 78 +579 name_579 29 79 +580 name_580 30 80 +581 name_581 31 81 +582 name_582 32 82 +583 name_583 33 83 +584 name_584 34 84 +585 name_585 35 85 +586 name_586 36 86 +587 name_587 37 87 +588 name_588 38 88 +589 name_589 39 89 +590 name_590 40 90 +591 name_591 41 91 +592 name_592 42 92 +593 name_593 43 93 +594 name_594 44 94 +595 name_595 45 95 +596 name_596 46 96 +597 name_597 47 97 +598 name_598 48 98 +599 name_599 49 99 +606 name_606 26 56 +607 name_607 27 57 +608 name_608 28 58 +609 name_609 29 59 +610 name_610 30 60 +611 name_611 31 61 +612 name_612 32 62 +613 name_613 33 63 +614 name_614 34 64 +615 name_615 35 65 +616 name_616 36 66 +617 name_617 37 67 +618 name_618 38 68 +619 name_619 39 69 +620 name_620 40 70 +621 name_621 41 71 +622 name_622 42 72 +623 name_623 43 73 +624 name_624 44 74 +625 name_625 45 75 +626 name_626 46 76 +627 name_627 47 77 +628 name_628 48 78 +629 name_629 49 79 +636 name_636 26 86 +637 name_637 27 87 +638 name_638 28 88 +639 name_639 29 89 +640 name_640 30 90 +641 name_641 31 91 +642 name_642 32 92 +643 name_643 33 93 +644 name_644 34 94 +645 name_645 35 95 +646 name_646 36 96 +647 name_647 37 97 +648 name_648 38 98 +649 name_649 39 99 +650 name_650 40 50 +651 name_651 41 51 +652 name_652 42 52 +653 name_653 43 53 +654 name_654 44 54 +655 name_655 45 55 +656 name_656 46 56 +657 name_657 47 57 +658 name_658 48 58 +659 name_659 49 59 +666 name_666 26 66 +667 name_667 27 67 +668 name_668 28 68 +669 name_669 29 69 +670 name_670 30 70 +671 name_671 31 71 +672 name_672 32 72 +673 name_673 33 73 +674 name_674 34 74 +675 name_675 35 75 +676 name_676 36 76 +677 name_677 37 77 +678 name_678 38 78 +679 name_679 39 79 +680 name_680 40 80 +681 name_681 41 81 +682 name_682 42 82 +683 name_683 43 83 +684 name_684 44 84 +685 name_685 45 85 +686 name_686 46 86 +687 name_687 47 87 +688 name_688 48 88 +689 name_689 49 89 +696 name_696 26 96 +697 name_697 27 97 +698 name_698 28 98 +699 name_699 29 99 +700 name_700 30 50 +701 name_701 31 51 +702 name_702 32 52 +703 name_703 33 53 +704 name_704 34 54 +705 name_705 35 55 +706 name_706 36 56 +707 name_707 37 57 +708 name_708 38 58 +709 name_709 39 59 +710 name_710 40 60 +711 name_711 41 61 +712 name_712 42 62 +713 name_713 43 63 +714 name_714 44 64 +715 name_715 45 65 +716 name_716 46 66 +717 name_717 47 67 +718 name_718 48 68 +719 name_719 49 69 +726 name_726 26 76 +727 name_727 27 77 +728 name_728 28 78 +729 name_729 29 79 +730 name_730 30 80 +731 name_731 31 81 +732 name_732 32 82 +733 name_733 33 83 +734 name_734 34 84 +735 name_735 35 85 +736 name_736 36 86 +737 name_737 37 87 +738 name_738 38 88 +739 name_739 39 89 +740 name_740 40 90 +741 name_741 41 91 +742 name_742 42 92 +743 name_743 43 93 +744 name_744 44 94 +745 name_745 45 95 +746 name_746 46 96 +747 name_747 47 97 +748 name_748 48 98 +749 name_749 49 99 +756 name_756 26 56 +757 name_757 27 57 +758 name_758 28 58 +759 name_759 29 59 +760 name_760 30 60 +761 name_761 31 61 +762 name_762 32 62 +763 name_763 33 63 +764 name_764 34 64 +765 name_765 35 65 +766 name_766 36 66 +767 name_767 37 67 +768 name_768 38 68 +769 name_769 39 69 +770 name_770 40 70 +771 name_771 41 71 +772 name_772 42 72 +773 name_773 43 73 +774 name_774 44 74 +775 name_775 45 75 +776 name_776 46 76 +777 name_777 47 77 +778 name_778 48 78 +779 name_779 49 79 +786 name_786 26 86 +787 name_787 27 87 +788 name_788 28 88 +789 name_789 29 89 +790 name_790 30 90 +791 name_791 31 91 +792 name_792 32 92 +793 name_793 33 93 +794 name_794 34 94 +795 name_795 35 95 +796 name_796 36 96 +797 name_797 37 97 +798 name_798 38 98 +799 name_799 39 99 +800 name_800 40 50 +801 name_801 41 51 +802 name_802 42 52 +803 name_803 43 53 +804 name_804 44 54 +805 name_805 45 55 +806 name_806 46 56 +807 name_807 47 57 +808 name_808 48 58 +809 name_809 49 59 +816 name_816 26 66 +817 name_817 27 67 +818 name_818 28 68 +819 name_819 29 69 +820 name_820 30 70 +821 name_821 31 71 +822 name_822 32 72 +823 name_823 33 73 +824 name_824 34 74 +825 name_825 35 75 +826 name_826 36 76 +827 name_827 37 77 +828 name_828 38 78 +829 name_829 39 79 +830 name_830 40 80 +831 name_831 41 81 +832 name_832 42 82 +833 name_833 43 83 +834 name_834 44 84 +835 name_835 45 85 +836 name_836 46 86 +837 name_837 47 87 +838 name_838 48 88 +839 name_839 49 89 +846 name_846 26 96 +847 name_847 27 97 +848 name_848 28 98 +849 name_849 29 99 +850 name_850 30 50 +851 name_851 31 51 +852 name_852 32 52 +853 name_853 33 53 +854 name_854 34 54 +855 name_855 35 55 +856 name_856 36 56 +857 name_857 37 57 +858 name_858 38 58 +859 name_859 39 59 +860 name_860 40 60 +861 name_861 41 61 +862 name_862 42 62 +863 name_863 43 63 +864 name_864 44 64 +865 name_865 45 65 +866 name_866 46 66 +867 name_867 47 67 +868 name_868 48 68 +869 name_869 49 69 +876 name_876 26 76 +877 name_877 27 77 +878 name_878 28 78 +879 name_879 29 79 +880 name_880 30 80 +881 name_881 31 81 +882 name_882 32 82 +883 name_883 33 83 +884 name_884 34 84 +885 name_885 35 85 +886 name_886 36 86 +887 name_887 37 87 +888 name_888 38 88 +889 name_889 39 89 +890 name_890 40 90 +891 name_891 41 91 +892 name_892 42 92 +893 name_893 43 93 +894 name_894 44 94 +895 name_895 45 95 +896 name_896 46 96 +897 name_897 47 97 +898 name_898 48 98 +899 name_899 49 99 +906 name_906 26 56 +907 name_907 27 57 +908 name_908 28 58 +909 name_909 29 59 +910 name_910 30 60 +911 name_911 31 61 +912 name_912 32 62 +913 name_913 33 63 +914 name_914 34 64 +915 name_915 35 65 +916 name_916 36 66 +917 name_917 37 67 +918 name_918 38 68 +919 name_919 39 69 +920 name_920 40 70 +921 name_921 41 71 +922 name_922 42 72 +923 name_923 43 73 +924 name_924 44 74 +925 name_925 45 75 +926 name_926 46 76 +927 name_927 47 77 +928 name_928 48 78 +929 name_929 49 79 +936 name_936 26 86 +937 name_937 27 87 +938 name_938 28 88 +939 name_939 29 89 +940 name_940 30 90 +941 name_941 31 91 +942 name_942 32 92 +943 name_943 33 93 +944 name_944 34 94 +945 name_945 35 95 +946 name_946 36 96 +947 name_947 37 97 +948 name_948 38 98 +949 name_949 39 99 +950 name_950 40 50 +951 name_951 41 51 +952 name_952 42 52 +953 name_953 43 53 +954 name_954 44 54 +955 name_955 45 55 +956 name_956 46 56 +957 name_957 47 57 +958 name_958 48 58 +959 name_959 49 59 +966 name_966 26 66 +967 name_967 27 67 +968 name_968 28 68 +969 name_969 29 69 +970 name_970 30 70 +971 name_971 31 71 +972 name_972 32 72 +973 name_973 33 73 +974 name_974 34 74 +975 name_975 35 75 +976 name_976 36 76 +977 name_977 37 77 +978 name_978 38 78 +979 name_979 39 79 +980 name_980 40 80 +981 name_981 41 81 +982 name_982 42 82 +983 name_983 43 83 +984 name_984 44 84 +985 name_985 45 85 +986 name_986 46 86 +987 name_987 47 87 +988 name_988 48 88 +989 name_989 49 89 +996 name_996 26 96 +997 name_997 27 97 +998 name_998 28 98 +999 name_999 29 99 +1000 name_1000 30 50 +1001 name_1001 31 51 +1002 name_1002 32 52 +1003 name_1003 33 53 +1004 name_1004 34 54 +1005 name_1005 35 55 +1006 name_1006 36 56 +1007 name_1007 37 57 +1008 name_1008 38 58 +1009 name_1009 39 59 +1010 name_1010 40 60 +1011 name_1011 41 61 +1012 name_1012 42 62 +1013 name_1013 43 63 +1014 name_1014 44 64 +1015 name_1015 45 65 +1016 name_1016 46 66 +1017 name_1017 47 67 +1018 name_1018 48 68 +1019 name_1019 49 69 +1026 name_1026 26 76 +1027 name_1027 27 77 +1028 name_1028 28 78 +1029 name_1029 29 79 +1030 name_1030 30 80 +1031 name_1031 31 81 +1032 name_1032 32 82 +1033 name_1033 33 83 +1034 name_1034 34 84 +1035 name_1035 35 85 +1036 name_1036 36 86 +1037 name_1037 37 87 +1038 name_1038 38 88 +1039 name_1039 39 89 +1040 name_1040 40 90 +1041 name_1041 41 91 +1042 name_1042 42 92 +1043 name_1043 43 93 +1044 name_1044 44 94 +1045 name_1045 45 95 +1046 name_1046 46 96 +1047 name_1047 47 97 +1048 name_1048 48 98 +1049 name_1049 49 99 +1056 name_1056 26 56 +1057 name_1057 27 57 +1058 name_1058 28 58 +1059 name_1059 29 59 +1060 name_1060 30 60 +1061 name_1061 31 61 +1062 name_1062 32 62 +1063 name_1063 33 63 +1064 name_1064 34 64 +1065 name_1065 35 65 +1066 name_1066 36 66 +1067 name_1067 37 67 +1068 name_1068 38 68 +1069 name_1069 39 69 +1070 name_1070 40 70 +1071 name_1071 41 71 +1072 name_1072 42 72 +1073 name_1073 43 73 +1074 name_1074 44 74 +1075 name_1075 45 75 +1076 name_1076 46 76 +1077 name_1077 47 77 +1078 name_1078 48 78 +1079 name_1079 49 79 +1086 name_1086 26 86 +1087 name_1087 27 87 +1088 name_1088 28 88 +1089 name_1089 29 89 +1090 name_1090 30 90 +1091 name_1091 31 91 +1092 name_1092 32 92 +1093 name_1093 33 93 +1094 name_1094 34 94 +1095 name_1095 35 95 +1096 name_1096 36 96 +1097 name_1097 37 97 +1098 name_1098 38 98 +1099 name_1099 39 99 +1100 name_1100 40 50 +1101 name_1101 41 51 +1102 name_1102 42 52 +1103 name_1103 43 53 +1104 name_1104 44 54 +1105 name_1105 45 55 +1106 name_1106 46 56 +1107 name_1107 47 57 +1108 name_1108 48 58 +1109 name_1109 49 59 +1116 name_1116 26 66 +1117 name_1117 27 67 +1118 name_1118 28 68 +1119 name_1119 29 69 +1120 name_1120 30 70 +1121 name_1121 31 71 +1122 name_1122 32 72 +1123 name_1123 33 73 +1124 name_1124 34 74 +1125 name_1125 35 75 +1126 name_1126 36 76 +1127 name_1127 37 77 +1128 name_1128 38 78 +1129 name_1129 39 79 +1130 name_1130 40 80 +1131 name_1131 41 81 +1132 name_1132 42 82 +1133 name_1133 43 83 +1134 name_1134 44 84 +1135 name_1135 45 85 +1136 name_1136 46 86 +1137 name_1137 47 87 +1138 name_1138 48 88 +1139 name_1139 49 89 +1146 name_1146 26 96 +1147 name_1147 27 97 +1148 name_1148 28 98 +1149 name_1149 29 99 +1150 name_1150 30 50 +1151 name_1151 31 51 +1152 name_1152 32 52 +1153 name_1153 33 53 +1154 name_1154 34 54 +1155 name_1155 35 55 +1156 name_1156 36 56 +1157 name_1157 37 57 +1158 name_1158 38 58 +1159 name_1159 39 59 +1160 name_1160 40 60 +1161 name_1161 41 61 +1162 name_1162 42 62 +1163 name_1163 43 63 +1164 name_1164 44 64 +1165 name_1165 45 65 +1166 name_1166 46 66 +1167 name_1167 47 67 +1168 name_1168 48 68 +1169 name_1169 49 69 +1176 name_1176 26 76 +1177 name_1177 27 77 +1178 name_1178 28 78 +1179 name_1179 29 79 +1180 name_1180 30 80 +1181 name_1181 31 81 +1182 name_1182 32 82 +1183 name_1183 33 83 +1184 name_1184 34 84 +1185 name_1185 35 85 +1186 name_1186 36 86 +1187 name_1187 37 87 +1188 name_1188 38 88 +1189 name_1189 39 89 +1190 name_1190 40 90 +1191 name_1191 41 91 +1192 name_1192 42 92 +1193 name_1193 43 93 +1194 name_1194 44 94 +1195 name_1195 45 95 +1196 name_1196 46 96 +1197 name_1197 47 97 +1198 name_1198 48 98 +1199 name_1199 49 99 +1206 name_1206 26 56 +1207 name_1207 27 57 +1208 name_1208 28 58 +1209 name_1209 29 59 +1210 name_1210 30 60 +1211 name_1211 31 61 +1212 name_1212 32 62 +1213 name_1213 33 63 +1214 name_1214 34 64 +1215 name_1215 35 65 +1216 name_1216 36 66 +1217 name_1217 37 67 +1218 name_1218 38 68 +1219 name_1219 39 69 +1220 name_1220 40 70 +1221 name_1221 41 71 +1222 name_1222 42 72 +1223 name_1223 43 73 +1224 name_1224 44 74 +1225 name_1225 45 75 +1226 name_1226 46 76 +1227 name_1227 47 77 +1228 name_1228 48 78 +1229 name_1229 49 79 +1236 name_1236 26 86 +1237 name_1237 27 87 +1238 name_1238 28 88 +1239 name_1239 29 89 +1240 name_1240 30 90 +1241 name_1241 31 91 +1242 name_1242 32 92 +1243 name_1243 33 93 +1244 name_1244 34 94 +1245 name_1245 35 95 +1246 name_1246 36 96 +1247 name_1247 37 97 +1248 name_1248 38 98 +1249 name_1249 39 99 +1250 name_1250 40 50 +1251 name_1251 41 51 +1252 name_1252 42 52 +1253 name_1253 43 53 +1254 name_1254 44 54 +1255 name_1255 45 55 +1256 name_1256 46 56 +1257 name_1257 47 57 +1258 name_1258 48 58 +1259 name_1259 49 59 +1266 name_1266 26 66 +1267 name_1267 27 67 +1268 name_1268 28 68 +1269 name_1269 29 69 +1270 name_1270 30 70 +1271 name_1271 31 71 +1272 name_1272 32 72 +1273 name_1273 33 73 +1274 name_1274 34 74 +1275 name_1275 35 75 +1276 name_1276 36 76 +1277 name_1277 37 77 +1278 name_1278 38 78 +1279 name_1279 39 79 +1280 name_1280 40 80 +1281 name_1281 41 81 +1282 name_1282 42 82 +1283 name_1283 43 83 +1284 name_1284 44 84 +1285 name_1285 45 85 +1286 name_1286 46 86 +1287 name_1287 47 87 +1288 name_1288 48 88 +1289 name_1289 49 89 +1296 name_1296 26 96 +1297 name_1297 27 97 +1298 name_1298 28 98 +1299 name_1299 29 99 +1300 name_1300 30 50 +1301 name_1301 31 51 +1302 name_1302 32 52 +1303 name_1303 33 53 +1304 name_1304 34 54 +1305 name_1305 35 55 +1306 name_1306 36 56 +1307 name_1307 37 57 +1308 name_1308 38 58 +1309 name_1309 39 59 +1310 name_1310 40 60 +1311 name_1311 41 61 +1312 name_1312 42 62 +1313 name_1313 43 63 +1314 name_1314 44 64 +1315 name_1315 45 65 +1316 name_1316 46 66 +1317 name_1317 47 67 +1318 name_1318 48 68 +1319 name_1319 49 69 +1326 name_1326 26 76 +1327 name_1327 27 77 +1328 name_1328 28 78 +1329 name_1329 29 79 +1330 name_1330 30 80 +1331 name_1331 31 81 +1332 name_1332 32 82 +1333 name_1333 33 83 +1334 name_1334 34 84 +1335 name_1335 35 85 +1336 name_1336 36 86 +1337 name_1337 37 87 +1338 name_1338 38 88 +1339 name_1339 39 89 +1340 name_1340 40 90 +1341 name_1341 41 91 +1342 name_1342 42 92 +1343 name_1343 43 93 +1344 name_1344 44 94 +1345 name_1345 45 95 +1346 name_1346 46 96 +1347 name_1347 47 97 +1348 name_1348 48 98 +1349 name_1349 49 99 +1356 name_1356 26 56 +1357 name_1357 27 57 +1358 name_1358 28 58 +1359 name_1359 29 59 +1360 name_1360 30 60 +1361 name_1361 31 61 +1362 name_1362 32 62 +1363 name_1363 33 63 +1364 name_1364 34 64 +1365 name_1365 35 65 +1366 name_1366 36 66 +1367 name_1367 37 67 +1368 name_1368 38 68 +1369 name_1369 39 69 +1370 name_1370 40 70 +1371 name_1371 41 71 +1372 name_1372 42 72 +1373 name_1373 43 73 +1374 name_1374 44 74 +1375 name_1375 45 75 +1376 name_1376 46 76 +1377 name_1377 47 77 +1378 name_1378 48 78 +1379 name_1379 49 79 +1386 name_1386 26 86 +1387 name_1387 27 87 +1388 name_1388 28 88 +1389 name_1389 29 89 +1390 name_1390 30 90 +1391 name_1391 31 91 +1392 name_1392 32 92 +1393 name_1393 33 93 +1394 name_1394 34 94 +1395 name_1395 35 95 +1396 name_1396 36 96 +1397 name_1397 37 97 +1398 name_1398 38 98 +1399 name_1399 39 99 +1400 name_1400 40 50 +1401 name_1401 41 51 +1402 name_1402 42 52 +1403 name_1403 43 53 +1404 name_1404 44 54 +1405 name_1405 45 55 +1406 name_1406 46 56 +1407 name_1407 47 57 +1408 name_1408 48 58 +1409 name_1409 49 59 +1416 name_1416 26 66 +1417 name_1417 27 67 +1418 name_1418 28 68 +1419 name_1419 29 69 +1420 name_1420 30 70 +1421 name_1421 31 71 +1422 name_1422 32 72 +1423 name_1423 33 73 +1424 name_1424 34 74 +1425 name_1425 35 75 +1426 name_1426 36 76 +1427 name_1427 37 77 +1428 name_1428 38 78 +1429 name_1429 39 79 +1430 name_1430 40 80 +1431 name_1431 41 81 +1432 name_1432 42 82 +1433 name_1433 43 83 +1434 name_1434 44 84 +1435 name_1435 45 85 +1436 name_1436 46 86 +1437 name_1437 47 87 +1438 name_1438 48 88 +1439 name_1439 49 89 +1446 name_1446 26 96 +1447 name_1447 27 97 +1448 name_1448 28 98 +1449 name_1449 29 99 +1450 name_1450 30 50 +1451 name_1451 31 51 +1452 name_1452 32 52 +1453 name_1453 33 53 +1454 name_1454 34 54 +1455 name_1455 35 55 +1456 name_1456 36 56 +1457 name_1457 37 57 +1458 name_1458 38 58 +1459 name_1459 39 59 +1460 name_1460 40 60 +1461 name_1461 41 61 +1462 name_1462 42 62 +1463 name_1463 43 63 +1464 name_1464 44 64 +1465 name_1465 45 65 +1466 name_1466 46 66 +1467 name_1467 47 67 +1468 name_1468 48 68 +1469 name_1469 49 69 +1476 name_1476 26 76 +1477 name_1477 27 77 +1478 name_1478 28 78 +1479 name_1479 29 79 +1480 name_1480 30 80 +1481 name_1481 31 81 +1482 name_1482 32 82 +1483 name_1483 33 83 +1484 name_1484 34 84 +1485 name_1485 35 85 +1486 name_1486 36 86 +1487 name_1487 37 87 +1488 name_1488 38 88 +1489 name_1489 39 89 +1490 name_1490 40 90 +1491 name_1491 41 91 +1492 name_1492 42 92 +1493 name_1493 43 93 +1494 name_1494 44 94 +1495 name_1495 45 95 +1496 name_1496 46 96 +1497 name_1497 47 97 +1498 name_1498 48 98 +1499 name_1499 49 99 +1506 name_1506 26 56 +1507 name_1507 27 57 +1508 name_1508 28 58 +1509 name_1509 29 59 +1510 name_1510 30 60 +1511 name_1511 31 61 +1512 name_1512 32 62 +1513 name_1513 33 63 +1514 name_1514 34 64 +1515 name_1515 35 65 +1516 name_1516 36 66 +1517 name_1517 37 67 +1518 name_1518 38 68 +1519 name_1519 39 69 +1520 name_1520 40 70 +1521 name_1521 41 71 +1522 name_1522 42 72 +1523 name_1523 43 73 +1524 name_1524 44 74 +1525 name_1525 45 75 +1526 name_1526 46 76 +1527 name_1527 47 77 +1528 name_1528 48 78 +1529 name_1529 49 79 +1536 name_1536 26 86 +1537 name_1537 27 87 +1538 name_1538 28 88 +1539 name_1539 29 89 +1540 name_1540 30 90 +1541 name_1541 31 91 +1542 name_1542 32 92 +1543 name_1543 33 93 +1544 name_1544 34 94 +1545 name_1545 35 95 +1546 name_1546 36 96 +1547 name_1547 37 97 +1548 name_1548 38 98 +1549 name_1549 39 99 +1550 name_1550 40 50 +1551 name_1551 41 51 +1552 name_1552 42 52 +1553 name_1553 43 53 +1554 name_1554 44 54 +1555 name_1555 45 55 +1556 name_1556 46 56 +1557 name_1557 47 57 +1558 name_1558 48 58 +1559 name_1559 49 59 +1566 name_1566 26 66 +1567 name_1567 27 67 +1568 name_1568 28 68 +1569 name_1569 29 69 +1570 name_1570 30 70 +1571 name_1571 31 71 +1572 name_1572 32 72 +1573 name_1573 33 73 +1574 name_1574 34 74 +1575 name_1575 35 75 +1576 name_1576 36 76 +1577 name_1577 37 77 +1578 name_1578 38 78 +1579 name_1579 39 79 +1580 name_1580 40 80 +1581 name_1581 41 81 +1582 name_1582 42 82 +1583 name_1583 43 83 +1584 name_1584 44 84 +1585 name_1585 45 85 +1586 name_1586 46 86 +1587 name_1587 47 87 +1588 name_1588 48 88 +1589 name_1589 49 89 +1596 name_1596 26 96 +1597 name_1597 27 97 +1598 name_1598 28 98 +1599 name_1599 29 99 +1600 name_1600 30 50 +1601 name_1601 31 51 +1602 name_1602 32 52 +1603 name_1603 33 53 +1604 name_1604 34 54 +1605 name_1605 35 55 +1606 name_1606 36 56 +1607 name_1607 37 57 +1608 name_1608 38 58 +1609 name_1609 39 59 +1610 name_1610 40 60 +1611 name_1611 41 61 +1612 name_1612 42 62 +1613 name_1613 43 63 +1614 name_1614 44 64 +1615 name_1615 45 65 +1616 name_1616 46 66 +1617 name_1617 47 67 +1618 name_1618 48 68 +1619 name_1619 49 69 +1626 name_1626 26 76 +1627 name_1627 27 77 +1628 name_1628 28 78 +1629 name_1629 29 79 +1630 name_1630 30 80 +1631 name_1631 31 81 +1632 name_1632 32 82 +1633 name_1633 33 83 +1634 name_1634 34 84 +1635 name_1635 35 85 +1636 name_1636 36 86 +1637 name_1637 37 87 +1638 name_1638 38 88 +1639 name_1639 39 89 +1640 name_1640 40 90 +1641 name_1641 41 91 +1642 name_1642 42 92 +1643 name_1643 43 93 +1644 name_1644 44 94 +1645 name_1645 45 95 +1646 name_1646 46 96 +1647 name_1647 47 97 +1648 name_1648 48 98 +1649 name_1649 49 99 +1656 name_1656 26 56 +1657 name_1657 27 57 +1658 name_1658 28 58 +1659 name_1659 29 59 +1660 name_1660 30 60 +1661 name_1661 31 61 +1662 name_1662 32 62 +1663 name_1663 33 63 +1664 name_1664 34 64 +1665 name_1665 35 65 +1666 name_1666 36 66 +1667 name_1667 37 67 +1668 name_1668 38 68 +1669 name_1669 39 69 +1670 name_1670 40 70 +1671 name_1671 41 71 +1672 name_1672 42 72 +1673 name_1673 43 73 +1674 name_1674 44 74 +1675 name_1675 45 75 +1676 name_1676 46 76 +1677 name_1677 47 77 +1678 name_1678 48 78 +1679 name_1679 49 79 +1686 name_1686 26 86 +1687 name_1687 27 87 +1688 name_1688 28 88 +1689 name_1689 29 89 +1690 name_1690 30 90 +1691 name_1691 31 91 +1692 name_1692 32 92 +1693 name_1693 33 93 +1694 name_1694 34 94 +1695 name_1695 35 95 +1696 name_1696 36 96 +1697 name_1697 37 97 +1698 name_1698 38 98 +1699 name_1699 39 99 +1700 name_1700 40 50 +1701 name_1701 41 51 +1702 name_1702 42 52 +1703 name_1703 43 53 +1704 name_1704 44 54 +1705 name_1705 45 55 +1706 name_1706 46 56 +1707 name_1707 47 57 +1708 name_1708 48 58 +1709 name_1709 49 59 +1716 name_1716 26 66 +1717 name_1717 27 67 +1718 name_1718 28 68 +1719 name_1719 29 69 +1720 name_1720 30 70 +1721 name_1721 31 71 +1722 name_1722 32 72 +1723 name_1723 33 73 +1724 name_1724 34 74 +1725 name_1725 35 75 +1726 name_1726 36 76 +1727 name_1727 37 77 +1728 name_1728 38 78 +1729 name_1729 39 79 +1730 name_1730 40 80 +1731 name_1731 41 81 +1732 name_1732 42 82 +1733 name_1733 43 83 +1734 name_1734 44 84 +1735 name_1735 45 85 +1736 name_1736 46 86 +1737 name_1737 47 87 +1738 name_1738 48 88 +1739 name_1739 49 89 +1746 name_1746 26 96 +1747 name_1747 27 97 +1748 name_1748 28 98 +1749 name_1749 29 99 +1750 name_1750 30 50 +1751 name_1751 31 51 +1752 name_1752 32 52 +1753 name_1753 33 53 +1754 name_1754 34 54 +1755 name_1755 35 55 +1756 name_1756 36 56 +1757 name_1757 37 57 +1758 name_1758 38 58 +1759 name_1759 39 59 +1760 name_1760 40 60 +1761 name_1761 41 61 +1762 name_1762 42 62 +1763 name_1763 43 63 +1764 name_1764 44 64 +1765 name_1765 45 65 +1766 name_1766 46 66 +1767 name_1767 47 67 +1768 name_1768 48 68 +1769 name_1769 49 69 +1776 name_1776 26 76 +1777 name_1777 27 77 +1778 name_1778 28 78 +1779 name_1779 29 79 +1780 name_1780 30 80 +1781 name_1781 31 81 +1782 name_1782 32 82 +1783 name_1783 33 83 +1784 name_1784 34 84 +1785 name_1785 35 85 +1786 name_1786 36 86 +1787 name_1787 37 87 +1788 name_1788 38 88 +1789 name_1789 39 89 +1790 name_1790 40 90 +1791 name_1791 41 91 +1792 name_1792 42 92 +1793 name_1793 43 93 +1794 name_1794 44 94 +1795 name_1795 45 95 +1796 name_1796 46 96 +1797 name_1797 47 97 +1798 name_1798 48 98 +1799 name_1799 49 99 +1806 name_1806 26 56 +1807 name_1807 27 57 +1808 name_1808 28 58 +1809 name_1809 29 59 +1810 name_1810 30 60 +1811 name_1811 31 61 +1812 name_1812 32 62 +1813 name_1813 33 63 +1814 name_1814 34 64 +1815 name_1815 35 65 +1816 name_1816 36 66 +1817 name_1817 37 67 +1818 name_1818 38 68 +1819 name_1819 39 69 +1820 name_1820 40 70 +1821 name_1821 41 71 +1822 name_1822 42 72 +1823 name_1823 43 73 +1824 name_1824 44 74 +1825 name_1825 45 75 +1826 name_1826 46 76 +1827 name_1827 47 77 +1828 name_1828 48 78 +1829 name_1829 49 79 +1836 name_1836 26 86 +1837 name_1837 27 87 +1838 name_1838 28 88 +1839 name_1839 29 89 +1840 name_1840 30 90 +1841 name_1841 31 91 +1842 name_1842 32 92 +1843 name_1843 33 93 +1844 name_1844 34 94 +1845 name_1845 35 95 +1846 name_1846 36 96 +1847 name_1847 37 97 +1848 name_1848 38 98 +1849 name_1849 39 99 +1850 name_1850 40 50 +1851 name_1851 41 51 +1852 name_1852 42 52 +1853 name_1853 43 53 +1854 name_1854 44 54 +1855 name_1855 45 55 +1856 name_1856 46 56 +1857 name_1857 47 57 +1858 name_1858 48 58 +1859 name_1859 49 59 +1866 name_1866 26 66 +1867 name_1867 27 67 +1868 name_1868 28 68 +1869 name_1869 29 69 +1870 name_1870 30 70 +1871 name_1871 31 71 +1872 name_1872 32 72 +1873 name_1873 33 73 +1874 name_1874 34 74 +1875 name_1875 35 75 +1876 name_1876 36 76 +1877 name_1877 37 77 +1878 name_1878 38 78 +1879 name_1879 39 79 +1880 name_1880 40 80 +1881 name_1881 41 81 +1882 name_1882 42 82 +1883 name_1883 43 83 +1884 name_1884 44 84 +1885 name_1885 45 85 +1886 name_1886 46 86 +1887 name_1887 47 87 +1888 name_1888 48 88 +1889 name_1889 49 89 +1896 name_1896 26 96 +1897 name_1897 27 97 +1898 name_1898 28 98 +1899 name_1899 29 99 +1900 name_1900 30 50 +1901 name_1901 31 51 +1902 name_1902 32 52 +1903 name_1903 33 53 +1904 name_1904 34 54 +1905 name_1905 35 55 +1906 name_1906 36 56 +1907 name_1907 37 57 +1908 name_1908 38 58 +1909 name_1909 39 59 +1910 name_1910 40 60 +1911 name_1911 41 61 +1912 name_1912 42 62 +1913 name_1913 43 63 +1914 name_1914 44 64 +1915 name_1915 45 65 +1916 name_1916 46 66 +1917 name_1917 47 67 +1918 name_1918 48 68 +1919 name_1919 49 69 +1926 name_1926 26 76 +1927 name_1927 27 77 +1928 name_1928 28 78 +1929 name_1929 29 79 +1930 name_1930 30 80 +1931 name_1931 31 81 +1932 name_1932 32 82 +1933 name_1933 33 83 +1934 name_1934 34 84 +1935 name_1935 35 85 +1936 name_1936 36 86 +1937 name_1937 37 87 +1938 name_1938 38 88 +1939 name_1939 39 89 +1940 name_1940 40 90 +1941 name_1941 41 91 +1942 name_1942 42 92 +1943 name_1943 43 93 +1944 name_1944 44 94 +1945 name_1945 45 95 +1946 name_1946 46 96 +1947 name_1947 47 97 +1948 name_1948 48 98 +1949 name_1949 49 99 +1956 name_1956 26 56 +1957 name_1957 27 57 +1958 name_1958 28 58 +1959 name_1959 29 59 +1960 name_1960 30 60 +1961 name_1961 31 61 +1962 name_1962 32 62 +1963 name_1963 33 63 +1964 name_1964 34 64 +1965 name_1965 35 65 +1966 name_1966 36 66 +1967 name_1967 37 67 +1968 name_1968 38 68 +1969 name_1969 39 69 +1970 name_1970 40 70 +1971 name_1971 41 71 +1972 name_1972 42 72 +1973 name_1973 43 73 +1974 name_1974 44 74 +1975 name_1975 45 75 +1976 name_1976 46 76 +1977 name_1977 47 77 +1978 name_1978 48 78 +1979 name_1979 49 79 +1986 name_1986 26 86 +1987 name_1987 27 87 +1988 name_1988 28 88 +1989 name_1989 29 89 +1990 name_1990 30 90 +1991 name_1991 31 91 +1992 name_1992 32 92 +1993 name_1993 33 93 +1994 name_1994 34 94 +1995 name_1995 35 95 +1996 name_1996 36 96 +1997 name_1997 37 97 +1998 name_1998 38 98 +1999 name_1999 39 99 +2000 name_2000 40 50 +2001 name_2001 41 51 +2002 name_2002 42 52 +2003 name_2003 43 53 +2004 name_2004 44 54 +2005 name_2005 45 55 +2006 name_2006 46 56 +2007 name_2007 47 57 +2008 name_2008 48 58 +2009 name_2009 49 59 +2016 name_2016 26 66 +2017 name_2017 27 67 +2018 name_2018 28 68 +2019 name_2019 29 69 +2020 name_2020 30 70 +2021 name_2021 31 71 +2022 name_2022 32 72 +2023 name_2023 33 73 +2024 name_2024 34 74 +2025 name_2025 35 75 +2026 name_2026 36 76 +2027 name_2027 37 77 +2028 name_2028 38 78 +2029 name_2029 39 79 +2030 name_2030 40 80 +2031 name_2031 41 81 +2032 name_2032 42 82 +2033 name_2033 43 83 +2034 name_2034 44 84 +2035 name_2035 45 85 +2036 name_2036 46 86 +2037 name_2037 47 87 +2038 name_2038 48 88 +2039 name_2039 49 89 +2046 name_2046 26 96 +2047 name_2047 27 97 +2048 name_2048 28 98 +2049 name_2049 29 99 +2050 name_2050 30 50 +2051 name_2051 31 51 +2052 name_2052 32 52 +2053 name_2053 33 53 +2054 name_2054 34 54 +2055 name_2055 35 55 +2056 name_2056 36 56 +2057 name_2057 37 57 +2058 name_2058 38 58 +2059 name_2059 39 59 +2060 name_2060 40 60 +2061 name_2061 41 61 +2062 name_2062 42 62 +2063 name_2063 43 63 +2064 name_2064 44 64 +2065 name_2065 45 65 +2066 name_2066 46 66 +2067 name_2067 47 67 +2068 name_2068 48 68 +2069 name_2069 49 69 +2076 name_2076 26 76 +2077 name_2077 27 77 +2078 name_2078 28 78 +2079 name_2079 29 79 +2080 name_2080 30 80 +2081 name_2081 31 81 +2082 name_2082 32 82 +2083 name_2083 33 83 +2084 name_2084 34 84 +2085 name_2085 35 85 +2086 name_2086 36 86 +2087 name_2087 37 87 +2088 name_2088 38 88 +2089 name_2089 39 89 +2090 name_2090 40 90 +2091 name_2091 41 91 +2092 name_2092 42 92 +2093 name_2093 43 93 +2094 name_2094 44 94 +2095 name_2095 45 95 +2096 name_2096 46 96 +2097 name_2097 47 97 +2098 name_2098 48 98 +2099 name_2099 49 99 +2106 name_2106 26 56 +2107 name_2107 27 57 +2108 name_2108 28 58 +2109 name_2109 29 59 +2110 name_2110 30 60 +2111 name_2111 31 61 +2112 name_2112 32 62 +2113 name_2113 33 63 +2114 name_2114 34 64 +2115 name_2115 35 65 +2116 name_2116 36 66 +2117 name_2117 37 67 +2118 name_2118 38 68 +2119 name_2119 39 69 +2120 name_2120 40 70 +2121 name_2121 41 71 +2122 name_2122 42 72 +2123 name_2123 43 73 +2124 name_2124 44 74 +2125 name_2125 45 75 +2126 name_2126 46 76 +2127 name_2127 47 77 +2128 name_2128 48 78 +2129 name_2129 49 79 +2136 name_2136 26 86 +2137 name_2137 27 87 +2138 name_2138 28 88 +2139 name_2139 29 89 +2140 name_2140 30 90 +2141 name_2141 31 91 +2142 name_2142 32 92 +2143 name_2143 33 93 +2144 name_2144 34 94 +2145 name_2145 35 95 +2146 name_2146 36 96 +2147 name_2147 37 97 +2148 name_2148 38 98 +2149 name_2149 39 99 +2150 name_2150 40 50 +2151 name_2151 41 51 +2152 name_2152 42 52 +2153 name_2153 43 53 +2154 name_2154 44 54 +2155 name_2155 45 55 +2156 name_2156 46 56 +2157 name_2157 47 57 +2158 name_2158 48 58 +2159 name_2159 49 59 +2166 name_2166 26 66 +2167 name_2167 27 67 +2168 name_2168 28 68 +2169 name_2169 29 69 +2170 name_2170 30 70 +2171 name_2171 31 71 +2172 name_2172 32 72 +2173 name_2173 33 73 +2174 name_2174 34 74 +2175 name_2175 35 75 +2176 name_2176 36 76 +2177 name_2177 37 77 +2178 name_2178 38 78 +2179 name_2179 39 79 +2180 name_2180 40 80 +2181 name_2181 41 81 +2182 name_2182 42 82 +2183 name_2183 43 83 +2184 name_2184 44 84 +2185 name_2185 45 85 +2186 name_2186 46 86 +2187 name_2187 47 87 +2188 name_2188 48 88 +2189 name_2189 49 89 +2196 name_2196 26 96 +2197 name_2197 27 97 +2198 name_2198 28 98 +2199 name_2199 29 99 +2200 name_2200 30 50 +2201 name_2201 31 51 +2202 name_2202 32 52 +2203 name_2203 33 53 +2204 name_2204 34 54 +2205 name_2205 35 55 +2206 name_2206 36 56 +2207 name_2207 37 57 +2208 name_2208 38 58 +2209 name_2209 39 59 +2210 name_2210 40 60 +2211 name_2211 41 61 +2212 name_2212 42 62 +2213 name_2213 43 63 +2214 name_2214 44 64 +2215 name_2215 45 65 +2216 name_2216 46 66 +2217 name_2217 47 67 +2218 name_2218 48 68 +2219 name_2219 49 69 +2226 name_2226 26 76 +2227 name_2227 27 77 +2228 name_2228 28 78 +2229 name_2229 29 79 +2230 name_2230 30 80 +2231 name_2231 31 81 +2232 name_2232 32 82 +2233 name_2233 33 83 +2234 name_2234 34 84 +2235 name_2235 35 85 +2236 name_2236 36 86 +2237 name_2237 37 87 +2238 name_2238 38 88 +2239 name_2239 39 89 +2240 name_2240 40 90 +2241 name_2241 41 91 +2242 name_2242 42 92 +2243 name_2243 43 93 +2244 name_2244 44 94 +2245 name_2245 45 95 +2246 name_2246 46 96 +2247 name_2247 47 97 +2248 name_2248 48 98 +2249 name_2249 49 99 +2256 name_2256 26 56 +2257 name_2257 27 57 +2258 name_2258 28 58 +2259 name_2259 29 59 +2260 name_2260 30 60 +2261 name_2261 31 61 +2262 name_2262 32 62 +2263 name_2263 33 63 +2264 name_2264 34 64 +2265 name_2265 35 65 +2266 name_2266 36 66 +2267 name_2267 37 67 +2268 name_2268 38 68 +2269 name_2269 39 69 +2270 name_2270 40 70 +2271 name_2271 41 71 +2272 name_2272 42 72 +2273 name_2273 43 73 +2274 name_2274 44 74 +2275 name_2275 45 75 +2276 name_2276 46 76 +2277 name_2277 47 77 +2278 name_2278 48 78 +2279 name_2279 49 79 +2286 name_2286 26 86 +2287 name_2287 27 87 +2288 name_2288 28 88 +2289 name_2289 29 89 +2290 name_2290 30 90 +2291 name_2291 31 91 +2292 name_2292 32 92 +2293 name_2293 33 93 +2294 name_2294 34 94 +2295 name_2295 35 95 +2296 name_2296 36 96 +2297 name_2297 37 97 +2298 name_2298 38 98 +2299 name_2299 39 99 +2300 name_2300 40 50 +2301 name_2301 41 51 +2302 name_2302 42 52 +2303 name_2303 43 53 +2304 name_2304 44 54 +2305 name_2305 45 55 +2306 name_2306 46 56 +2307 name_2307 47 57 +2308 name_2308 48 58 +2309 name_2309 49 59 +2316 name_2316 26 66 +2317 name_2317 27 67 +2318 name_2318 28 68 +2319 name_2319 29 69 +2320 name_2320 30 70 +2321 name_2321 31 71 +2322 name_2322 32 72 +2323 name_2323 33 73 +2324 name_2324 34 74 +2325 name_2325 35 75 +2326 name_2326 36 76 +2327 name_2327 37 77 +2328 name_2328 38 78 +2329 name_2329 39 79 +2330 name_2330 40 80 +2331 name_2331 41 81 +2332 name_2332 42 82 +2333 name_2333 43 83 +2334 name_2334 44 84 +2335 name_2335 45 85 +2336 name_2336 46 86 +2337 name_2337 47 87 +2338 name_2338 48 88 +2339 name_2339 49 89 +2346 name_2346 26 96 +2347 name_2347 27 97 +2348 name_2348 28 98 +2349 name_2349 29 99 +2350 name_2350 30 50 +2351 name_2351 31 51 +2352 name_2352 32 52 +2353 name_2353 33 53 +2354 name_2354 34 54 +2355 name_2355 35 55 +2356 name_2356 36 56 +2357 name_2357 37 57 +2358 name_2358 38 58 +2359 name_2359 39 59 +2360 name_2360 40 60 +2361 name_2361 41 61 +2362 name_2362 42 62 +2363 name_2363 43 63 +2364 name_2364 44 64 +2365 name_2365 45 65 +2366 name_2366 46 66 +2367 name_2367 47 67 +2368 name_2368 48 68 +2369 name_2369 49 69 +2376 name_2376 26 76 +2377 name_2377 27 77 +2378 name_2378 28 78 +2379 name_2379 29 79 +2380 name_2380 30 80 +2381 name_2381 31 81 +2382 name_2382 32 82 +2383 name_2383 33 83 +2384 name_2384 34 84 +2385 name_2385 35 85 +2386 name_2386 36 86 +2387 name_2387 37 87 +2388 name_2388 38 88 +2389 name_2389 39 89 +2390 name_2390 40 90 +2391 name_2391 41 91 +2392 name_2392 42 92 +2393 name_2393 43 93 +2394 name_2394 44 94 +2395 name_2395 45 95 +2396 name_2396 46 96 +2397 name_2397 47 97 +2398 name_2398 48 98 +2399 name_2399 49 99 +2406 name_2406 26 56 +2407 name_2407 27 57 +2408 name_2408 28 58 +2409 name_2409 29 59 +2410 name_2410 30 60 +2411 name_2411 31 61 +2412 name_2412 32 62 +2413 name_2413 33 63 +2414 name_2414 34 64 +2415 name_2415 35 65 +2416 name_2416 36 66 +2417 name_2417 37 67 +2418 name_2418 38 68 +2419 name_2419 39 69 +2420 name_2420 40 70 +2421 name_2421 41 71 +2422 name_2422 42 72 +2423 name_2423 43 73 +2424 name_2424 44 74 +2425 name_2425 45 75 +2426 name_2426 46 76 +2427 name_2427 47 77 +2428 name_2428 48 78 +2429 name_2429 49 79 +2436 name_2436 26 86 +2437 name_2437 27 87 +2438 name_2438 28 88 +2439 name_2439 29 89 +2440 name_2440 30 90 +2441 name_2441 31 91 +2442 name_2442 32 92 +2443 name_2443 33 93 +2444 name_2444 34 94 +2445 name_2445 35 95 +2446 name_2446 36 96 +2447 name_2447 37 97 +2448 name_2448 38 98 +2449 name_2449 39 99 +2450 name_2450 40 50 +2451 name_2451 41 51 +2452 name_2452 42 52 +2453 name_2453 43 53 +2454 name_2454 44 54 +2455 name_2455 45 55 +2456 name_2456 46 56 +2457 name_2457 47 57 +2458 name_2458 48 58 +2459 name_2459 49 59 +2466 name_2466 26 66 +2467 name_2467 27 67 +2468 name_2468 28 68 +2469 name_2469 29 69 +2470 name_2470 30 70 +2471 name_2471 31 71 +2472 name_2472 32 72 +2473 name_2473 33 73 +2474 name_2474 34 74 +2475 name_2475 35 75 +2476 name_2476 36 76 +2477 name_2477 37 77 +2478 name_2478 38 78 +2479 name_2479 39 79 +2480 name_2480 40 80 +2481 name_2481 41 81 +2482 name_2482 42 82 +2483 name_2483 43 83 +2484 name_2484 44 84 +2485 name_2485 45 85 +2486 name_2486 46 86 +2487 name_2487 47 87 +2488 name_2488 48 88 +2489 name_2489 49 89 +2496 name_2496 26 96 +2497 name_2497 27 97 +2498 name_2498 28 98 +2499 name_2499 29 99 +2500 name_2500 30 50 +2501 name_2501 31 51 +2502 name_2502 32 52 +2503 name_2503 33 53 +2504 name_2504 34 54 +2505 name_2505 35 55 +2506 name_2506 36 56 +2507 name_2507 37 57 +2508 name_2508 38 58 +2509 name_2509 39 59 +2510 name_2510 40 60 +2511 name_2511 41 61 +2512 name_2512 42 62 +2513 name_2513 43 63 +2514 name_2514 44 64 +2515 name_2515 45 65 +2516 name_2516 46 66 +2517 name_2517 47 67 +2518 name_2518 48 68 +2519 name_2519 49 69 +2526 name_2526 26 76 +2527 name_2527 27 77 +2528 name_2528 28 78 +2529 name_2529 29 79 +2530 name_2530 30 80 +2531 name_2531 31 81 +2532 name_2532 32 82 +2533 name_2533 33 83 +2534 name_2534 34 84 +2535 name_2535 35 85 +2536 name_2536 36 86 +2537 name_2537 37 87 +2538 name_2538 38 88 +2539 name_2539 39 89 +2540 name_2540 40 90 +2541 name_2541 41 91 +2542 name_2542 42 92 +2543 name_2543 43 93 +2544 name_2544 44 94 +2545 name_2545 45 95 +2546 name_2546 46 96 +2547 name_2547 47 97 +2548 name_2548 48 98 +2549 name_2549 49 99 +2556 name_2556 26 56 +2557 name_2557 27 57 +2558 name_2558 28 58 +2559 name_2559 29 59 +2560 name_2560 30 60 +2561 name_2561 31 61 +2562 name_2562 32 62 +2563 name_2563 33 63 +2564 name_2564 34 64 +2565 name_2565 35 65 +2566 name_2566 36 66 +2567 name_2567 37 67 +2568 name_2568 38 68 +2569 name_2569 39 69 +2570 name_2570 40 70 +2571 name_2571 41 71 +2572 name_2572 42 72 +2573 name_2573 43 73 +2574 name_2574 44 74 +2575 name_2575 45 75 +2576 name_2576 46 76 +2577 name_2577 47 77 +2578 name_2578 48 78 +2579 name_2579 49 79 +2586 name_2586 26 86 +2587 name_2587 27 87 +2588 name_2588 28 88 +2589 name_2589 29 89 +2590 name_2590 30 90 +2591 name_2591 31 91 +2592 name_2592 32 92 +2593 name_2593 33 93 +2594 name_2594 34 94 +2595 name_2595 35 95 +2596 name_2596 36 96 +2597 name_2597 37 97 +2598 name_2598 38 98 +2599 name_2599 39 99 +2600 name_2600 40 50 +2601 name_2601 41 51 +2602 name_2602 42 52 +2603 name_2603 43 53 +2604 name_2604 44 54 +2605 name_2605 45 55 +2606 name_2606 46 56 +2607 name_2607 47 57 +2608 name_2608 48 58 +2609 name_2609 49 59 +2616 name_2616 26 66 +2617 name_2617 27 67 +2618 name_2618 28 68 +2619 name_2619 29 69 +2620 name_2620 30 70 +2621 name_2621 31 71 +2622 name_2622 32 72 +2623 name_2623 33 73 +2624 name_2624 34 74 +2625 name_2625 35 75 +2626 name_2626 36 76 +2627 name_2627 37 77 +2628 name_2628 38 78 +2629 name_2629 39 79 +2630 name_2630 40 80 +2631 name_2631 41 81 +2632 name_2632 42 82 +2633 name_2633 43 83 +2634 name_2634 44 84 +2635 name_2635 45 85 +2636 name_2636 46 86 +2637 name_2637 47 87 +2638 name_2638 48 88 +2639 name_2639 49 89 +2646 name_2646 26 96 +2647 name_2647 27 97 +2648 name_2648 28 98 +2649 name_2649 29 99 +2650 name_2650 30 50 +2651 name_2651 31 51 +2652 name_2652 32 52 +2653 name_2653 33 53 +2654 name_2654 34 54 +2655 name_2655 35 55 +2656 name_2656 36 56 +2657 name_2657 37 57 +2658 name_2658 38 58 +2659 name_2659 39 59 +2660 name_2660 40 60 +2661 name_2661 41 61 +2662 name_2662 42 62 +2663 name_2663 43 63 +2664 name_2664 44 64 +2665 name_2665 45 65 +2666 name_2666 46 66 +2667 name_2667 47 67 +2668 name_2668 48 68 +2669 name_2669 49 69 +2676 name_2676 26 76 +2677 name_2677 27 77 +2678 name_2678 28 78 +2679 name_2679 29 79 +2680 name_2680 30 80 +2681 name_2681 31 81 +2682 name_2682 32 82 +2683 name_2683 33 83 +2684 name_2684 34 84 +2685 name_2685 35 85 +2686 name_2686 36 86 +2687 name_2687 37 87 +2688 name_2688 38 88 +2689 name_2689 39 89 +2690 name_2690 40 90 +2691 name_2691 41 91 +2692 name_2692 42 92 +2693 name_2693 43 93 +2694 name_2694 44 94 +2695 name_2695 45 95 +2696 name_2696 46 96 +2697 name_2697 47 97 +2698 name_2698 48 98 +2699 name_2699 49 99 +2706 name_2706 26 56 +2707 name_2707 27 57 +2708 name_2708 28 58 +2709 name_2709 29 59 +2710 name_2710 30 60 +2711 name_2711 31 61 +2712 name_2712 32 62 +2713 name_2713 33 63 +2714 name_2714 34 64 +2715 name_2715 35 65 +2716 name_2716 36 66 +2717 name_2717 37 67 +2718 name_2718 38 68 +2719 name_2719 39 69 +2720 name_2720 40 70 +2721 name_2721 41 71 +2722 name_2722 42 72 +2723 name_2723 43 73 +2724 name_2724 44 74 +2725 name_2725 45 75 +2726 name_2726 46 76 +2727 name_2727 47 77 +2728 name_2728 48 78 +2729 name_2729 49 79 +2736 name_2736 26 86 +2737 name_2737 27 87 +2738 name_2738 28 88 +2739 name_2739 29 89 +2740 name_2740 30 90 +2741 name_2741 31 91 +2742 name_2742 32 92 +2743 name_2743 33 93 +2744 name_2744 34 94 +2745 name_2745 35 95 +2746 name_2746 36 96 +2747 name_2747 37 97 +2748 name_2748 38 98 +2749 name_2749 39 99 +2750 name_2750 40 50 +2751 name_2751 41 51 +2752 name_2752 42 52 +2753 name_2753 43 53 +2754 name_2754 44 54 +2755 name_2755 45 55 +2756 name_2756 46 56 +2757 name_2757 47 57 +2758 name_2758 48 58 +2759 name_2759 49 59 +2766 name_2766 26 66 +2767 name_2767 27 67 +2768 name_2768 28 68 +2769 name_2769 29 69 +2770 name_2770 30 70 +2771 name_2771 31 71 +2772 name_2772 32 72 +2773 name_2773 33 73 +2774 name_2774 34 74 +2775 name_2775 35 75 +2776 name_2776 36 76 +2777 name_2777 37 77 +2778 name_2778 38 78 +2779 name_2779 39 79 +2780 name_2780 40 80 +2781 name_2781 41 81 +2782 name_2782 42 82 +2783 name_2783 43 83 +2784 name_2784 44 84 +2785 name_2785 45 85 +2786 name_2786 46 86 +2787 name_2787 47 87 +2788 name_2788 48 88 +2789 name_2789 49 89 +2796 name_2796 26 96 +2797 name_2797 27 97 +2798 name_2798 28 98 +2799 name_2799 29 99 +2800 name_2800 30 50 +2801 name_2801 31 51 +2802 name_2802 32 52 +2803 name_2803 33 53 +2804 name_2804 34 54 +2805 name_2805 35 55 +2806 name_2806 36 56 +2807 name_2807 37 57 +2808 name_2808 38 58 +2809 name_2809 39 59 +2810 name_2810 40 60 +2811 name_2811 41 61 +2812 name_2812 42 62 +2813 name_2813 43 63 +2814 name_2814 44 64 +2815 name_2815 45 65 +2816 name_2816 46 66 +2817 name_2817 47 67 +2818 name_2818 48 68 +2819 name_2819 49 69 +2826 name_2826 26 76 +2827 name_2827 27 77 +2828 name_2828 28 78 +2829 name_2829 29 79 +2830 name_2830 30 80 +2831 name_2831 31 81 +2832 name_2832 32 82 +2833 name_2833 33 83 +2834 name_2834 34 84 +2835 name_2835 35 85 +2836 name_2836 36 86 +2837 name_2837 37 87 +2838 name_2838 38 88 +2839 name_2839 39 89 +2840 name_2840 40 90 +2841 name_2841 41 91 +2842 name_2842 42 92 +2843 name_2843 43 93 +2844 name_2844 44 94 +2845 name_2845 45 95 +2846 name_2846 46 96 +2847 name_2847 47 97 +2848 name_2848 48 98 +2849 name_2849 49 99 +2856 name_2856 26 56 +2857 name_2857 27 57 +2858 name_2858 28 58 +2859 name_2859 29 59 +2860 name_2860 30 60 +2861 name_2861 31 61 +2862 name_2862 32 62 +2863 name_2863 33 63 +2864 name_2864 34 64 +2865 name_2865 35 65 +2866 name_2866 36 66 +2867 name_2867 37 67 +2868 name_2868 38 68 +2869 name_2869 39 69 +2870 name_2870 40 70 +2871 name_2871 41 71 +2872 name_2872 42 72 +2873 name_2873 43 73 +2874 name_2874 44 74 +2875 name_2875 45 75 +2876 name_2876 46 76 +2877 name_2877 47 77 +2878 name_2878 48 78 +2879 name_2879 49 79 +2886 name_2886 26 86 +2887 name_2887 27 87 +2888 name_2888 28 88 +2889 name_2889 29 89 +2890 name_2890 30 90 +2891 name_2891 31 91 +2892 name_2892 32 92 +2893 name_2893 33 93 +2894 name_2894 34 94 +2895 name_2895 35 95 +2896 name_2896 36 96 +2897 name_2897 37 97 +2898 name_2898 38 98 +2899 name_2899 39 99 +2900 name_2900 40 50 +2901 name_2901 41 51 +2902 name_2902 42 52 +2903 name_2903 43 53 +2904 name_2904 44 54 +2905 name_2905 45 55 +2906 name_2906 46 56 +2907 name_2907 47 57 +2908 name_2908 48 58 +2909 name_2909 49 59 +2916 name_2916 26 66 +2917 name_2917 27 67 +2918 name_2918 28 68 +2919 name_2919 29 69 +2920 name_2920 30 70 +2921 name_2921 31 71 +2922 name_2922 32 72 +2923 name_2923 33 73 +2924 name_2924 34 74 +2925 name_2925 35 75 +2926 name_2926 36 76 +2927 name_2927 37 77 +2928 name_2928 38 78 +2929 name_2929 39 79 +2930 name_2930 40 80 +2931 name_2931 41 81 +2932 name_2932 42 82 +2933 name_2933 43 83 +2934 name_2934 44 84 +2935 name_2935 45 85 +2936 name_2936 46 86 +2937 name_2937 47 87 +2938 name_2938 48 88 +2939 name_2939 49 89 +2946 name_2946 26 96 +2947 name_2947 27 97 +2948 name_2948 28 98 +2949 name_2949 29 99 +2950 name_2950 30 50 +2951 name_2951 31 51 +2952 name_2952 32 52 +2953 name_2953 33 53 +2954 name_2954 34 54 +2955 name_2955 35 55 +2956 name_2956 36 56 +2957 name_2957 37 57 +2958 name_2958 38 58 +2959 name_2959 39 59 +2960 name_2960 40 60 +2961 name_2961 41 61 +2962 name_2962 42 62 +2963 name_2963 43 63 +2964 name_2964 44 64 +2965 name_2965 45 65 +2966 name_2966 46 66 +2967 name_2967 47 67 +2968 name_2968 48 68 +2969 name_2969 49 69 +2976 name_2976 26 76 +2977 name_2977 27 77 +2978 name_2978 28 78 +2979 name_2979 29 79 +2980 name_2980 30 80 +2981 name_2981 31 81 +2982 name_2982 32 82 +2983 name_2983 33 83 +2984 name_2984 34 84 +2985 name_2985 35 85 +2986 name_2986 36 86 +2987 name_2987 37 87 +2988 name_2988 38 88 +2989 name_2989 39 89 +2990 name_2990 40 90 +2991 name_2991 41 91 +2992 name_2992 42 92 +2993 name_2993 43 93 +2994 name_2994 44 94 +2995 name_2995 45 95 +2996 name_2996 46 96 +2997 name_2997 47 97 +2998 name_2998 48 98 +2999 name_2999 49 99 +3006 name_3006 26 56 +3007 name_3007 27 57 +3008 name_3008 28 58 +3009 name_3009 29 59 +3010 name_3010 30 60 +3011 name_3011 31 61 +3012 name_3012 32 62 +3013 name_3013 33 63 +3014 name_3014 34 64 +3015 name_3015 35 65 +3016 name_3016 36 66 +3017 name_3017 37 67 +3018 name_3018 38 68 +3019 name_3019 39 69 +3020 name_3020 40 70 +3021 name_3021 41 71 +3022 name_3022 42 72 +3023 name_3023 43 73 +3024 name_3024 44 74 +3025 name_3025 45 75 +3026 name_3026 46 76 +3027 name_3027 47 77 +3028 name_3028 48 78 +3029 name_3029 49 79 +3036 name_3036 26 86 +3037 name_3037 27 87 +3038 name_3038 28 88 +3039 name_3039 29 89 +3040 name_3040 30 90 +3041 name_3041 31 91 +3042 name_3042 32 92 +3043 name_3043 33 93 +3044 name_3044 34 94 +3045 name_3045 35 95 +3046 name_3046 36 96 +3047 name_3047 37 97 +3048 name_3048 38 98 +3049 name_3049 39 99 +3050 name_3050 40 50 +3051 name_3051 41 51 +3052 name_3052 42 52 +3053 name_3053 43 53 +3054 name_3054 44 54 +3055 name_3055 45 55 +3056 name_3056 46 56 +3057 name_3057 47 57 +3058 name_3058 48 58 +3059 name_3059 49 59 +3066 name_3066 26 66 +3067 name_3067 27 67 +3068 name_3068 28 68 +3069 name_3069 29 69 +3070 name_3070 30 70 +3071 name_3071 31 71 +3072 name_3072 32 72 +3073 name_3073 33 73 +3074 name_3074 34 74 +3075 name_3075 35 75 +3076 name_3076 36 76 +3077 name_3077 37 77 +3078 name_3078 38 78 +3079 name_3079 39 79 +3080 name_3080 40 80 +3081 name_3081 41 81 +3082 name_3082 42 82 +3083 name_3083 43 83 +3084 name_3084 44 84 +3085 name_3085 45 85 +3086 name_3086 46 86 +3087 name_3087 47 87 +3088 name_3088 48 88 +3089 name_3089 49 89 +3096 name_3096 26 96 +3097 name_3097 27 97 +3098 name_3098 28 98 +3099 name_3099 29 99 +3100 name_3100 30 50 +3101 name_3101 31 51 +3102 name_3102 32 52 +3103 name_3103 33 53 +3104 name_3104 34 54 +3105 name_3105 35 55 +3106 name_3106 36 56 +3107 name_3107 37 57 +3108 name_3108 38 58 +3109 name_3109 39 59 +3110 name_3110 40 60 +3111 name_3111 41 61 +3112 name_3112 42 62 +3113 name_3113 43 63 +3114 name_3114 44 64 +3115 name_3115 45 65 +3116 name_3116 46 66 +3117 name_3117 47 67 +3118 name_3118 48 68 +3119 name_3119 49 69 +3126 name_3126 26 76 +3127 name_3127 27 77 +3128 name_3128 28 78 +3129 name_3129 29 79 +3130 name_3130 30 80 +3131 name_3131 31 81 +3132 name_3132 32 82 +3133 name_3133 33 83 +3134 name_3134 34 84 +3135 name_3135 35 85 +3136 name_3136 36 86 +3137 name_3137 37 87 +3138 name_3138 38 88 +3139 name_3139 39 89 +3140 name_3140 40 90 +3141 name_3141 41 91 +3142 name_3142 42 92 +3143 name_3143 43 93 +3144 name_3144 44 94 +3145 name_3145 45 95 +3146 name_3146 46 96 +3147 name_3147 47 97 +3148 name_3148 48 98 +3149 name_3149 49 99 +3156 name_3156 26 56 +3157 name_3157 27 57 +3158 name_3158 28 58 +3159 name_3159 29 59 +3160 name_3160 30 60 +3161 name_3161 31 61 +3162 name_3162 32 62 +3163 name_3163 33 63 +3164 name_3164 34 64 +3165 name_3165 35 65 +3166 name_3166 36 66 +3167 name_3167 37 67 +3168 name_3168 38 68 +3169 name_3169 39 69 +3170 name_3170 40 70 +3171 name_3171 41 71 +3172 name_3172 42 72 +3173 name_3173 43 73 +3174 name_3174 44 74 +3175 name_3175 45 75 +3176 name_3176 46 76 +3177 name_3177 47 77 +3178 name_3178 48 78 +3179 name_3179 49 79 +3186 name_3186 26 86 +3187 name_3187 27 87 +3188 name_3188 28 88 +3189 name_3189 29 89 +3190 name_3190 30 90 +3191 name_3191 31 91 +3192 name_3192 32 92 +3193 name_3193 33 93 +3194 name_3194 34 94 +3195 name_3195 35 95 +3196 name_3196 36 96 +3197 name_3197 37 97 +3198 name_3198 38 98 +3199 name_3199 39 99 +3200 name_3200 40 50 +3201 name_3201 41 51 +3202 name_3202 42 52 +3203 name_3203 43 53 +3204 name_3204 44 54 +3205 name_3205 45 55 +3206 name_3206 46 56 +3207 name_3207 47 57 +3208 name_3208 48 58 +3209 name_3209 49 59 +3216 name_3216 26 66 +3217 name_3217 27 67 +3218 name_3218 28 68 +3219 name_3219 29 69 +3220 name_3220 30 70 +3221 name_3221 31 71 +3222 name_3222 32 72 +3223 name_3223 33 73 +3224 name_3224 34 74 +3225 name_3225 35 75 +3226 name_3226 36 76 +3227 name_3227 37 77 +3228 name_3228 38 78 +3229 name_3229 39 79 +3230 name_3230 40 80 +3231 name_3231 41 81 +3232 name_3232 42 82 +3233 name_3233 43 83 +3234 name_3234 44 84 +3235 name_3235 45 85 +3236 name_3236 46 86 +3237 name_3237 47 87 +3238 name_3238 48 88 +3239 name_3239 49 89 +3246 name_3246 26 96 +3247 name_3247 27 97 +3248 name_3248 28 98 +3249 name_3249 29 99 +3250 name_3250 30 50 +3251 name_3251 31 51 +3252 name_3252 32 52 +3253 name_3253 33 53 +3254 name_3254 34 54 +3255 name_3255 35 55 +3256 name_3256 36 56 +3257 name_3257 37 57 +3258 name_3258 38 58 +3259 name_3259 39 59 +3260 name_3260 40 60 +3261 name_3261 41 61 +3262 name_3262 42 62 +3263 name_3263 43 63 +3264 name_3264 44 64 +3265 name_3265 45 65 +3266 name_3266 46 66 +3267 name_3267 47 67 +3268 name_3268 48 68 +3269 name_3269 49 69 +3276 name_3276 26 76 +3277 name_3277 27 77 +3278 name_3278 28 78 +3279 name_3279 29 79 +3280 name_3280 30 80 +3281 name_3281 31 81 +3282 name_3282 32 82 +3283 name_3283 33 83 +3284 name_3284 34 84 +3285 name_3285 35 85 +3286 name_3286 36 86 +3287 name_3287 37 87 +3288 name_3288 38 88 +3289 name_3289 39 89 +3290 name_3290 40 90 +3291 name_3291 41 91 +3292 name_3292 42 92 +3293 name_3293 43 93 +3294 name_3294 44 94 +3295 name_3295 45 95 +3296 name_3296 46 96 +3297 name_3297 47 97 +3298 name_3298 48 98 +3299 name_3299 49 99 +3306 name_3306 26 56 +3307 name_3307 27 57 +3308 name_3308 28 58 +3309 name_3309 29 59 +3310 name_3310 30 60 +3311 name_3311 31 61 +3312 name_3312 32 62 +3313 name_3313 33 63 +3314 name_3314 34 64 +3315 name_3315 35 65 +3316 name_3316 36 66 +3317 name_3317 37 67 +3318 name_3318 38 68 +3319 name_3319 39 69 +3320 name_3320 40 70 +3321 name_3321 41 71 +3322 name_3322 42 72 +3323 name_3323 43 73 +3324 name_3324 44 74 +3325 name_3325 45 75 +3326 name_3326 46 76 +3327 name_3327 47 77 +3328 name_3328 48 78 +3329 name_3329 49 79 +3336 name_3336 26 86 +3337 name_3337 27 87 +3338 name_3338 28 88 +3339 name_3339 29 89 +3340 name_3340 30 90 +3341 name_3341 31 91 +3342 name_3342 32 92 +3343 name_3343 33 93 +3344 name_3344 34 94 +3345 name_3345 35 95 +3346 name_3346 36 96 +3347 name_3347 37 97 +3348 name_3348 38 98 +3349 name_3349 39 99 +3350 name_3350 40 50 +3351 name_3351 41 51 +3352 name_3352 42 52 +3353 name_3353 43 53 +3354 name_3354 44 54 +3355 name_3355 45 55 +3356 name_3356 46 56 +3357 name_3357 47 57 +3358 name_3358 48 58 +3359 name_3359 49 59 +3366 name_3366 26 66 +3367 name_3367 27 67 +3368 name_3368 28 68 +3369 name_3369 29 69 +3370 name_3370 30 70 +3371 name_3371 31 71 +3372 name_3372 32 72 +3373 name_3373 33 73 +3374 name_3374 34 74 +3375 name_3375 35 75 +3376 name_3376 36 76 +3377 name_3377 37 77 +3378 name_3378 38 78 +3379 name_3379 39 79 +3380 name_3380 40 80 +3381 name_3381 41 81 +3382 name_3382 42 82 +3383 name_3383 43 83 +3384 name_3384 44 84 +3385 name_3385 45 85 +3386 name_3386 46 86 +3387 name_3387 47 87 +3388 name_3388 48 88 +3389 name_3389 49 89 +3396 name_3396 26 96 +3397 name_3397 27 97 +3398 name_3398 28 98 +3399 name_3399 29 99 +3400 name_3400 30 50 +3401 name_3401 31 51 +3402 name_3402 32 52 +3403 name_3403 33 53 +3404 name_3404 34 54 +3405 name_3405 35 55 +3406 name_3406 36 56 +3407 name_3407 37 57 +3408 name_3408 38 58 +3409 name_3409 39 59 +3410 name_3410 40 60 +3411 name_3411 41 61 +3412 name_3412 42 62 +3413 name_3413 43 63 +3414 name_3414 44 64 +3415 name_3415 45 65 +3416 name_3416 46 66 +3417 name_3417 47 67 +3418 name_3418 48 68 +3419 name_3419 49 69 +3426 name_3426 26 76 +3427 name_3427 27 77 +3428 name_3428 28 78 +3429 name_3429 29 79 +3430 name_3430 30 80 +3431 name_3431 31 81 +3432 name_3432 32 82 +3433 name_3433 33 83 +3434 name_3434 34 84 +3435 name_3435 35 85 +3436 name_3436 36 86 +3437 name_3437 37 87 +3438 name_3438 38 88 +3439 name_3439 39 89 +3440 name_3440 40 90 +3441 name_3441 41 91 +3442 name_3442 42 92 +3443 name_3443 43 93 +3444 name_3444 44 94 +3445 name_3445 45 95 +3446 name_3446 46 96 +3447 name_3447 47 97 +3448 name_3448 48 98 +3449 name_3449 49 99 +3456 name_3456 26 56 +3457 name_3457 27 57 +3458 name_3458 28 58 +3459 name_3459 29 59 +3460 name_3460 30 60 +3461 name_3461 31 61 +3462 name_3462 32 62 +3463 name_3463 33 63 +3464 name_3464 34 64 +3465 name_3465 35 65 +3466 name_3466 36 66 +3467 name_3467 37 67 +3468 name_3468 38 68 +3469 name_3469 39 69 +3470 name_3470 40 70 +3471 name_3471 41 71 +3472 name_3472 42 72 +3473 name_3473 43 73 +3474 name_3474 44 74 +3475 name_3475 45 75 +3476 name_3476 46 76 +3477 name_3477 47 77 +3478 name_3478 48 78 +3479 name_3479 49 79 +3486 name_3486 26 86 +3487 name_3487 27 87 +3488 name_3488 28 88 +3489 name_3489 29 89 +3490 name_3490 30 90 +3491 name_3491 31 91 +3492 name_3492 32 92 +3493 name_3493 33 93 +3494 name_3494 34 94 +3495 name_3495 35 95 +3496 name_3496 36 96 +3497 name_3497 37 97 +3498 name_3498 38 98 +3499 name_3499 39 99 +3500 name_3500 40 50 +3501 name_3501 41 51 +3502 name_3502 42 52 +3503 name_3503 43 53 +3504 name_3504 44 54 +3505 name_3505 45 55 +3506 name_3506 46 56 +3507 name_3507 47 57 +3508 name_3508 48 58 +3509 name_3509 49 59 +3516 name_3516 26 66 +3517 name_3517 27 67 +3518 name_3518 28 68 +3519 name_3519 29 69 +3520 name_3520 30 70 +3521 name_3521 31 71 +3522 name_3522 32 72 +3523 name_3523 33 73 +3524 name_3524 34 74 +3525 name_3525 35 75 +3526 name_3526 36 76 +3527 name_3527 37 77 +3528 name_3528 38 78 +3529 name_3529 39 79 +3530 name_3530 40 80 +3531 name_3531 41 81 +3532 name_3532 42 82 +3533 name_3533 43 83 +3534 name_3534 44 84 +3535 name_3535 45 85 +3536 name_3536 46 86 +3537 name_3537 47 87 +3538 name_3538 48 88 +3539 name_3539 49 89 +3546 name_3546 26 96 +3547 name_3547 27 97 +3548 name_3548 28 98 +3549 name_3549 29 99 +3550 name_3550 30 50 +3551 name_3551 31 51 +3552 name_3552 32 52 +3553 name_3553 33 53 +3554 name_3554 34 54 +3555 name_3555 35 55 +3556 name_3556 36 56 +3557 name_3557 37 57 +3558 name_3558 38 58 +3559 name_3559 39 59 +3560 name_3560 40 60 +3561 name_3561 41 61 +3562 name_3562 42 62 +3563 name_3563 43 63 +3564 name_3564 44 64 +3565 name_3565 45 65 +3566 name_3566 46 66 +3567 name_3567 47 67 +3568 name_3568 48 68 +3569 name_3569 49 69 +3576 name_3576 26 76 +3577 name_3577 27 77 +3578 name_3578 28 78 +3579 name_3579 29 79 +3580 name_3580 30 80 +3581 name_3581 31 81 +3582 name_3582 32 82 +3583 name_3583 33 83 +3584 name_3584 34 84 +3585 name_3585 35 85 +3586 name_3586 36 86 +3587 name_3587 37 87 +3588 name_3588 38 88 +3589 name_3589 39 89 +3590 name_3590 40 90 +3591 name_3591 41 91 +3592 name_3592 42 92 +3593 name_3593 43 93 +3594 name_3594 44 94 +3595 name_3595 45 95 +3596 name_3596 46 96 +3597 name_3597 47 97 +3598 name_3598 48 98 +3599 name_3599 49 99 +3606 name_3606 26 56 +3607 name_3607 27 57 +3608 name_3608 28 58 +3609 name_3609 29 59 +3610 name_3610 30 60 +3611 name_3611 31 61 +3612 name_3612 32 62 +3613 name_3613 33 63 +3614 name_3614 34 64 +3615 name_3615 35 65 +3616 name_3616 36 66 +3617 name_3617 37 67 +3618 name_3618 38 68 +3619 name_3619 39 69 +3620 name_3620 40 70 +3621 name_3621 41 71 +3622 name_3622 42 72 +3623 name_3623 43 73 +3624 name_3624 44 74 +3625 name_3625 45 75 +3626 name_3626 46 76 +3627 name_3627 47 77 +3628 name_3628 48 78 +3629 name_3629 49 79 +3636 name_3636 26 86 +3637 name_3637 27 87 +3638 name_3638 28 88 +3639 name_3639 29 89 +3640 name_3640 30 90 +3641 name_3641 31 91 +3642 name_3642 32 92 +3643 name_3643 33 93 +3644 name_3644 34 94 +3645 name_3645 35 95 +3646 name_3646 36 96 +3647 name_3647 37 97 +3648 name_3648 38 98 +3649 name_3649 39 99 +3650 name_3650 40 50 +3651 name_3651 41 51 +3652 name_3652 42 52 +3653 name_3653 43 53 +3654 name_3654 44 54 +3655 name_3655 45 55 +3656 name_3656 46 56 +3657 name_3657 47 57 +3658 name_3658 48 58 +3659 name_3659 49 59 +3666 name_3666 26 66 +3667 name_3667 27 67 +3668 name_3668 28 68 +3669 name_3669 29 69 +3670 name_3670 30 70 +3671 name_3671 31 71 +3672 name_3672 32 72 +3673 name_3673 33 73 +3674 name_3674 34 74 +3675 name_3675 35 75 +3676 name_3676 36 76 +3677 name_3677 37 77 +3678 name_3678 38 78 +3679 name_3679 39 79 +3680 name_3680 40 80 +3681 name_3681 41 81 +3682 name_3682 42 82 +3683 name_3683 43 83 +3684 name_3684 44 84 +3685 name_3685 45 85 +3686 name_3686 46 86 +3687 name_3687 47 87 +3688 name_3688 48 88 +3689 name_3689 49 89 +3696 name_3696 26 96 +3697 name_3697 27 97 +3698 name_3698 28 98 +3699 name_3699 29 99 +3700 name_3700 30 50 +3701 name_3701 31 51 +3702 name_3702 32 52 +3703 name_3703 33 53 +3704 name_3704 34 54 +3705 name_3705 35 55 +3706 name_3706 36 56 +3707 name_3707 37 57 +3708 name_3708 38 58 +3709 name_3709 39 59 +3710 name_3710 40 60 +3711 name_3711 41 61 +3712 name_3712 42 62 +3713 name_3713 43 63 +3714 name_3714 44 64 +3715 name_3715 45 65 +3716 name_3716 46 66 +3717 name_3717 47 67 +3718 name_3718 48 68 +3719 name_3719 49 69 +3726 name_3726 26 76 +3727 name_3727 27 77 +3728 name_3728 28 78 +3729 name_3729 29 79 +3730 name_3730 30 80 +3731 name_3731 31 81 +3732 name_3732 32 82 +3733 name_3733 33 83 +3734 name_3734 34 84 +3735 name_3735 35 85 +3736 name_3736 36 86 +3737 name_3737 37 87 +3738 name_3738 38 88 +3739 name_3739 39 89 +3740 name_3740 40 90 +3741 name_3741 41 91 +3742 name_3742 42 92 +3743 name_3743 43 93 +3744 name_3744 44 94 +3745 name_3745 45 95 +3746 name_3746 46 96 +3747 name_3747 47 97 +3748 name_3748 48 98 +3749 name_3749 49 99 +3756 name_3756 26 56 +3757 name_3757 27 57 +3758 name_3758 28 58 +3759 name_3759 29 59 +3760 name_3760 30 60 +3761 name_3761 31 61 +3762 name_3762 32 62 +3763 name_3763 33 63 +3764 name_3764 34 64 +3765 name_3765 35 65 +3766 name_3766 36 66 +3767 name_3767 37 67 +3768 name_3768 38 68 +3769 name_3769 39 69 +3770 name_3770 40 70 +3771 name_3771 41 71 +3772 name_3772 42 72 +3773 name_3773 43 73 +3774 name_3774 44 74 +3775 name_3775 45 75 +3776 name_3776 46 76 +3777 name_3777 47 77 +3778 name_3778 48 78 +3779 name_3779 49 79 +3786 name_3786 26 86 +3787 name_3787 27 87 +3788 name_3788 28 88 +3789 name_3789 29 89 +3790 name_3790 30 90 +3791 name_3791 31 91 +3792 name_3792 32 92 +3793 name_3793 33 93 +3794 name_3794 34 94 +3795 name_3795 35 95 +3796 name_3796 36 96 +3797 name_3797 37 97 +3798 name_3798 38 98 +3799 name_3799 39 99 +3800 name_3800 40 50 +3801 name_3801 41 51 +3802 name_3802 42 52 +3803 name_3803 43 53 +3804 name_3804 44 54 +3805 name_3805 45 55 +3806 name_3806 46 56 +3807 name_3807 47 57 +3808 name_3808 48 58 +3809 name_3809 49 59 +3816 name_3816 26 66 +3817 name_3817 27 67 +3818 name_3818 28 68 +3819 name_3819 29 69 +3820 name_3820 30 70 +3821 name_3821 31 71 +3822 name_3822 32 72 +3823 name_3823 33 73 +3824 name_3824 34 74 +3825 name_3825 35 75 +3826 name_3826 36 76 +3827 name_3827 37 77 +3828 name_3828 38 78 +3829 name_3829 39 79 +3830 name_3830 40 80 +3831 name_3831 41 81 +3832 name_3832 42 82 +3833 name_3833 43 83 +3834 name_3834 44 84 +3835 name_3835 45 85 +3836 name_3836 46 86 +3837 name_3837 47 87 +3838 name_3838 48 88 +3839 name_3839 49 89 +3846 name_3846 26 96 +3847 name_3847 27 97 +3848 name_3848 28 98 +3849 name_3849 29 99 +3850 name_3850 30 50 +3851 name_3851 31 51 +3852 name_3852 32 52 +3853 name_3853 33 53 +3854 name_3854 34 54 +3855 name_3855 35 55 +3856 name_3856 36 56 +3857 name_3857 37 57 +3858 name_3858 38 58 +3859 name_3859 39 59 +3860 name_3860 40 60 +3861 name_3861 41 61 +3862 name_3862 42 62 +3863 name_3863 43 63 +3864 name_3864 44 64 +3865 name_3865 45 65 +3866 name_3866 46 66 +3867 name_3867 47 67 +3868 name_3868 48 68 +3869 name_3869 49 69 +3876 name_3876 26 76 +3877 name_3877 27 77 +3878 name_3878 28 78 +3879 name_3879 29 79 +3880 name_3880 30 80 +3881 name_3881 31 81 +3882 name_3882 32 82 +3883 name_3883 33 83 +3884 name_3884 34 84 +3885 name_3885 35 85 +3886 name_3886 36 86 +3887 name_3887 37 87 +3888 name_3888 38 88 +3889 name_3889 39 89 +3890 name_3890 40 90 +3891 name_3891 41 91 +3892 name_3892 42 92 +3893 name_3893 43 93 +3894 name_3894 44 94 +3895 name_3895 45 95 +3896 name_3896 46 96 +3897 name_3897 47 97 +3898 name_3898 48 98 +3899 name_3899 49 99 +3906 name_3906 26 56 +3907 name_3907 27 57 +3908 name_3908 28 58 +3909 name_3909 29 59 +3910 name_3910 30 60 +3911 name_3911 31 61 +3912 name_3912 32 62 +3913 name_3913 33 63 +3914 name_3914 34 64 +3915 name_3915 35 65 +3916 name_3916 36 66 +3917 name_3917 37 67 +3918 name_3918 38 68 +3919 name_3919 39 69 +3920 name_3920 40 70 +3921 name_3921 41 71 +3922 name_3922 42 72 +3923 name_3923 43 73 +3924 name_3924 44 74 +3925 name_3925 45 75 +3926 name_3926 46 76 +3927 name_3927 47 77 +3928 name_3928 48 78 +3929 name_3929 49 79 +3936 name_3936 26 86 +3937 name_3937 27 87 +3938 name_3938 28 88 +3939 name_3939 29 89 +3940 name_3940 30 90 +3941 name_3941 31 91 +3942 name_3942 32 92 +3943 name_3943 33 93 +3944 name_3944 34 94 +3945 name_3945 35 95 +3946 name_3946 36 96 +3947 name_3947 37 97 +3948 name_3948 38 98 +3949 name_3949 39 99 +3950 name_3950 40 50 +3951 name_3951 41 51 +3952 name_3952 42 52 +3953 name_3953 43 53 +3954 name_3954 44 54 +3955 name_3955 45 55 +3956 name_3956 46 56 +3957 name_3957 47 57 +3958 name_3958 48 58 +3959 name_3959 49 59 +3966 name_3966 26 66 +3967 name_3967 27 67 +3968 name_3968 28 68 +3969 name_3969 29 69 +3970 name_3970 30 70 +3971 name_3971 31 71 +3972 name_3972 32 72 +3973 name_3973 33 73 +3974 name_3974 34 74 +3975 name_3975 35 75 +3976 name_3976 36 76 +3977 name_3977 37 77 +3978 name_3978 38 78 +3979 name_3979 39 79 +3980 name_3980 40 80 +3981 name_3981 41 81 +3982 name_3982 42 82 +3983 name_3983 43 83 +3984 name_3984 44 84 +3985 name_3985 45 85 +3986 name_3986 46 86 +3987 name_3987 47 87 +3988 name_3988 48 88 +3989 name_3989 49 89 +3996 name_3996 26 96 +3997 name_3997 27 97 +3998 name_3998 28 98 +3999 name_3999 29 99 +4000 name_4000 30 50 +4001 name_4001 31 51 +4002 name_4002 32 52 +4003 name_4003 33 53 +4004 name_4004 34 54 +4005 name_4005 35 55 +4006 name_4006 36 56 +4007 name_4007 37 57 +4008 name_4008 38 58 +4009 name_4009 39 59 +4010 name_4010 40 60 +4011 name_4011 41 61 +4012 name_4012 42 62 +4013 name_4013 43 63 +4014 name_4014 44 64 +4015 name_4015 45 65 +4016 name_4016 46 66 +4017 name_4017 47 67 +4018 name_4018 48 68 +4019 name_4019 49 69 +4026 name_4026 26 76 +4027 name_4027 27 77 +4028 name_4028 28 78 +4029 name_4029 29 79 +4030 name_4030 30 80 +4031 name_4031 31 81 +4032 name_4032 32 82 +4033 name_4033 33 83 +4034 name_4034 34 84 +4035 name_4035 35 85 +4036 name_4036 36 86 +4037 name_4037 37 87 +4038 name_4038 38 88 +4039 name_4039 39 89 +4040 name_4040 40 90 +4041 name_4041 41 91 +4042 name_4042 42 92 +4043 name_4043 43 93 +4044 name_4044 44 94 +4045 name_4045 45 95 +4046 name_4046 46 96 +4047 name_4047 47 97 +4048 name_4048 48 98 +4049 name_4049 49 99 +4056 name_4056 26 56 +4057 name_4057 27 57 +4058 name_4058 28 58 +4059 name_4059 29 59 +4060 name_4060 30 60 +4061 name_4061 31 61 +4062 name_4062 32 62 +4063 name_4063 33 63 +4064 name_4064 34 64 +4065 name_4065 35 65 +4066 name_4066 36 66 +4067 name_4067 37 67 +4068 name_4068 38 68 +4069 name_4069 39 69 +4070 name_4070 40 70 +4071 name_4071 41 71 +4072 name_4072 42 72 +4073 name_4073 43 73 +4074 name_4074 44 74 +4075 name_4075 45 75 +4076 name_4076 46 76 +4077 name_4077 47 77 +4078 name_4078 48 78 +4079 name_4079 49 79 +4086 name_4086 26 86 +4087 name_4087 27 87 +4088 name_4088 28 88 +4089 name_4089 29 89 +4090 name_4090 30 90 +4091 name_4091 31 91 +4092 name_4092 32 92 +4093 name_4093 33 93 +4094 name_4094 34 94 +4095 name_4095 35 95 +4096 name_4096 36 96 +4097 name_4097 37 97 +4098 name_4098 38 98 +4099 name_4099 39 99 +4100 name_4100 40 50 +4101 name_4101 41 51 +4102 name_4102 42 52 +4103 name_4103 43 53 +4104 name_4104 44 54 +4105 name_4105 45 55 +4106 name_4106 46 56 +4107 name_4107 47 57 +4108 name_4108 48 58 +4109 name_4109 49 59 +4116 name_4116 26 66 +4117 name_4117 27 67 +4118 name_4118 28 68 +4119 name_4119 29 69 +4120 name_4120 30 70 +4121 name_4121 31 71 +4122 name_4122 32 72 +4123 name_4123 33 73 +4124 name_4124 34 74 +4125 name_4125 35 75 +4126 name_4126 36 76 +4127 name_4127 37 77 +4128 name_4128 38 78 +4129 name_4129 39 79 +4130 name_4130 40 80 +4131 name_4131 41 81 +4132 name_4132 42 82 +4133 name_4133 43 83 +4134 name_4134 44 84 +4135 name_4135 45 85 +4136 name_4136 46 86 +4137 name_4137 47 87 +4138 name_4138 48 88 +4139 name_4139 49 89 +4146 name_4146 26 96 +4147 name_4147 27 97 +4148 name_4148 28 98 +4149 name_4149 29 99 +4150 name_4150 30 50 +4151 name_4151 31 51 +4152 name_4152 32 52 +4153 name_4153 33 53 +4154 name_4154 34 54 +4155 name_4155 35 55 +4156 name_4156 36 56 +4157 name_4157 37 57 +4158 name_4158 38 58 +4159 name_4159 39 59 +4160 name_4160 40 60 +4161 name_4161 41 61 +4162 name_4162 42 62 +4163 name_4163 43 63 +4164 name_4164 44 64 +4165 name_4165 45 65 +4166 name_4166 46 66 +4167 name_4167 47 67 +4168 name_4168 48 68 +4169 name_4169 49 69 +4176 name_4176 26 76 +4177 name_4177 27 77 +4178 name_4178 28 78 +4179 name_4179 29 79 +4180 name_4180 30 80 +4181 name_4181 31 81 +4182 name_4182 32 82 +4183 name_4183 33 83 +4184 name_4184 34 84 +4185 name_4185 35 85 +4186 name_4186 36 86 +4187 name_4187 37 87 +4188 name_4188 38 88 +4189 name_4189 39 89 +4190 name_4190 40 90 +4191 name_4191 41 91 +4192 name_4192 42 92 +4193 name_4193 43 93 +4194 name_4194 44 94 +4195 name_4195 45 95 +4196 name_4196 46 96 +4197 name_4197 47 97 +4198 name_4198 48 98 +4199 name_4199 49 99 +4206 name_4206 26 56 +4207 name_4207 27 57 +4208 name_4208 28 58 +4209 name_4209 29 59 +4210 name_4210 30 60 +4211 name_4211 31 61 +4212 name_4212 32 62 +4213 name_4213 33 63 +4214 name_4214 34 64 +4215 name_4215 35 65 +4216 name_4216 36 66 +4217 name_4217 37 67 +4218 name_4218 38 68 +4219 name_4219 39 69 +4220 name_4220 40 70 +4221 name_4221 41 71 +4222 name_4222 42 72 +4223 name_4223 43 73 +4224 name_4224 44 74 +4225 name_4225 45 75 +4226 name_4226 46 76 +4227 name_4227 47 77 +4228 name_4228 48 78 +4229 name_4229 49 79 +4236 name_4236 26 86 +4237 name_4237 27 87 +4238 name_4238 28 88 +4239 name_4239 29 89 +4240 name_4240 30 90 +4241 name_4241 31 91 +4242 name_4242 32 92 +4243 name_4243 33 93 +4244 name_4244 34 94 +4245 name_4245 35 95 +4246 name_4246 36 96 +4247 name_4247 37 97 +4248 name_4248 38 98 +4249 name_4249 39 99 +4250 name_4250 40 50 +4251 name_4251 41 51 +4252 name_4252 42 52 +4253 name_4253 43 53 +4254 name_4254 44 54 +4255 name_4255 45 55 +4256 name_4256 46 56 +4257 name_4257 47 57 +4258 name_4258 48 58 +4259 name_4259 49 59 +4266 name_4266 26 66 +4267 name_4267 27 67 +4268 name_4268 28 68 +4269 name_4269 29 69 +4270 name_4270 30 70 +4271 name_4271 31 71 +4272 name_4272 32 72 +4273 name_4273 33 73 +4274 name_4274 34 74 +4275 name_4275 35 75 +4276 name_4276 36 76 +4277 name_4277 37 77 +4278 name_4278 38 78 +4279 name_4279 39 79 +4280 name_4280 40 80 +4281 name_4281 41 81 +4282 name_4282 42 82 +4283 name_4283 43 83 +4284 name_4284 44 84 +4285 name_4285 45 85 +4286 name_4286 46 86 +4287 name_4287 47 87 +4288 name_4288 48 88 +4289 name_4289 49 89 +4296 name_4296 26 96 +4297 name_4297 27 97 +4298 name_4298 28 98 +4299 name_4299 29 99 +4300 name_4300 30 50 +4301 name_4301 31 51 +4302 name_4302 32 52 +4303 name_4303 33 53 +4304 name_4304 34 54 +4305 name_4305 35 55 +4306 name_4306 36 56 +4307 name_4307 37 57 +4308 name_4308 38 58 +4309 name_4309 39 59 +4310 name_4310 40 60 +4311 name_4311 41 61 +4312 name_4312 42 62 +4313 name_4313 43 63 +4314 name_4314 44 64 +4315 name_4315 45 65 +4316 name_4316 46 66 +4317 name_4317 47 67 +4318 name_4318 48 68 +4319 name_4319 49 69 +4326 name_4326 26 76 +4327 name_4327 27 77 +4328 name_4328 28 78 +4329 name_4329 29 79 +4330 name_4330 30 80 +4331 name_4331 31 81 +4332 name_4332 32 82 +4333 name_4333 33 83 +4334 name_4334 34 84 +4335 name_4335 35 85 +4336 name_4336 36 86 +4337 name_4337 37 87 +4338 name_4338 38 88 +4339 name_4339 39 89 +4340 name_4340 40 90 +4341 name_4341 41 91 +4342 name_4342 42 92 +4343 name_4343 43 93 +4344 name_4344 44 94 +4345 name_4345 45 95 +4346 name_4346 46 96 +4347 name_4347 47 97 +4348 name_4348 48 98 +4349 name_4349 49 99 +4356 name_4356 26 56 +4357 name_4357 27 57 +4358 name_4358 28 58 +4359 name_4359 29 59 +4360 name_4360 30 60 +4361 name_4361 31 61 +4362 name_4362 32 62 +4363 name_4363 33 63 +4364 name_4364 34 64 +4365 name_4365 35 65 +4366 name_4366 36 66 +4367 name_4367 37 67 +4368 name_4368 38 68 +4369 name_4369 39 69 +4370 name_4370 40 70 +4371 name_4371 41 71 +4372 name_4372 42 72 +4373 name_4373 43 73 +4374 name_4374 44 74 +4375 name_4375 45 75 +4376 name_4376 46 76 +4377 name_4377 47 77 +4378 name_4378 48 78 +4379 name_4379 49 79 +4386 name_4386 26 86 +4387 name_4387 27 87 +4388 name_4388 28 88 +4389 name_4389 29 89 +4390 name_4390 30 90 +4391 name_4391 31 91 +4392 name_4392 32 92 +4393 name_4393 33 93 +4394 name_4394 34 94 +4395 name_4395 35 95 +4396 name_4396 36 96 +4397 name_4397 37 97 +4398 name_4398 38 98 +4399 name_4399 39 99 +4400 name_4400 40 50 +4401 name_4401 41 51 +4402 name_4402 42 52 +4403 name_4403 43 53 +4404 name_4404 44 54 +4405 name_4405 45 55 +4406 name_4406 46 56 +4407 name_4407 47 57 +4408 name_4408 48 58 +4409 name_4409 49 59 +4416 name_4416 26 66 +4417 name_4417 27 67 +4418 name_4418 28 68 +4419 name_4419 29 69 +4420 name_4420 30 70 +4421 name_4421 31 71 +4422 name_4422 32 72 +4423 name_4423 33 73 +4424 name_4424 34 74 +4425 name_4425 35 75 +4426 name_4426 36 76 +4427 name_4427 37 77 +4428 name_4428 38 78 +4429 name_4429 39 79 +4430 name_4430 40 80 +4431 name_4431 41 81 +4432 name_4432 42 82 +4433 name_4433 43 83 +4434 name_4434 44 84 +4435 name_4435 45 85 +4436 name_4436 46 86 +4437 name_4437 47 87 +4438 name_4438 48 88 +4439 name_4439 49 89 +4446 name_4446 26 96 +4447 name_4447 27 97 +4448 name_4448 28 98 +4449 name_4449 29 99 +4450 name_4450 30 50 +4451 name_4451 31 51 +4452 name_4452 32 52 +4453 name_4453 33 53 +4454 name_4454 34 54 +4455 name_4455 35 55 +4456 name_4456 36 56 +4457 name_4457 37 57 +4458 name_4458 38 58 +4459 name_4459 39 59 +4460 name_4460 40 60 +4461 name_4461 41 61 +4462 name_4462 42 62 +4463 name_4463 43 63 +4464 name_4464 44 64 +4465 name_4465 45 65 +4466 name_4466 46 66 +4467 name_4467 47 67 +4468 name_4468 48 68 +4469 name_4469 49 69 +4476 name_4476 26 76 +4477 name_4477 27 77 +4478 name_4478 28 78 +4479 name_4479 29 79 +4480 name_4480 30 80 +4481 name_4481 31 81 +4482 name_4482 32 82 +4483 name_4483 33 83 +4484 name_4484 34 84 +4485 name_4485 35 85 +4486 name_4486 36 86 +4487 name_4487 37 87 +4488 name_4488 38 88 +4489 name_4489 39 89 +4490 name_4490 40 90 +4491 name_4491 41 91 +4492 name_4492 42 92 +4493 name_4493 43 93 +4494 name_4494 44 94 +4495 name_4495 45 95 +4496 name_4496 46 96 +4497 name_4497 47 97 +4498 name_4498 48 98 +4499 name_4499 49 99 +4506 name_4506 26 56 +4507 name_4507 27 57 +4508 name_4508 28 58 +4509 name_4509 29 59 +4510 name_4510 30 60 +4511 name_4511 31 61 +4512 name_4512 32 62 +4513 name_4513 33 63 +4514 name_4514 34 64 +4515 name_4515 35 65 +4516 name_4516 36 66 +4517 name_4517 37 67 +4518 name_4518 38 68 +4519 name_4519 39 69 +4520 name_4520 40 70 +4521 name_4521 41 71 +4522 name_4522 42 72 +4523 name_4523 43 73 +4524 name_4524 44 74 +4525 name_4525 45 75 +4526 name_4526 46 76 +4527 name_4527 47 77 +4528 name_4528 48 78 +4529 name_4529 49 79 +4536 name_4536 26 86 +4537 name_4537 27 87 +4538 name_4538 28 88 +4539 name_4539 29 89 +4540 name_4540 30 90 +4541 name_4541 31 91 +4542 name_4542 32 92 +4543 name_4543 33 93 +4544 name_4544 34 94 +4545 name_4545 35 95 +4546 name_4546 36 96 +4547 name_4547 37 97 +4548 name_4548 38 98 +4549 name_4549 39 99 +4550 name_4550 40 50 +4551 name_4551 41 51 +4552 name_4552 42 52 +4553 name_4553 43 53 +4554 name_4554 44 54 +4555 name_4555 45 55 +4556 name_4556 46 56 +4557 name_4557 47 57 +4558 name_4558 48 58 +4559 name_4559 49 59 +4566 name_4566 26 66 +4567 name_4567 27 67 +4568 name_4568 28 68 +4569 name_4569 29 69 +4570 name_4570 30 70 +4571 name_4571 31 71 +4572 name_4572 32 72 +4573 name_4573 33 73 +4574 name_4574 34 74 +4575 name_4575 35 75 +4576 name_4576 36 76 +4577 name_4577 37 77 +4578 name_4578 38 78 +4579 name_4579 39 79 +4580 name_4580 40 80 +4581 name_4581 41 81 +4582 name_4582 42 82 +4583 name_4583 43 83 +4584 name_4584 44 84 +4585 name_4585 45 85 +4586 name_4586 46 86 +4587 name_4587 47 87 +4588 name_4588 48 88 +4589 name_4589 49 89 +4596 name_4596 26 96 +4597 name_4597 27 97 +4598 name_4598 28 98 +4599 name_4599 29 99 +4600 name_4600 30 50 +4601 name_4601 31 51 +4602 name_4602 32 52 +4603 name_4603 33 53 +4604 name_4604 34 54 +4605 name_4605 35 55 +4606 name_4606 36 56 +4607 name_4607 37 57 +4608 name_4608 38 58 +4609 name_4609 39 59 +4610 name_4610 40 60 +4611 name_4611 41 61 +4612 name_4612 42 62 +4613 name_4613 43 63 +4614 name_4614 44 64 +4615 name_4615 45 65 +4616 name_4616 46 66 +4617 name_4617 47 67 +4618 name_4618 48 68 +4619 name_4619 49 69 +4626 name_4626 26 76 +4627 name_4627 27 77 +4628 name_4628 28 78 +4629 name_4629 29 79 +4630 name_4630 30 80 +4631 name_4631 31 81 +4632 name_4632 32 82 +4633 name_4633 33 83 +4634 name_4634 34 84 +4635 name_4635 35 85 +4636 name_4636 36 86 +4637 name_4637 37 87 +4638 name_4638 38 88 +4639 name_4639 39 89 +4640 name_4640 40 90 +4641 name_4641 41 91 +4642 name_4642 42 92 +4643 name_4643 43 93 +4644 name_4644 44 94 +4645 name_4645 45 95 +4646 name_4646 46 96 +4647 name_4647 47 97 +4648 name_4648 48 98 +4649 name_4649 49 99 +4656 name_4656 26 56 +4657 name_4657 27 57 +4658 name_4658 28 58 +4659 name_4659 29 59 +4660 name_4660 30 60 +4661 name_4661 31 61 +4662 name_4662 32 62 +4663 name_4663 33 63 +4664 name_4664 34 64 +4665 name_4665 35 65 +4666 name_4666 36 66 +4667 name_4667 37 67 +4668 name_4668 38 68 +4669 name_4669 39 69 +4670 name_4670 40 70 +4671 name_4671 41 71 +4672 name_4672 42 72 +4673 name_4673 43 73 +4674 name_4674 44 74 +4675 name_4675 45 75 +4676 name_4676 46 76 +4677 name_4677 47 77 +4678 name_4678 48 78 +4679 name_4679 49 79 +4686 name_4686 26 86 +4687 name_4687 27 87 +4688 name_4688 28 88 +4689 name_4689 29 89 +4690 name_4690 30 90 +4691 name_4691 31 91 +4692 name_4692 32 92 +4693 name_4693 33 93 +4694 name_4694 34 94 +4695 name_4695 35 95 +4696 name_4696 36 96 +4697 name_4697 37 97 +4698 name_4698 38 98 +4699 name_4699 39 99 +4700 name_4700 40 50 +4701 name_4701 41 51 +4702 name_4702 42 52 +4703 name_4703 43 53 +4704 name_4704 44 54 +4705 name_4705 45 55 +4706 name_4706 46 56 +4707 name_4707 47 57 +4708 name_4708 48 58 +4709 name_4709 49 59 +4716 name_4716 26 66 +4717 name_4717 27 67 +4718 name_4718 28 68 +4719 name_4719 29 69 +4720 name_4720 30 70 +4721 name_4721 31 71 +4722 name_4722 32 72 +4723 name_4723 33 73 +4724 name_4724 34 74 +4725 name_4725 35 75 +4726 name_4726 36 76 +4727 name_4727 37 77 +4728 name_4728 38 78 +4729 name_4729 39 79 +4730 name_4730 40 80 +4731 name_4731 41 81 +4732 name_4732 42 82 +4733 name_4733 43 83 +4734 name_4734 44 84 +4735 name_4735 45 85 +4736 name_4736 46 86 +4737 name_4737 47 87 +4738 name_4738 48 88 +4739 name_4739 49 89 +4746 name_4746 26 96 +4747 name_4747 27 97 +4748 name_4748 28 98 +4749 name_4749 29 99 +4750 name_4750 30 50 +4751 name_4751 31 51 +4752 name_4752 32 52 +4753 name_4753 33 53 +4754 name_4754 34 54 +4755 name_4755 35 55 +4756 name_4756 36 56 +4757 name_4757 37 57 +4758 name_4758 38 58 +4759 name_4759 39 59 +4760 name_4760 40 60 +4761 name_4761 41 61 +4762 name_4762 42 62 +4763 name_4763 43 63 +4764 name_4764 44 64 +4765 name_4765 45 65 +4766 name_4766 46 66 +4767 name_4767 47 67 +4768 name_4768 48 68 +4769 name_4769 49 69 +4776 name_4776 26 76 +4777 name_4777 27 77 +4778 name_4778 28 78 +4779 name_4779 29 79 +4780 name_4780 30 80 +4781 name_4781 31 81 +4782 name_4782 32 82 +4783 name_4783 33 83 +4784 name_4784 34 84 +4785 name_4785 35 85 +4786 name_4786 36 86 +4787 name_4787 37 87 +4788 name_4788 38 88 +4789 name_4789 39 89 +4790 name_4790 40 90 +4791 name_4791 41 91 +4792 name_4792 42 92 +4793 name_4793 43 93 +4794 name_4794 44 94 +4795 name_4795 45 95 +4796 name_4796 46 96 +4797 name_4797 47 97 +4798 name_4798 48 98 +4799 name_4799 49 99 +4806 name_4806 26 56 +4807 name_4807 27 57 +4808 name_4808 28 58 +4809 name_4809 29 59 +4810 name_4810 30 60 +4811 name_4811 31 61 +4812 name_4812 32 62 +4813 name_4813 33 63 +4814 name_4814 34 64 +4815 name_4815 35 65 +4816 name_4816 36 66 +4817 name_4817 37 67 +4818 name_4818 38 68 +4819 name_4819 39 69 +4820 name_4820 40 70 +4821 name_4821 41 71 +4822 name_4822 42 72 +4823 name_4823 43 73 +4824 name_4824 44 74 +4825 name_4825 45 75 +4826 name_4826 46 76 +4827 name_4827 47 77 +4828 name_4828 48 78 +4829 name_4829 49 79 +4836 name_4836 26 86 +4837 name_4837 27 87 +4838 name_4838 28 88 +4839 name_4839 29 89 +4840 name_4840 30 90 +4841 name_4841 31 91 +4842 name_4842 32 92 +4843 name_4843 33 93 +4844 name_4844 34 94 +4845 name_4845 35 95 +4846 name_4846 36 96 +4847 name_4847 37 97 +4848 name_4848 38 98 +4849 name_4849 39 99 +4850 name_4850 40 50 +4851 name_4851 41 51 +4852 name_4852 42 52 +4853 name_4853 43 53 +4854 name_4854 44 54 +4855 name_4855 45 55 +4856 name_4856 46 56 +4857 name_4857 47 57 +4858 name_4858 48 58 +4859 name_4859 49 59 +4866 name_4866 26 66 +4867 name_4867 27 67 +4868 name_4868 28 68 +4869 name_4869 29 69 +4870 name_4870 30 70 +4871 name_4871 31 71 +4872 name_4872 32 72 +4873 name_4873 33 73 +4874 name_4874 34 74 +4875 name_4875 35 75 +4876 name_4876 36 76 +4877 name_4877 37 77 +4878 name_4878 38 78 +4879 name_4879 39 79 +4880 name_4880 40 80 +4881 name_4881 41 81 +4882 name_4882 42 82 +4883 name_4883 43 83 +4884 name_4884 44 84 +4885 name_4885 45 85 +4886 name_4886 46 86 +4887 name_4887 47 87 +4888 name_4888 48 88 +4889 name_4889 49 89 +4896 name_4896 26 96 +4897 name_4897 27 97 +4898 name_4898 28 98 +4899 name_4899 29 99 +4900 name_4900 30 50 +4901 name_4901 31 51 +4902 name_4902 32 52 +4903 name_4903 33 53 +4904 name_4904 34 54 +4905 name_4905 35 55 +4906 name_4906 36 56 +4907 name_4907 37 57 +4908 name_4908 38 58 +4909 name_4909 39 59 +4910 name_4910 40 60 +4911 name_4911 41 61 +4912 name_4912 42 62 +4913 name_4913 43 63 +4914 name_4914 44 64 +4915 name_4915 45 65 +4916 name_4916 46 66 +4917 name_4917 47 67 +4918 name_4918 48 68 +4919 name_4919 49 69 +4926 name_4926 26 76 +4927 name_4927 27 77 +4928 name_4928 28 78 +4929 name_4929 29 79 +4930 name_4930 30 80 +4931 name_4931 31 81 +4932 name_4932 32 82 +4933 name_4933 33 83 +4934 name_4934 34 84 +4935 name_4935 35 85 +4936 name_4936 36 86 +4937 name_4937 37 87 +4938 name_4938 38 88 +4939 name_4939 39 89 +4940 name_4940 40 90 +4941 name_4941 41 91 +4942 name_4942 42 92 +4943 name_4943 43 93 +4944 name_4944 44 94 +4945 name_4945 45 95 +4946 name_4946 46 96 +4947 name_4947 47 97 +4948 name_4948 48 98 +4949 name_4949 49 99 +4956 name_4956 26 56 +4957 name_4957 27 57 +4958 name_4958 28 58 +4959 name_4959 29 59 +4960 name_4960 30 60 +4961 name_4961 31 61 +4962 name_4962 32 62 +4963 name_4963 33 63 +4964 name_4964 34 64 +4965 name_4965 35 65 +4966 name_4966 36 66 +4967 name_4967 37 67 +4968 name_4968 38 68 +4969 name_4969 39 69 +4970 name_4970 40 70 +4971 name_4971 41 71 +4972 name_4972 42 72 +4973 name_4973 43 73 +4974 name_4974 44 74 +4975 name_4975 45 75 +4976 name_4976 46 76 +4977 name_4977 47 77 +4978 name_4978 48 78 +4979 name_4979 49 79 +4986 name_4986 26 86 +4987 name_4987 27 87 +4988 name_4988 28 88 +4989 name_4989 29 89 +4990 name_4990 30 90 +4991 name_4991 31 91 +4992 name_4992 32 92 +4993 name_4993 33 93 +4994 name_4994 34 94 +4995 name_4995 35 95 +4996 name_4996 36 96 +4997 name_4997 37 97 +4998 name_4998 38 98 +4999 name_4999 39 99 + +-- !condition_cache_limit3 -- +6 name_6 26 56 +7 name_7 27 57 +8 name_8 28 58 +9 name_9 29 59 +10 name_10 30 60 +11 name_11 31 61 +12 name_12 32 62 +13 name_13 33 63 +14 name_14 34 64 +15 name_15 35 65 +16 name_16 36 66 +17 name_17 37 67 +18 name_18 38 68 +19 name_19 39 69 +20 name_20 40 70 +21 name_21 41 71 +22 name_22 42 72 +23 name_23 43 73 +24 name_24 44 74 +25 name_25 45 75 +26 name_26 46 76 +27 name_27 47 77 +28 name_28 48 78 +29 name_29 49 79 +36 name_36 26 86 +37 name_37 27 87 +38 name_38 28 88 +39 name_39 29 89 +40 name_40 30 90 +41 name_41 31 91 +42 name_42 32 92 +43 name_43 33 93 +44 name_44 34 94 +45 name_45 35 95 +46 name_46 36 96 +47 name_47 37 97 +48 name_48 38 98 +49 name_49 39 99 +50 name_50 40 50 +51 name_51 41 51 +52 name_52 42 52 +53 name_53 43 53 +54 name_54 44 54 +55 name_55 45 55 +56 name_56 46 56 +57 name_57 47 57 +58 name_58 48 58 +59 name_59 49 59 +66 name_66 26 66 +67 name_67 27 67 +68 name_68 28 68 +69 name_69 29 69 +70 name_70 30 70 +71 name_71 31 71 +72 name_72 32 72 +73 name_73 33 73 +74 name_74 34 74 +75 name_75 35 75 +76 name_76 36 76 +77 name_77 37 77 +78 name_78 38 78 +79 name_79 39 79 +80 name_80 40 80 +81 name_81 41 81 +82 name_82 42 82 +83 name_83 43 83 +84 name_84 44 84 +85 name_85 45 85 +86 name_86 46 86 +87 name_87 47 87 +88 name_88 48 88 +89 name_89 49 89 +96 name_96 26 96 +97 name_97 27 97 +98 name_98 28 98 +99 name_99 29 99 +100 name_100 30 50 +101 name_101 31 51 +102 name_102 32 52 +103 name_103 33 53 +104 name_104 34 54 +105 name_105 35 55 +106 name_106 36 56 +107 name_107 37 57 +108 name_108 38 58 +109 name_109 39 59 +110 name_110 40 60 +111 name_111 41 61 +112 name_112 42 62 +113 name_113 43 63 +114 name_114 44 64 +115 name_115 45 65 +116 name_116 46 66 +117 name_117 47 67 +118 name_118 48 68 +119 name_119 49 69 +126 name_126 26 76 +127 name_127 27 77 +128 name_128 28 78 +129 name_129 29 79 +130 name_130 30 80 +131 name_131 31 81 +132 name_132 32 82 +133 name_133 33 83 +134 name_134 34 84 +135 name_135 35 85 +136 name_136 36 86 +137 name_137 37 87 +138 name_138 38 88 +139 name_139 39 89 +140 name_140 40 90 +141 name_141 41 91 +142 name_142 42 92 +143 name_143 43 93 +144 name_144 44 94 +145 name_145 45 95 +146 name_146 46 96 +147 name_147 47 97 +148 name_148 48 98 +149 name_149 49 99 +156 name_156 26 56 +157 name_157 27 57 +158 name_158 28 58 +159 name_159 29 59 +160 name_160 30 60 +161 name_161 31 61 +162 name_162 32 62 +163 name_163 33 63 +164 name_164 34 64 +165 name_165 35 65 +166 name_166 36 66 +167 name_167 37 67 +168 name_168 38 68 +169 name_169 39 69 +170 name_170 40 70 +171 name_171 41 71 +172 name_172 42 72 +173 name_173 43 73 +174 name_174 44 74 +175 name_175 45 75 +176 name_176 46 76 +177 name_177 47 77 +178 name_178 48 78 +179 name_179 49 79 +186 name_186 26 86 +187 name_187 27 87 +188 name_188 28 88 +189 name_189 29 89 +190 name_190 30 90 +191 name_191 31 91 +192 name_192 32 92 +193 name_193 33 93 +194 name_194 34 94 +195 name_195 35 95 +196 name_196 36 96 +197 name_197 37 97 +198 name_198 38 98 +199 name_199 39 99 +200 name_200 40 50 +201 name_201 41 51 +202 name_202 42 52 +203 name_203 43 53 +204 name_204 44 54 +205 name_205 45 55 +206 name_206 46 56 +207 name_207 47 57 +208 name_208 48 58 +209 name_209 49 59 +216 name_216 26 66 +217 name_217 27 67 +218 name_218 28 68 +219 name_219 29 69 +220 name_220 30 70 +221 name_221 31 71 +222 name_222 32 72 +223 name_223 33 73 +224 name_224 34 74 +225 name_225 35 75 +226 name_226 36 76 +227 name_227 37 77 +228 name_228 38 78 +229 name_229 39 79 +230 name_230 40 80 +231 name_231 41 81 +232 name_232 42 82 +233 name_233 43 83 +234 name_234 44 84 +235 name_235 45 85 +236 name_236 46 86 +237 name_237 47 87 +238 name_238 48 88 +239 name_239 49 89 +246 name_246 26 96 +247 name_247 27 97 +248 name_248 28 98 +249 name_249 29 99 +250 name_250 30 50 +251 name_251 31 51 +252 name_252 32 52 +253 name_253 33 53 +254 name_254 34 54 +255 name_255 35 55 +256 name_256 36 56 +257 name_257 37 57 +258 name_258 38 58 +259 name_259 39 59 +260 name_260 40 60 +261 name_261 41 61 +262 name_262 42 62 +263 name_263 43 63 +264 name_264 44 64 +265 name_265 45 65 +266 name_266 46 66 +267 name_267 47 67 +268 name_268 48 68 +269 name_269 49 69 +276 name_276 26 76 +277 name_277 27 77 +278 name_278 28 78 +279 name_279 29 79 +280 name_280 30 80 +281 name_281 31 81 +282 name_282 32 82 +283 name_283 33 83 +284 name_284 34 84 +285 name_285 35 85 +286 name_286 36 86 +287 name_287 37 87 +288 name_288 38 88 +289 name_289 39 89 +290 name_290 40 90 +291 name_291 41 91 +292 name_292 42 92 +293 name_293 43 93 +294 name_294 44 94 +295 name_295 45 95 +296 name_296 46 96 +297 name_297 47 97 +298 name_298 48 98 +299 name_299 49 99 +306 name_306 26 56 +307 name_307 27 57 +308 name_308 28 58 +309 name_309 29 59 +310 name_310 30 60 +311 name_311 31 61 +312 name_312 32 62 +313 name_313 33 63 +314 name_314 34 64 +315 name_315 35 65 +316 name_316 36 66 +317 name_317 37 67 +318 name_318 38 68 +319 name_319 39 69 +320 name_320 40 70 +321 name_321 41 71 +322 name_322 42 72 +323 name_323 43 73 +324 name_324 44 74 +325 name_325 45 75 +326 name_326 46 76 +327 name_327 47 77 +328 name_328 48 78 +329 name_329 49 79 +336 name_336 26 86 +337 name_337 27 87 +338 name_338 28 88 +339 name_339 29 89 +340 name_340 30 90 +341 name_341 31 91 +342 name_342 32 92 +343 name_343 33 93 +344 name_344 34 94 +345 name_345 35 95 +346 name_346 36 96 +347 name_347 37 97 +348 name_348 38 98 +349 name_349 39 99 +350 name_350 40 50 +351 name_351 41 51 +352 name_352 42 52 +353 name_353 43 53 +354 name_354 44 54 +355 name_355 45 55 +356 name_356 46 56 +357 name_357 47 57 +358 name_358 48 58 +359 name_359 49 59 +366 name_366 26 66 +367 name_367 27 67 +368 name_368 28 68 +369 name_369 29 69 +370 name_370 30 70 +371 name_371 31 71 +372 name_372 32 72 +373 name_373 33 73 +374 name_374 34 74 +375 name_375 35 75 +376 name_376 36 76 +377 name_377 37 77 +378 name_378 38 78 +379 name_379 39 79 +380 name_380 40 80 +381 name_381 41 81 +382 name_382 42 82 +383 name_383 43 83 +384 name_384 44 84 +385 name_385 45 85 +386 name_386 46 86 +387 name_387 47 87 +388 name_388 48 88 +389 name_389 49 89 +396 name_396 26 96 +397 name_397 27 97 +398 name_398 28 98 +399 name_399 29 99 +400 name_400 30 50 +401 name_401 31 51 +402 name_402 32 52 +403 name_403 33 53 +404 name_404 34 54 +405 name_405 35 55 +406 name_406 36 56 +407 name_407 37 57 +408 name_408 38 58 +409 name_409 39 59 +410 name_410 40 60 +411 name_411 41 61 +412 name_412 42 62 +413 name_413 43 63 +414 name_414 44 64 +415 name_415 45 65 +416 name_416 46 66 +417 name_417 47 67 +418 name_418 48 68 +419 name_419 49 69 +426 name_426 26 76 +427 name_427 27 77 +428 name_428 28 78 +429 name_429 29 79 +430 name_430 30 80 +431 name_431 31 81 +432 name_432 32 82 +433 name_433 33 83 +434 name_434 34 84 +435 name_435 35 85 +436 name_436 36 86 +437 name_437 37 87 +438 name_438 38 88 +439 name_439 39 89 +440 name_440 40 90 +441 name_441 41 91 +442 name_442 42 92 +443 name_443 43 93 +444 name_444 44 94 +445 name_445 45 95 +446 name_446 46 96 +447 name_447 47 97 +448 name_448 48 98 +449 name_449 49 99 +456 name_456 26 56 +457 name_457 27 57 +458 name_458 28 58 +459 name_459 29 59 +460 name_460 30 60 +461 name_461 31 61 +462 name_462 32 62 +463 name_463 33 63 +464 name_464 34 64 +465 name_465 35 65 +466 name_466 36 66 +467 name_467 37 67 +468 name_468 38 68 +469 name_469 39 69 +470 name_470 40 70 +471 name_471 41 71 +472 name_472 42 72 +473 name_473 43 73 +474 name_474 44 74 +475 name_475 45 75 +476 name_476 46 76 +477 name_477 47 77 +478 name_478 48 78 +479 name_479 49 79 +486 name_486 26 86 +487 name_487 27 87 +488 name_488 28 88 +489 name_489 29 89 +490 name_490 30 90 +491 name_491 31 91 +492 name_492 32 92 +493 name_493 33 93 +494 name_494 34 94 +495 name_495 35 95 +496 name_496 36 96 +497 name_497 37 97 +498 name_498 38 98 +499 name_499 39 99 +500 name_500 40 50 +501 name_501 41 51 +502 name_502 42 52 +503 name_503 43 53 +504 name_504 44 54 +505 name_505 45 55 +506 name_506 46 56 +507 name_507 47 57 +508 name_508 48 58 +509 name_509 49 59 +516 name_516 26 66 +517 name_517 27 67 +518 name_518 28 68 +519 name_519 29 69 +520 name_520 30 70 +521 name_521 31 71 +522 name_522 32 72 +523 name_523 33 73 +524 name_524 34 74 +525 name_525 35 75 +526 name_526 36 76 +527 name_527 37 77 +528 name_528 38 78 +529 name_529 39 79 +530 name_530 40 80 +531 name_531 41 81 +532 name_532 42 82 +533 name_533 43 83 +534 name_534 44 84 +535 name_535 45 85 +536 name_536 46 86 +537 name_537 47 87 +538 name_538 48 88 +539 name_539 49 89 +546 name_546 26 96 +547 name_547 27 97 +548 name_548 28 98 +549 name_549 29 99 +550 name_550 30 50 +551 name_551 31 51 +552 name_552 32 52 +553 name_553 33 53 +554 name_554 34 54 +555 name_555 35 55 +556 name_556 36 56 +557 name_557 37 57 +558 name_558 38 58 +559 name_559 39 59 +560 name_560 40 60 +561 name_561 41 61 +562 name_562 42 62 +563 name_563 43 63 +564 name_564 44 64 +565 name_565 45 65 +566 name_566 46 66 +567 name_567 47 67 +568 name_568 48 68 +569 name_569 49 69 +576 name_576 26 76 +577 name_577 27 77 +578 name_578 28 78 +579 name_579 29 79 +580 name_580 30 80 +581 name_581 31 81 +582 name_582 32 82 +583 name_583 33 83 +584 name_584 34 84 +585 name_585 35 85 +586 name_586 36 86 +587 name_587 37 87 +588 name_588 38 88 +589 name_589 39 89 +590 name_590 40 90 +591 name_591 41 91 +592 name_592 42 92 +593 name_593 43 93 +594 name_594 44 94 +595 name_595 45 95 +596 name_596 46 96 +597 name_597 47 97 +598 name_598 48 98 +599 name_599 49 99 +606 name_606 26 56 +607 name_607 27 57 +608 name_608 28 58 +609 name_609 29 59 +610 name_610 30 60 +611 name_611 31 61 +612 name_612 32 62 +613 name_613 33 63 +614 name_614 34 64 +615 name_615 35 65 +616 name_616 36 66 +617 name_617 37 67 +618 name_618 38 68 +619 name_619 39 69 +620 name_620 40 70 +621 name_621 41 71 +622 name_622 42 72 +623 name_623 43 73 +624 name_624 44 74 +625 name_625 45 75 +626 name_626 46 76 +627 name_627 47 77 +628 name_628 48 78 +629 name_629 49 79 +636 name_636 26 86 +637 name_637 27 87 +638 name_638 28 88 +639 name_639 29 89 +640 name_640 30 90 +641 name_641 31 91 +642 name_642 32 92 +643 name_643 33 93 +644 name_644 34 94 +645 name_645 35 95 +646 name_646 36 96 +647 name_647 37 97 +648 name_648 38 98 +649 name_649 39 99 +650 name_650 40 50 +651 name_651 41 51 +652 name_652 42 52 +653 name_653 43 53 +654 name_654 44 54 +655 name_655 45 55 +656 name_656 46 56 +657 name_657 47 57 +658 name_658 48 58 +659 name_659 49 59 +666 name_666 26 66 +667 name_667 27 67 +668 name_668 28 68 +669 name_669 29 69 +670 name_670 30 70 +671 name_671 31 71 +672 name_672 32 72 +673 name_673 33 73 +674 name_674 34 74 +675 name_675 35 75 +676 name_676 36 76 +677 name_677 37 77 +678 name_678 38 78 +679 name_679 39 79 +680 name_680 40 80 +681 name_681 41 81 +682 name_682 42 82 +683 name_683 43 83 +684 name_684 44 84 +685 name_685 45 85 +686 name_686 46 86 +687 name_687 47 87 +688 name_688 48 88 +689 name_689 49 89 +696 name_696 26 96 +697 name_697 27 97 +698 name_698 28 98 +699 name_699 29 99 +700 name_700 30 50 +701 name_701 31 51 +702 name_702 32 52 +703 name_703 33 53 +704 name_704 34 54 +705 name_705 35 55 +706 name_706 36 56 +707 name_707 37 57 +708 name_708 38 58 +709 name_709 39 59 +710 name_710 40 60 +711 name_711 41 61 +712 name_712 42 62 +713 name_713 43 63 +714 name_714 44 64 +715 name_715 45 65 +716 name_716 46 66 +717 name_717 47 67 +718 name_718 48 68 +719 name_719 49 69 +726 name_726 26 76 +727 name_727 27 77 +728 name_728 28 78 +729 name_729 29 79 +730 name_730 30 80 +731 name_731 31 81 +732 name_732 32 82 +733 name_733 33 83 +734 name_734 34 84 +735 name_735 35 85 +736 name_736 36 86 +737 name_737 37 87 +738 name_738 38 88 +739 name_739 39 89 +740 name_740 40 90 +741 name_741 41 91 +742 name_742 42 92 +743 name_743 43 93 +744 name_744 44 94 +745 name_745 45 95 +746 name_746 46 96 +747 name_747 47 97 +748 name_748 48 98 +749 name_749 49 99 +756 name_756 26 56 +757 name_757 27 57 +758 name_758 28 58 +759 name_759 29 59 +760 name_760 30 60 +761 name_761 31 61 +762 name_762 32 62 +763 name_763 33 63 +764 name_764 34 64 +765 name_765 35 65 +766 name_766 36 66 +767 name_767 37 67 +768 name_768 38 68 +769 name_769 39 69 +770 name_770 40 70 +771 name_771 41 71 +772 name_772 42 72 +773 name_773 43 73 +774 name_774 44 74 +775 name_775 45 75 +776 name_776 46 76 +777 name_777 47 77 +778 name_778 48 78 +779 name_779 49 79 +786 name_786 26 86 +787 name_787 27 87 +788 name_788 28 88 +789 name_789 29 89 +790 name_790 30 90 +791 name_791 31 91 +792 name_792 32 92 +793 name_793 33 93 +794 name_794 34 94 +795 name_795 35 95 +796 name_796 36 96 +797 name_797 37 97 +798 name_798 38 98 +799 name_799 39 99 +800 name_800 40 50 +801 name_801 41 51 +802 name_802 42 52 +803 name_803 43 53 +804 name_804 44 54 +805 name_805 45 55 +806 name_806 46 56 +807 name_807 47 57 +808 name_808 48 58 +809 name_809 49 59 +816 name_816 26 66 +817 name_817 27 67 +818 name_818 28 68 +819 name_819 29 69 +820 name_820 30 70 +821 name_821 31 71 +822 name_822 32 72 +823 name_823 33 73 +824 name_824 34 74 +825 name_825 35 75 +826 name_826 36 76 +827 name_827 37 77 +828 name_828 38 78 +829 name_829 39 79 +830 name_830 40 80 +831 name_831 41 81 +832 name_832 42 82 +833 name_833 43 83 +834 name_834 44 84 +835 name_835 45 85 +836 name_836 46 86 +837 name_837 47 87 +838 name_838 48 88 +839 name_839 49 89 +846 name_846 26 96 +847 name_847 27 97 +848 name_848 28 98 +849 name_849 29 99 +850 name_850 30 50 +851 name_851 31 51 +852 name_852 32 52 +853 name_853 33 53 +854 name_854 34 54 +855 name_855 35 55 +856 name_856 36 56 +857 name_857 37 57 +858 name_858 38 58 +859 name_859 39 59 +860 name_860 40 60 +861 name_861 41 61 +862 name_862 42 62 +863 name_863 43 63 +864 name_864 44 64 +865 name_865 45 65 +866 name_866 46 66 +867 name_867 47 67 +868 name_868 48 68 +869 name_869 49 69 +876 name_876 26 76 +877 name_877 27 77 +878 name_878 28 78 +879 name_879 29 79 +880 name_880 30 80 +881 name_881 31 81 +882 name_882 32 82 +883 name_883 33 83 +884 name_884 34 84 +885 name_885 35 85 +886 name_886 36 86 +887 name_887 37 87 +888 name_888 38 88 +889 name_889 39 89 +890 name_890 40 90 +891 name_891 41 91 +892 name_892 42 92 +893 name_893 43 93 +894 name_894 44 94 +895 name_895 45 95 +896 name_896 46 96 +897 name_897 47 97 +898 name_898 48 98 +899 name_899 49 99 +906 name_906 26 56 +907 name_907 27 57 +908 name_908 28 58 +909 name_909 29 59 +910 name_910 30 60 +911 name_911 31 61 +912 name_912 32 62 +913 name_913 33 63 +914 name_914 34 64 +915 name_915 35 65 +916 name_916 36 66 +917 name_917 37 67 +918 name_918 38 68 +919 name_919 39 69 +920 name_920 40 70 +921 name_921 41 71 +922 name_922 42 72 +923 name_923 43 73 +924 name_924 44 74 +925 name_925 45 75 +926 name_926 46 76 +927 name_927 47 77 +928 name_928 48 78 +929 name_929 49 79 +936 name_936 26 86 +937 name_937 27 87 +938 name_938 28 88 +939 name_939 29 89 +940 name_940 30 90 +941 name_941 31 91 +942 name_942 32 92 +943 name_943 33 93 +944 name_944 34 94 +945 name_945 35 95 +946 name_946 36 96 +947 name_947 37 97 +948 name_948 38 98 +949 name_949 39 99 +950 name_950 40 50 +951 name_951 41 51 +952 name_952 42 52 +953 name_953 43 53 +954 name_954 44 54 +955 name_955 45 55 +956 name_956 46 56 +957 name_957 47 57 +958 name_958 48 58 +959 name_959 49 59 +966 name_966 26 66 +967 name_967 27 67 +968 name_968 28 68 +969 name_969 29 69 +970 name_970 30 70 +971 name_971 31 71 +972 name_972 32 72 +973 name_973 33 73 +974 name_974 34 74 +975 name_975 35 75 +976 name_976 36 76 +977 name_977 37 77 +978 name_978 38 78 +979 name_979 39 79 +980 name_980 40 80 +981 name_981 41 81 +982 name_982 42 82 +983 name_983 43 83 +984 name_984 44 84 +985 name_985 45 85 +986 name_986 46 86 +987 name_987 47 87 +988 name_988 48 88 +989 name_989 49 89 +996 name_996 26 96 +997 name_997 27 97 +998 name_998 28 98 +999 name_999 29 99 +1000 name_1000 30 50 +1001 name_1001 31 51 +1002 name_1002 32 52 +1003 name_1003 33 53 +1004 name_1004 34 54 +1005 name_1005 35 55 +1006 name_1006 36 56 +1007 name_1007 37 57 +1008 name_1008 38 58 +1009 name_1009 39 59 +1010 name_1010 40 60 +1011 name_1011 41 61 +1012 name_1012 42 62 +1013 name_1013 43 63 +1014 name_1014 44 64 +1015 name_1015 45 65 +1016 name_1016 46 66 +1017 name_1017 47 67 +1018 name_1018 48 68 +1019 name_1019 49 69 +1026 name_1026 26 76 +1027 name_1027 27 77 +1028 name_1028 28 78 +1029 name_1029 29 79 +1030 name_1030 30 80 +1031 name_1031 31 81 +1032 name_1032 32 82 +1033 name_1033 33 83 +1034 name_1034 34 84 +1035 name_1035 35 85 +1036 name_1036 36 86 +1037 name_1037 37 87 +1038 name_1038 38 88 +1039 name_1039 39 89 +1040 name_1040 40 90 +1041 name_1041 41 91 +1042 name_1042 42 92 +1043 name_1043 43 93 +1044 name_1044 44 94 +1045 name_1045 45 95 +1046 name_1046 46 96 +1047 name_1047 47 97 +1048 name_1048 48 98 +1049 name_1049 49 99 +1056 name_1056 26 56 +1057 name_1057 27 57 +1058 name_1058 28 58 +1059 name_1059 29 59 +1060 name_1060 30 60 +1061 name_1061 31 61 +1062 name_1062 32 62 +1063 name_1063 33 63 +1064 name_1064 34 64 +1065 name_1065 35 65 +1066 name_1066 36 66 +1067 name_1067 37 67 +1068 name_1068 38 68 +1069 name_1069 39 69 +1070 name_1070 40 70 +1071 name_1071 41 71 +1072 name_1072 42 72 +1073 name_1073 43 73 +1074 name_1074 44 74 +1075 name_1075 45 75 +1076 name_1076 46 76 +1077 name_1077 47 77 +1078 name_1078 48 78 +1079 name_1079 49 79 +1086 name_1086 26 86 +1087 name_1087 27 87 +1088 name_1088 28 88 +1089 name_1089 29 89 +1090 name_1090 30 90 +1091 name_1091 31 91 +1092 name_1092 32 92 +1093 name_1093 33 93 +1094 name_1094 34 94 +1095 name_1095 35 95 +1096 name_1096 36 96 +1097 name_1097 37 97 +1098 name_1098 38 98 +1099 name_1099 39 99 +1100 name_1100 40 50 +1101 name_1101 41 51 +1102 name_1102 42 52 +1103 name_1103 43 53 +1104 name_1104 44 54 +1105 name_1105 45 55 +1106 name_1106 46 56 +1107 name_1107 47 57 +1108 name_1108 48 58 +1109 name_1109 49 59 +1116 name_1116 26 66 +1117 name_1117 27 67 +1118 name_1118 28 68 +1119 name_1119 29 69 +1120 name_1120 30 70 +1121 name_1121 31 71 +1122 name_1122 32 72 +1123 name_1123 33 73 +1124 name_1124 34 74 +1125 name_1125 35 75 +1126 name_1126 36 76 +1127 name_1127 37 77 +1128 name_1128 38 78 +1129 name_1129 39 79 +1130 name_1130 40 80 +1131 name_1131 41 81 +1132 name_1132 42 82 +1133 name_1133 43 83 +1134 name_1134 44 84 +1135 name_1135 45 85 +1136 name_1136 46 86 +1137 name_1137 47 87 +1138 name_1138 48 88 +1139 name_1139 49 89 +1146 name_1146 26 96 +1147 name_1147 27 97 +1148 name_1148 28 98 +1149 name_1149 29 99 +1150 name_1150 30 50 +1151 name_1151 31 51 +1152 name_1152 32 52 +1153 name_1153 33 53 +1154 name_1154 34 54 +1155 name_1155 35 55 +1156 name_1156 36 56 +1157 name_1157 37 57 +1158 name_1158 38 58 +1159 name_1159 39 59 +1160 name_1160 40 60 +1161 name_1161 41 61 +1162 name_1162 42 62 +1163 name_1163 43 63 +1164 name_1164 44 64 +1165 name_1165 45 65 +1166 name_1166 46 66 +1167 name_1167 47 67 +1168 name_1168 48 68 +1169 name_1169 49 69 +1176 name_1176 26 76 +1177 name_1177 27 77 +1178 name_1178 28 78 +1179 name_1179 29 79 +1180 name_1180 30 80 +1181 name_1181 31 81 +1182 name_1182 32 82 +1183 name_1183 33 83 +1184 name_1184 34 84 +1185 name_1185 35 85 +1186 name_1186 36 86 +1187 name_1187 37 87 +1188 name_1188 38 88 +1189 name_1189 39 89 +1190 name_1190 40 90 +1191 name_1191 41 91 +1192 name_1192 42 92 +1193 name_1193 43 93 +1194 name_1194 44 94 +1195 name_1195 45 95 +1196 name_1196 46 96 +1197 name_1197 47 97 +1198 name_1198 48 98 +1199 name_1199 49 99 +1206 name_1206 26 56 +1207 name_1207 27 57 +1208 name_1208 28 58 +1209 name_1209 29 59 +1210 name_1210 30 60 +1211 name_1211 31 61 +1212 name_1212 32 62 +1213 name_1213 33 63 +1214 name_1214 34 64 +1215 name_1215 35 65 +1216 name_1216 36 66 +1217 name_1217 37 67 +1218 name_1218 38 68 +1219 name_1219 39 69 +1220 name_1220 40 70 +1221 name_1221 41 71 +1222 name_1222 42 72 +1223 name_1223 43 73 +1224 name_1224 44 74 +1225 name_1225 45 75 +1226 name_1226 46 76 +1227 name_1227 47 77 +1228 name_1228 48 78 +1229 name_1229 49 79 +1236 name_1236 26 86 +1237 name_1237 27 87 +1238 name_1238 28 88 +1239 name_1239 29 89 +1240 name_1240 30 90 +1241 name_1241 31 91 +1242 name_1242 32 92 +1243 name_1243 33 93 +1244 name_1244 34 94 +1245 name_1245 35 95 +1246 name_1246 36 96 +1247 name_1247 37 97 +1248 name_1248 38 98 +1249 name_1249 39 99 +1250 name_1250 40 50 +1251 name_1251 41 51 +1252 name_1252 42 52 +1253 name_1253 43 53 +1254 name_1254 44 54 +1255 name_1255 45 55 +1256 name_1256 46 56 +1257 name_1257 47 57 +1258 name_1258 48 58 +1259 name_1259 49 59 +1266 name_1266 26 66 +1267 name_1267 27 67 +1268 name_1268 28 68 +1269 name_1269 29 69 +1270 name_1270 30 70 +1271 name_1271 31 71 +1272 name_1272 32 72 +1273 name_1273 33 73 +1274 name_1274 34 74 +1275 name_1275 35 75 +1276 name_1276 36 76 +1277 name_1277 37 77 +1278 name_1278 38 78 +1279 name_1279 39 79 +1280 name_1280 40 80 +1281 name_1281 41 81 +1282 name_1282 42 82 +1283 name_1283 43 83 +1284 name_1284 44 84 +1285 name_1285 45 85 +1286 name_1286 46 86 +1287 name_1287 47 87 +1288 name_1288 48 88 +1289 name_1289 49 89 +1296 name_1296 26 96 +1297 name_1297 27 97 +1298 name_1298 28 98 +1299 name_1299 29 99 +1300 name_1300 30 50 +1301 name_1301 31 51 +1302 name_1302 32 52 +1303 name_1303 33 53 +1304 name_1304 34 54 +1305 name_1305 35 55 +1306 name_1306 36 56 +1307 name_1307 37 57 +1308 name_1308 38 58 +1309 name_1309 39 59 +1310 name_1310 40 60 +1311 name_1311 41 61 +1312 name_1312 42 62 +1313 name_1313 43 63 +1314 name_1314 44 64 +1315 name_1315 45 65 +1316 name_1316 46 66 +1317 name_1317 47 67 +1318 name_1318 48 68 +1319 name_1319 49 69 +1326 name_1326 26 76 +1327 name_1327 27 77 +1328 name_1328 28 78 +1329 name_1329 29 79 +1330 name_1330 30 80 +1331 name_1331 31 81 +1332 name_1332 32 82 +1333 name_1333 33 83 +1334 name_1334 34 84 +1335 name_1335 35 85 +1336 name_1336 36 86 +1337 name_1337 37 87 +1338 name_1338 38 88 +1339 name_1339 39 89 +1340 name_1340 40 90 +1341 name_1341 41 91 +1342 name_1342 42 92 +1343 name_1343 43 93 +1344 name_1344 44 94 +1345 name_1345 45 95 +1346 name_1346 46 96 +1347 name_1347 47 97 +1348 name_1348 48 98 +1349 name_1349 49 99 +1356 name_1356 26 56 +1357 name_1357 27 57 +1358 name_1358 28 58 +1359 name_1359 29 59 +1360 name_1360 30 60 +1361 name_1361 31 61 +1362 name_1362 32 62 +1363 name_1363 33 63 +1364 name_1364 34 64 +1365 name_1365 35 65 +1366 name_1366 36 66 +1367 name_1367 37 67 +1368 name_1368 38 68 +1369 name_1369 39 69 +1370 name_1370 40 70 +1371 name_1371 41 71 +1372 name_1372 42 72 +1373 name_1373 43 73 +1374 name_1374 44 74 +1375 name_1375 45 75 +1376 name_1376 46 76 +1377 name_1377 47 77 +1378 name_1378 48 78 +1379 name_1379 49 79 +1386 name_1386 26 86 +1387 name_1387 27 87 +1388 name_1388 28 88 +1389 name_1389 29 89 +1390 name_1390 30 90 +1391 name_1391 31 91 +1392 name_1392 32 92 +1393 name_1393 33 93 +1394 name_1394 34 94 +1395 name_1395 35 95 +1396 name_1396 36 96 +1397 name_1397 37 97 +1398 name_1398 38 98 +1399 name_1399 39 99 +1400 name_1400 40 50 +1401 name_1401 41 51 +1402 name_1402 42 52 +1403 name_1403 43 53 +1404 name_1404 44 54 +1405 name_1405 45 55 +1406 name_1406 46 56 +1407 name_1407 47 57 +1408 name_1408 48 58 +1409 name_1409 49 59 +1416 name_1416 26 66 +1417 name_1417 27 67 +1418 name_1418 28 68 +1419 name_1419 29 69 +1420 name_1420 30 70 +1421 name_1421 31 71 +1422 name_1422 32 72 +1423 name_1423 33 73 +1424 name_1424 34 74 +1425 name_1425 35 75 +1426 name_1426 36 76 +1427 name_1427 37 77 +1428 name_1428 38 78 +1429 name_1429 39 79 +1430 name_1430 40 80 +1431 name_1431 41 81 +1432 name_1432 42 82 +1433 name_1433 43 83 +1434 name_1434 44 84 +1435 name_1435 45 85 +1436 name_1436 46 86 +1437 name_1437 47 87 +1438 name_1438 48 88 +1439 name_1439 49 89 +1446 name_1446 26 96 +1447 name_1447 27 97 +1448 name_1448 28 98 +1449 name_1449 29 99 +1450 name_1450 30 50 +1451 name_1451 31 51 +1452 name_1452 32 52 +1453 name_1453 33 53 +1454 name_1454 34 54 +1455 name_1455 35 55 +1456 name_1456 36 56 +1457 name_1457 37 57 +1458 name_1458 38 58 +1459 name_1459 39 59 +1460 name_1460 40 60 +1461 name_1461 41 61 +1462 name_1462 42 62 +1463 name_1463 43 63 +1464 name_1464 44 64 +1465 name_1465 45 65 +1466 name_1466 46 66 +1467 name_1467 47 67 +1468 name_1468 48 68 +1469 name_1469 49 69 +1476 name_1476 26 76 +1477 name_1477 27 77 +1478 name_1478 28 78 +1479 name_1479 29 79 +1480 name_1480 30 80 +1481 name_1481 31 81 +1482 name_1482 32 82 +1483 name_1483 33 83 +1484 name_1484 34 84 +1485 name_1485 35 85 +1486 name_1486 36 86 +1487 name_1487 37 87 +1488 name_1488 38 88 +1489 name_1489 39 89 +1490 name_1490 40 90 +1491 name_1491 41 91 +1492 name_1492 42 92 +1493 name_1493 43 93 +1494 name_1494 44 94 +1495 name_1495 45 95 +1496 name_1496 46 96 +1497 name_1497 47 97 +1498 name_1498 48 98 +1499 name_1499 49 99 +1506 name_1506 26 56 +1507 name_1507 27 57 +1508 name_1508 28 58 +1509 name_1509 29 59 +1510 name_1510 30 60 +1511 name_1511 31 61 +1512 name_1512 32 62 +1513 name_1513 33 63 +1514 name_1514 34 64 +1515 name_1515 35 65 +1516 name_1516 36 66 +1517 name_1517 37 67 +1518 name_1518 38 68 +1519 name_1519 39 69 +1520 name_1520 40 70 +1521 name_1521 41 71 +1522 name_1522 42 72 +1523 name_1523 43 73 +1524 name_1524 44 74 +1525 name_1525 45 75 +1526 name_1526 46 76 +1527 name_1527 47 77 +1528 name_1528 48 78 +1529 name_1529 49 79 +1536 name_1536 26 86 +1537 name_1537 27 87 +1538 name_1538 28 88 +1539 name_1539 29 89 +1540 name_1540 30 90 +1541 name_1541 31 91 +1542 name_1542 32 92 +1543 name_1543 33 93 +1544 name_1544 34 94 +1545 name_1545 35 95 +1546 name_1546 36 96 +1547 name_1547 37 97 +1548 name_1548 38 98 +1549 name_1549 39 99 +1550 name_1550 40 50 +1551 name_1551 41 51 +1552 name_1552 42 52 +1553 name_1553 43 53 +1554 name_1554 44 54 +1555 name_1555 45 55 +1556 name_1556 46 56 +1557 name_1557 47 57 +1558 name_1558 48 58 +1559 name_1559 49 59 +1566 name_1566 26 66 +1567 name_1567 27 67 +1568 name_1568 28 68 +1569 name_1569 29 69 +1570 name_1570 30 70 +1571 name_1571 31 71 +1572 name_1572 32 72 +1573 name_1573 33 73 +1574 name_1574 34 74 +1575 name_1575 35 75 +1576 name_1576 36 76 +1577 name_1577 37 77 +1578 name_1578 38 78 +1579 name_1579 39 79 +1580 name_1580 40 80 +1581 name_1581 41 81 +1582 name_1582 42 82 +1583 name_1583 43 83 +1584 name_1584 44 84 +1585 name_1585 45 85 +1586 name_1586 46 86 +1587 name_1587 47 87 +1588 name_1588 48 88 +1589 name_1589 49 89 +1596 name_1596 26 96 +1597 name_1597 27 97 +1598 name_1598 28 98 +1599 name_1599 29 99 +1600 name_1600 30 50 +1601 name_1601 31 51 +1602 name_1602 32 52 +1603 name_1603 33 53 +1604 name_1604 34 54 +1605 name_1605 35 55 +1606 name_1606 36 56 +1607 name_1607 37 57 +1608 name_1608 38 58 +1609 name_1609 39 59 +1610 name_1610 40 60 +1611 name_1611 41 61 +1612 name_1612 42 62 +1613 name_1613 43 63 +1614 name_1614 44 64 +1615 name_1615 45 65 +1616 name_1616 46 66 +1617 name_1617 47 67 +1618 name_1618 48 68 +1619 name_1619 49 69 +1626 name_1626 26 76 +1627 name_1627 27 77 +1628 name_1628 28 78 +1629 name_1629 29 79 +1630 name_1630 30 80 +1631 name_1631 31 81 +1632 name_1632 32 82 +1633 name_1633 33 83 +1634 name_1634 34 84 +1635 name_1635 35 85 +1636 name_1636 36 86 +1637 name_1637 37 87 +1638 name_1638 38 88 +1639 name_1639 39 89 +1640 name_1640 40 90 +1641 name_1641 41 91 +1642 name_1642 42 92 +1643 name_1643 43 93 +1644 name_1644 44 94 +1645 name_1645 45 95 +1646 name_1646 46 96 +1647 name_1647 47 97 +1648 name_1648 48 98 +1649 name_1649 49 99 +1656 name_1656 26 56 +1657 name_1657 27 57 +1658 name_1658 28 58 +1659 name_1659 29 59 +1660 name_1660 30 60 +1661 name_1661 31 61 +1662 name_1662 32 62 +1663 name_1663 33 63 +1664 name_1664 34 64 +1665 name_1665 35 65 +1666 name_1666 36 66 +1667 name_1667 37 67 +1668 name_1668 38 68 +1669 name_1669 39 69 +1670 name_1670 40 70 +1671 name_1671 41 71 +1672 name_1672 42 72 +1673 name_1673 43 73 +1674 name_1674 44 74 +1675 name_1675 45 75 +1676 name_1676 46 76 +1677 name_1677 47 77 +1678 name_1678 48 78 +1679 name_1679 49 79 +1686 name_1686 26 86 +1687 name_1687 27 87 +1688 name_1688 28 88 +1689 name_1689 29 89 +1690 name_1690 30 90 +1691 name_1691 31 91 +1692 name_1692 32 92 +1693 name_1693 33 93 +1694 name_1694 34 94 +1695 name_1695 35 95 +1696 name_1696 36 96 +1697 name_1697 37 97 +1698 name_1698 38 98 +1699 name_1699 39 99 +1700 name_1700 40 50 +1701 name_1701 41 51 +1702 name_1702 42 52 +1703 name_1703 43 53 +1704 name_1704 44 54 +1705 name_1705 45 55 +1706 name_1706 46 56 +1707 name_1707 47 57 +1708 name_1708 48 58 +1709 name_1709 49 59 +1716 name_1716 26 66 +1717 name_1717 27 67 +1718 name_1718 28 68 +1719 name_1719 29 69 +1720 name_1720 30 70 +1721 name_1721 31 71 +1722 name_1722 32 72 +1723 name_1723 33 73 +1724 name_1724 34 74 +1725 name_1725 35 75 +1726 name_1726 36 76 +1727 name_1727 37 77 +1728 name_1728 38 78 +1729 name_1729 39 79 +1730 name_1730 40 80 +1731 name_1731 41 81 +1732 name_1732 42 82 +1733 name_1733 43 83 +1734 name_1734 44 84 +1735 name_1735 45 85 +1736 name_1736 46 86 +1737 name_1737 47 87 +1738 name_1738 48 88 +1739 name_1739 49 89 +1746 name_1746 26 96 +1747 name_1747 27 97 +1748 name_1748 28 98 +1749 name_1749 29 99 +1750 name_1750 30 50 +1751 name_1751 31 51 +1752 name_1752 32 52 +1753 name_1753 33 53 +1754 name_1754 34 54 +1755 name_1755 35 55 +1756 name_1756 36 56 +1757 name_1757 37 57 +1758 name_1758 38 58 +1759 name_1759 39 59 +1760 name_1760 40 60 +1761 name_1761 41 61 +1762 name_1762 42 62 +1763 name_1763 43 63 +1764 name_1764 44 64 +1765 name_1765 45 65 +1766 name_1766 46 66 +1767 name_1767 47 67 +1768 name_1768 48 68 +1769 name_1769 49 69 +1776 name_1776 26 76 +1777 name_1777 27 77 +1778 name_1778 28 78 +1779 name_1779 29 79 +1780 name_1780 30 80 +1781 name_1781 31 81 +1782 name_1782 32 82 +1783 name_1783 33 83 +1784 name_1784 34 84 +1785 name_1785 35 85 +1786 name_1786 36 86 +1787 name_1787 37 87 +1788 name_1788 38 88 +1789 name_1789 39 89 +1790 name_1790 40 90 +1791 name_1791 41 91 +1792 name_1792 42 92 +1793 name_1793 43 93 +1794 name_1794 44 94 +1795 name_1795 45 95 +1796 name_1796 46 96 +1797 name_1797 47 97 +1798 name_1798 48 98 +1799 name_1799 49 99 +1806 name_1806 26 56 +1807 name_1807 27 57 +1808 name_1808 28 58 +1809 name_1809 29 59 +1810 name_1810 30 60 +1811 name_1811 31 61 +1812 name_1812 32 62 +1813 name_1813 33 63 +1814 name_1814 34 64 +1815 name_1815 35 65 +1816 name_1816 36 66 +1817 name_1817 37 67 +1818 name_1818 38 68 +1819 name_1819 39 69 +1820 name_1820 40 70 +1821 name_1821 41 71 +1822 name_1822 42 72 +1823 name_1823 43 73 +1824 name_1824 44 74 +1825 name_1825 45 75 +1826 name_1826 46 76 +1827 name_1827 47 77 +1828 name_1828 48 78 +1829 name_1829 49 79 +1836 name_1836 26 86 +1837 name_1837 27 87 +1838 name_1838 28 88 +1839 name_1839 29 89 +1840 name_1840 30 90 +1841 name_1841 31 91 +1842 name_1842 32 92 +1843 name_1843 33 93 +1844 name_1844 34 94 +1845 name_1845 35 95 +1846 name_1846 36 96 +1847 name_1847 37 97 +1848 name_1848 38 98 +1849 name_1849 39 99 +1850 name_1850 40 50 +1851 name_1851 41 51 +1852 name_1852 42 52 +1853 name_1853 43 53 +1854 name_1854 44 54 +1855 name_1855 45 55 +1856 name_1856 46 56 +1857 name_1857 47 57 +1858 name_1858 48 58 +1859 name_1859 49 59 +1866 name_1866 26 66 +1867 name_1867 27 67 +1868 name_1868 28 68 +1869 name_1869 29 69 +1870 name_1870 30 70 +1871 name_1871 31 71 +1872 name_1872 32 72 +1873 name_1873 33 73 +1874 name_1874 34 74 +1875 name_1875 35 75 +1876 name_1876 36 76 +1877 name_1877 37 77 +1878 name_1878 38 78 +1879 name_1879 39 79 +1880 name_1880 40 80 +1881 name_1881 41 81 +1882 name_1882 42 82 +1883 name_1883 43 83 +1884 name_1884 44 84 +1885 name_1885 45 85 +1886 name_1886 46 86 +1887 name_1887 47 87 +1888 name_1888 48 88 +1889 name_1889 49 89 +1896 name_1896 26 96 +1897 name_1897 27 97 +1898 name_1898 28 98 +1899 name_1899 29 99 +1900 name_1900 30 50 +1901 name_1901 31 51 +1902 name_1902 32 52 +1903 name_1903 33 53 +1904 name_1904 34 54 +1905 name_1905 35 55 +1906 name_1906 36 56 +1907 name_1907 37 57 +1908 name_1908 38 58 +1909 name_1909 39 59 +1910 name_1910 40 60 +1911 name_1911 41 61 +1912 name_1912 42 62 +1913 name_1913 43 63 +1914 name_1914 44 64 +1915 name_1915 45 65 +1916 name_1916 46 66 +1917 name_1917 47 67 +1918 name_1918 48 68 +1919 name_1919 49 69 +1926 name_1926 26 76 +1927 name_1927 27 77 +1928 name_1928 28 78 +1929 name_1929 29 79 +1930 name_1930 30 80 +1931 name_1931 31 81 +1932 name_1932 32 82 +1933 name_1933 33 83 +1934 name_1934 34 84 +1935 name_1935 35 85 +1936 name_1936 36 86 +1937 name_1937 37 87 +1938 name_1938 38 88 +1939 name_1939 39 89 +1940 name_1940 40 90 +1941 name_1941 41 91 +1942 name_1942 42 92 +1943 name_1943 43 93 +1944 name_1944 44 94 +1945 name_1945 45 95 +1946 name_1946 46 96 +1947 name_1947 47 97 +1948 name_1948 48 98 +1949 name_1949 49 99 +1956 name_1956 26 56 +1957 name_1957 27 57 +1958 name_1958 28 58 +1959 name_1959 29 59 +1960 name_1960 30 60 +1961 name_1961 31 61 +1962 name_1962 32 62 +1963 name_1963 33 63 +1964 name_1964 34 64 +1965 name_1965 35 65 +1966 name_1966 36 66 +1967 name_1967 37 67 +1968 name_1968 38 68 +1969 name_1969 39 69 +1970 name_1970 40 70 +1971 name_1971 41 71 +1972 name_1972 42 72 +1973 name_1973 43 73 +1974 name_1974 44 74 +1975 name_1975 45 75 +1976 name_1976 46 76 +1977 name_1977 47 77 +1978 name_1978 48 78 +1979 name_1979 49 79 +1986 name_1986 26 86 +1987 name_1987 27 87 +1988 name_1988 28 88 +1989 name_1989 29 89 +1990 name_1990 30 90 +1991 name_1991 31 91 +1992 name_1992 32 92 +1993 name_1993 33 93 +1994 name_1994 34 94 +1995 name_1995 35 95 +1996 name_1996 36 96 +1997 name_1997 37 97 +1998 name_1998 38 98 +1999 name_1999 39 99 +2000 name_2000 40 50 +2001 name_2001 41 51 +2002 name_2002 42 52 +2003 name_2003 43 53 +2004 name_2004 44 54 +2005 name_2005 45 55 +2006 name_2006 46 56 +2007 name_2007 47 57 +2008 name_2008 48 58 +2009 name_2009 49 59 +2016 name_2016 26 66 +2017 name_2017 27 67 +2018 name_2018 28 68 +2019 name_2019 29 69 +2020 name_2020 30 70 +2021 name_2021 31 71 +2022 name_2022 32 72 +2023 name_2023 33 73 +2024 name_2024 34 74 +2025 name_2025 35 75 +2026 name_2026 36 76 +2027 name_2027 37 77 +2028 name_2028 38 78 +2029 name_2029 39 79 +2030 name_2030 40 80 +2031 name_2031 41 81 +2032 name_2032 42 82 +2033 name_2033 43 83 +2034 name_2034 44 84 +2035 name_2035 45 85 +2036 name_2036 46 86 +2037 name_2037 47 87 +2038 name_2038 48 88 +2039 name_2039 49 89 +2046 name_2046 26 96 +2047 name_2047 27 97 +2048 name_2048 28 98 +2049 name_2049 29 99 +2050 name_2050 30 50 +2051 name_2051 31 51 +2052 name_2052 32 52 +2053 name_2053 33 53 +2054 name_2054 34 54 +2055 name_2055 35 55 +2056 name_2056 36 56 +2057 name_2057 37 57 +2058 name_2058 38 58 +2059 name_2059 39 59 +2060 name_2060 40 60 +2061 name_2061 41 61 +2062 name_2062 42 62 +2063 name_2063 43 63 +2064 name_2064 44 64 +2065 name_2065 45 65 +2066 name_2066 46 66 +2067 name_2067 47 67 +2068 name_2068 48 68 +2069 name_2069 49 69 +2076 name_2076 26 76 +2077 name_2077 27 77 +2078 name_2078 28 78 +2079 name_2079 29 79 +2080 name_2080 30 80 +2081 name_2081 31 81 +2082 name_2082 32 82 +2083 name_2083 33 83 +2084 name_2084 34 84 +2085 name_2085 35 85 +2086 name_2086 36 86 +2087 name_2087 37 87 +2088 name_2088 38 88 +2089 name_2089 39 89 +2090 name_2090 40 90 +2091 name_2091 41 91 +2092 name_2092 42 92 +2093 name_2093 43 93 +2094 name_2094 44 94 +2095 name_2095 45 95 +2096 name_2096 46 96 +2097 name_2097 47 97 +2098 name_2098 48 98 +2099 name_2099 49 99 +2106 name_2106 26 56 +2107 name_2107 27 57 +2108 name_2108 28 58 +2109 name_2109 29 59 +2110 name_2110 30 60 +2111 name_2111 31 61 +2112 name_2112 32 62 +2113 name_2113 33 63 +2114 name_2114 34 64 +2115 name_2115 35 65 +2116 name_2116 36 66 +2117 name_2117 37 67 +2118 name_2118 38 68 +2119 name_2119 39 69 +2120 name_2120 40 70 +2121 name_2121 41 71 +2122 name_2122 42 72 +2123 name_2123 43 73 +2124 name_2124 44 74 +2125 name_2125 45 75 +2126 name_2126 46 76 +2127 name_2127 47 77 +2128 name_2128 48 78 +2129 name_2129 49 79 +2136 name_2136 26 86 +2137 name_2137 27 87 +2138 name_2138 28 88 +2139 name_2139 29 89 +2140 name_2140 30 90 +2141 name_2141 31 91 +2142 name_2142 32 92 +2143 name_2143 33 93 +2144 name_2144 34 94 +2145 name_2145 35 95 +2146 name_2146 36 96 +2147 name_2147 37 97 +2148 name_2148 38 98 +2149 name_2149 39 99 +2150 name_2150 40 50 +2151 name_2151 41 51 +2152 name_2152 42 52 +2153 name_2153 43 53 +2154 name_2154 44 54 +2155 name_2155 45 55 +2156 name_2156 46 56 +2157 name_2157 47 57 +2158 name_2158 48 58 +2159 name_2159 49 59 +2166 name_2166 26 66 +2167 name_2167 27 67 +2168 name_2168 28 68 +2169 name_2169 29 69 +2170 name_2170 30 70 +2171 name_2171 31 71 +2172 name_2172 32 72 +2173 name_2173 33 73 +2174 name_2174 34 74 +2175 name_2175 35 75 +2176 name_2176 36 76 +2177 name_2177 37 77 +2178 name_2178 38 78 +2179 name_2179 39 79 +2180 name_2180 40 80 +2181 name_2181 41 81 +2182 name_2182 42 82 +2183 name_2183 43 83 +2184 name_2184 44 84 +2185 name_2185 45 85 +2186 name_2186 46 86 +2187 name_2187 47 87 +2188 name_2188 48 88 +2189 name_2189 49 89 +2196 name_2196 26 96 +2197 name_2197 27 97 +2198 name_2198 28 98 +2199 name_2199 29 99 +2200 name_2200 30 50 +2201 name_2201 31 51 +2202 name_2202 32 52 +2203 name_2203 33 53 +2204 name_2204 34 54 +2205 name_2205 35 55 +2206 name_2206 36 56 +2207 name_2207 37 57 +2208 name_2208 38 58 +2209 name_2209 39 59 +2210 name_2210 40 60 +2211 name_2211 41 61 +2212 name_2212 42 62 +2213 name_2213 43 63 +2214 name_2214 44 64 +2215 name_2215 45 65 +2216 name_2216 46 66 +2217 name_2217 47 67 +2218 name_2218 48 68 +2219 name_2219 49 69 +2226 name_2226 26 76 +2227 name_2227 27 77 +2228 name_2228 28 78 +2229 name_2229 29 79 +2230 name_2230 30 80 +2231 name_2231 31 81 +2232 name_2232 32 82 +2233 name_2233 33 83 +2234 name_2234 34 84 +2235 name_2235 35 85 +2236 name_2236 36 86 +2237 name_2237 37 87 +2238 name_2238 38 88 +2239 name_2239 39 89 +2240 name_2240 40 90 +2241 name_2241 41 91 +2242 name_2242 42 92 +2243 name_2243 43 93 +2244 name_2244 44 94 +2245 name_2245 45 95 +2246 name_2246 46 96 +2247 name_2247 47 97 +2248 name_2248 48 98 +2249 name_2249 49 99 +2256 name_2256 26 56 +2257 name_2257 27 57 +2258 name_2258 28 58 +2259 name_2259 29 59 +2260 name_2260 30 60 +2261 name_2261 31 61 +2262 name_2262 32 62 +2263 name_2263 33 63 +2264 name_2264 34 64 +2265 name_2265 35 65 +2266 name_2266 36 66 +2267 name_2267 37 67 +2268 name_2268 38 68 +2269 name_2269 39 69 +2270 name_2270 40 70 +2271 name_2271 41 71 +2272 name_2272 42 72 +2273 name_2273 43 73 +2274 name_2274 44 74 +2275 name_2275 45 75 +2276 name_2276 46 76 +2277 name_2277 47 77 +2278 name_2278 48 78 +2279 name_2279 49 79 +2286 name_2286 26 86 +2287 name_2287 27 87 +2288 name_2288 28 88 +2289 name_2289 29 89 +2290 name_2290 30 90 +2291 name_2291 31 91 +2292 name_2292 32 92 +2293 name_2293 33 93 +2294 name_2294 34 94 +2295 name_2295 35 95 +2296 name_2296 36 96 +2297 name_2297 37 97 +2298 name_2298 38 98 +2299 name_2299 39 99 +2300 name_2300 40 50 +2301 name_2301 41 51 +2302 name_2302 42 52 +2303 name_2303 43 53 +2304 name_2304 44 54 +2305 name_2305 45 55 +2306 name_2306 46 56 +2307 name_2307 47 57 +2308 name_2308 48 58 +2309 name_2309 49 59 +2316 name_2316 26 66 +2317 name_2317 27 67 +2318 name_2318 28 68 +2319 name_2319 29 69 +2320 name_2320 30 70 +2321 name_2321 31 71 +2322 name_2322 32 72 +2323 name_2323 33 73 +2324 name_2324 34 74 +2325 name_2325 35 75 +2326 name_2326 36 76 +2327 name_2327 37 77 +2328 name_2328 38 78 +2329 name_2329 39 79 +2330 name_2330 40 80 +2331 name_2331 41 81 +2332 name_2332 42 82 +2333 name_2333 43 83 +2334 name_2334 44 84 +2335 name_2335 45 85 +2336 name_2336 46 86 +2337 name_2337 47 87 +2338 name_2338 48 88 +2339 name_2339 49 89 +2346 name_2346 26 96 +2347 name_2347 27 97 +2348 name_2348 28 98 +2349 name_2349 29 99 +2350 name_2350 30 50 +2351 name_2351 31 51 +2352 name_2352 32 52 +2353 name_2353 33 53 +2354 name_2354 34 54 +2355 name_2355 35 55 +2356 name_2356 36 56 +2357 name_2357 37 57 +2358 name_2358 38 58 +2359 name_2359 39 59 +2360 name_2360 40 60 +2361 name_2361 41 61 +2362 name_2362 42 62 +2363 name_2363 43 63 +2364 name_2364 44 64 +2365 name_2365 45 65 +2366 name_2366 46 66 +2367 name_2367 47 67 +2368 name_2368 48 68 +2369 name_2369 49 69 +2376 name_2376 26 76 +2377 name_2377 27 77 +2378 name_2378 28 78 +2379 name_2379 29 79 +2380 name_2380 30 80 +2381 name_2381 31 81 +2382 name_2382 32 82 +2383 name_2383 33 83 +2384 name_2384 34 84 +2385 name_2385 35 85 +2386 name_2386 36 86 +2387 name_2387 37 87 +2388 name_2388 38 88 +2389 name_2389 39 89 +2390 name_2390 40 90 +2391 name_2391 41 91 +2392 name_2392 42 92 +2393 name_2393 43 93 +2394 name_2394 44 94 +2395 name_2395 45 95 +2396 name_2396 46 96 +2397 name_2397 47 97 +2398 name_2398 48 98 +2399 name_2399 49 99 +2406 name_2406 26 56 +2407 name_2407 27 57 +2408 name_2408 28 58 +2409 name_2409 29 59 +2410 name_2410 30 60 +2411 name_2411 31 61 +2412 name_2412 32 62 +2413 name_2413 33 63 +2414 name_2414 34 64 +2415 name_2415 35 65 +2416 name_2416 36 66 +2417 name_2417 37 67 +2418 name_2418 38 68 +2419 name_2419 39 69 +2420 name_2420 40 70 +2421 name_2421 41 71 +2422 name_2422 42 72 +2423 name_2423 43 73 +2424 name_2424 44 74 +2425 name_2425 45 75 +2426 name_2426 46 76 +2427 name_2427 47 77 +2428 name_2428 48 78 +2429 name_2429 49 79 +2436 name_2436 26 86 +2437 name_2437 27 87 +2438 name_2438 28 88 +2439 name_2439 29 89 +2440 name_2440 30 90 +2441 name_2441 31 91 +2442 name_2442 32 92 +2443 name_2443 33 93 +2444 name_2444 34 94 +2445 name_2445 35 95 +2446 name_2446 36 96 +2447 name_2447 37 97 +2448 name_2448 38 98 +2449 name_2449 39 99 +2450 name_2450 40 50 +2451 name_2451 41 51 +2452 name_2452 42 52 +2453 name_2453 43 53 +2454 name_2454 44 54 +2455 name_2455 45 55 +2456 name_2456 46 56 +2457 name_2457 47 57 +2458 name_2458 48 58 +2459 name_2459 49 59 +2466 name_2466 26 66 +2467 name_2467 27 67 +2468 name_2468 28 68 +2469 name_2469 29 69 +2470 name_2470 30 70 +2471 name_2471 31 71 +2472 name_2472 32 72 +2473 name_2473 33 73 +2474 name_2474 34 74 +2475 name_2475 35 75 +2476 name_2476 36 76 +2477 name_2477 37 77 +2478 name_2478 38 78 +2479 name_2479 39 79 +2480 name_2480 40 80 +2481 name_2481 41 81 +2482 name_2482 42 82 +2483 name_2483 43 83 +2484 name_2484 44 84 +2485 name_2485 45 85 +2486 name_2486 46 86 +2487 name_2487 47 87 +2488 name_2488 48 88 +2489 name_2489 49 89 +2496 name_2496 26 96 +2497 name_2497 27 97 +2498 name_2498 28 98 +2499 name_2499 29 99 +2500 name_2500 30 50 +2501 name_2501 31 51 +2502 name_2502 32 52 +2503 name_2503 33 53 +2504 name_2504 34 54 +2505 name_2505 35 55 +2506 name_2506 36 56 +2507 name_2507 37 57 +2508 name_2508 38 58 +2509 name_2509 39 59 +2510 name_2510 40 60 +2511 name_2511 41 61 +2512 name_2512 42 62 +2513 name_2513 43 63 +2514 name_2514 44 64 +2515 name_2515 45 65 +2516 name_2516 46 66 +2517 name_2517 47 67 +2518 name_2518 48 68 +2519 name_2519 49 69 +2526 name_2526 26 76 +2527 name_2527 27 77 +2528 name_2528 28 78 +2529 name_2529 29 79 +2530 name_2530 30 80 +2531 name_2531 31 81 +2532 name_2532 32 82 +2533 name_2533 33 83 +2534 name_2534 34 84 +2535 name_2535 35 85 +2536 name_2536 36 86 +2537 name_2537 37 87 +2538 name_2538 38 88 +2539 name_2539 39 89 +2540 name_2540 40 90 +2541 name_2541 41 91 +2542 name_2542 42 92 +2543 name_2543 43 93 +2544 name_2544 44 94 +2545 name_2545 45 95 +2546 name_2546 46 96 +2547 name_2547 47 97 +2548 name_2548 48 98 +2549 name_2549 49 99 +2556 name_2556 26 56 +2557 name_2557 27 57 +2558 name_2558 28 58 +2559 name_2559 29 59 +2560 name_2560 30 60 +2561 name_2561 31 61 +2562 name_2562 32 62 +2563 name_2563 33 63 +2564 name_2564 34 64 +2565 name_2565 35 65 +2566 name_2566 36 66 +2567 name_2567 37 67 +2568 name_2568 38 68 +2569 name_2569 39 69 +2570 name_2570 40 70 +2571 name_2571 41 71 +2572 name_2572 42 72 +2573 name_2573 43 73 +2574 name_2574 44 74 +2575 name_2575 45 75 +2576 name_2576 46 76 +2577 name_2577 47 77 +2578 name_2578 48 78 +2579 name_2579 49 79 +2586 name_2586 26 86 +2587 name_2587 27 87 +2588 name_2588 28 88 +2589 name_2589 29 89 +2590 name_2590 30 90 +2591 name_2591 31 91 +2592 name_2592 32 92 +2593 name_2593 33 93 +2594 name_2594 34 94 +2595 name_2595 35 95 +2596 name_2596 36 96 +2597 name_2597 37 97 +2598 name_2598 38 98 +2599 name_2599 39 99 +2600 name_2600 40 50 +2601 name_2601 41 51 +2602 name_2602 42 52 +2603 name_2603 43 53 +2604 name_2604 44 54 +2605 name_2605 45 55 +2606 name_2606 46 56 +2607 name_2607 47 57 +2608 name_2608 48 58 +2609 name_2609 49 59 +2616 name_2616 26 66 +2617 name_2617 27 67 +2618 name_2618 28 68 +2619 name_2619 29 69 +2620 name_2620 30 70 +2621 name_2621 31 71 +2622 name_2622 32 72 +2623 name_2623 33 73 +2624 name_2624 34 74 +2625 name_2625 35 75 +2626 name_2626 36 76 +2627 name_2627 37 77 +2628 name_2628 38 78 +2629 name_2629 39 79 +2630 name_2630 40 80 +2631 name_2631 41 81 +2632 name_2632 42 82 +2633 name_2633 43 83 +2634 name_2634 44 84 +2635 name_2635 45 85 +2636 name_2636 46 86 +2637 name_2637 47 87 +2638 name_2638 48 88 +2639 name_2639 49 89 +2646 name_2646 26 96 +2647 name_2647 27 97 +2648 name_2648 28 98 +2649 name_2649 29 99 +2650 name_2650 30 50 +2651 name_2651 31 51 +2652 name_2652 32 52 +2653 name_2653 33 53 +2654 name_2654 34 54 +2655 name_2655 35 55 +2656 name_2656 36 56 +2657 name_2657 37 57 +2658 name_2658 38 58 +2659 name_2659 39 59 +2660 name_2660 40 60 +2661 name_2661 41 61 +2662 name_2662 42 62 +2663 name_2663 43 63 +2664 name_2664 44 64 +2665 name_2665 45 65 +2666 name_2666 46 66 +2667 name_2667 47 67 +2668 name_2668 48 68 +2669 name_2669 49 69 +2676 name_2676 26 76 +2677 name_2677 27 77 +2678 name_2678 28 78 +2679 name_2679 29 79 +2680 name_2680 30 80 +2681 name_2681 31 81 +2682 name_2682 32 82 +2683 name_2683 33 83 +2684 name_2684 34 84 +2685 name_2685 35 85 +2686 name_2686 36 86 +2687 name_2687 37 87 +2688 name_2688 38 88 +2689 name_2689 39 89 +2690 name_2690 40 90 +2691 name_2691 41 91 +2692 name_2692 42 92 +2693 name_2693 43 93 +2694 name_2694 44 94 +2695 name_2695 45 95 +2696 name_2696 46 96 +2697 name_2697 47 97 +2698 name_2698 48 98 +2699 name_2699 49 99 +2706 name_2706 26 56 +2707 name_2707 27 57 +2708 name_2708 28 58 +2709 name_2709 29 59 +2710 name_2710 30 60 +2711 name_2711 31 61 +2712 name_2712 32 62 +2713 name_2713 33 63 +2714 name_2714 34 64 +2715 name_2715 35 65 +2716 name_2716 36 66 +2717 name_2717 37 67 +2718 name_2718 38 68 +2719 name_2719 39 69 +2720 name_2720 40 70 +2721 name_2721 41 71 +2722 name_2722 42 72 +2723 name_2723 43 73 +2724 name_2724 44 74 +2725 name_2725 45 75 +2726 name_2726 46 76 +2727 name_2727 47 77 +2728 name_2728 48 78 +2729 name_2729 49 79 +2736 name_2736 26 86 +2737 name_2737 27 87 +2738 name_2738 28 88 +2739 name_2739 29 89 +2740 name_2740 30 90 +2741 name_2741 31 91 +2742 name_2742 32 92 +2743 name_2743 33 93 +2744 name_2744 34 94 +2745 name_2745 35 95 +2746 name_2746 36 96 +2747 name_2747 37 97 +2748 name_2748 38 98 +2749 name_2749 39 99 +2750 name_2750 40 50 +2751 name_2751 41 51 +2752 name_2752 42 52 +2753 name_2753 43 53 +2754 name_2754 44 54 +2755 name_2755 45 55 +2756 name_2756 46 56 +2757 name_2757 47 57 +2758 name_2758 48 58 +2759 name_2759 49 59 +2766 name_2766 26 66 +2767 name_2767 27 67 +2768 name_2768 28 68 +2769 name_2769 29 69 +2770 name_2770 30 70 +2771 name_2771 31 71 +2772 name_2772 32 72 +2773 name_2773 33 73 +2774 name_2774 34 74 +2775 name_2775 35 75 +2776 name_2776 36 76 +2777 name_2777 37 77 +2778 name_2778 38 78 +2779 name_2779 39 79 +2780 name_2780 40 80 +2781 name_2781 41 81 +2782 name_2782 42 82 +2783 name_2783 43 83 +2784 name_2784 44 84 +2785 name_2785 45 85 +2786 name_2786 46 86 +2787 name_2787 47 87 +2788 name_2788 48 88 +2789 name_2789 49 89 +2796 name_2796 26 96 +2797 name_2797 27 97 +2798 name_2798 28 98 +2799 name_2799 29 99 +2800 name_2800 30 50 +2801 name_2801 31 51 +2802 name_2802 32 52 +2803 name_2803 33 53 +2804 name_2804 34 54 +2805 name_2805 35 55 +2806 name_2806 36 56 +2807 name_2807 37 57 +2808 name_2808 38 58 +2809 name_2809 39 59 +2810 name_2810 40 60 +2811 name_2811 41 61 +2812 name_2812 42 62 +2813 name_2813 43 63 +2814 name_2814 44 64 +2815 name_2815 45 65 +2816 name_2816 46 66 +2817 name_2817 47 67 +2818 name_2818 48 68 +2819 name_2819 49 69 +2826 name_2826 26 76 +2827 name_2827 27 77 +2828 name_2828 28 78 +2829 name_2829 29 79 +2830 name_2830 30 80 +2831 name_2831 31 81 +2832 name_2832 32 82 +2833 name_2833 33 83 +2834 name_2834 34 84 +2835 name_2835 35 85 +2836 name_2836 36 86 +2837 name_2837 37 87 +2838 name_2838 38 88 +2839 name_2839 39 89 +2840 name_2840 40 90 +2841 name_2841 41 91 +2842 name_2842 42 92 +2843 name_2843 43 93 +2844 name_2844 44 94 +2845 name_2845 45 95 +2846 name_2846 46 96 +2847 name_2847 47 97 +2848 name_2848 48 98 +2849 name_2849 49 99 +2856 name_2856 26 56 +2857 name_2857 27 57 +2858 name_2858 28 58 +2859 name_2859 29 59 +2860 name_2860 30 60 +2861 name_2861 31 61 +2862 name_2862 32 62 +2863 name_2863 33 63 +2864 name_2864 34 64 +2865 name_2865 35 65 +2866 name_2866 36 66 +2867 name_2867 37 67 +2868 name_2868 38 68 +2869 name_2869 39 69 +2870 name_2870 40 70 +2871 name_2871 41 71 +2872 name_2872 42 72 +2873 name_2873 43 73 +2874 name_2874 44 74 +2875 name_2875 45 75 +2876 name_2876 46 76 +2877 name_2877 47 77 +2878 name_2878 48 78 +2879 name_2879 49 79 +2886 name_2886 26 86 +2887 name_2887 27 87 +2888 name_2888 28 88 +2889 name_2889 29 89 +2890 name_2890 30 90 +2891 name_2891 31 91 +2892 name_2892 32 92 +2893 name_2893 33 93 +2894 name_2894 34 94 +2895 name_2895 35 95 +2896 name_2896 36 96 +2897 name_2897 37 97 +2898 name_2898 38 98 +2899 name_2899 39 99 +2900 name_2900 40 50 +2901 name_2901 41 51 +2902 name_2902 42 52 +2903 name_2903 43 53 +2904 name_2904 44 54 +2905 name_2905 45 55 +2906 name_2906 46 56 +2907 name_2907 47 57 +2908 name_2908 48 58 +2909 name_2909 49 59 +2916 name_2916 26 66 +2917 name_2917 27 67 +2918 name_2918 28 68 +2919 name_2919 29 69 +2920 name_2920 30 70 +2921 name_2921 31 71 +2922 name_2922 32 72 +2923 name_2923 33 73 +2924 name_2924 34 74 +2925 name_2925 35 75 +2926 name_2926 36 76 +2927 name_2927 37 77 +2928 name_2928 38 78 +2929 name_2929 39 79 +2930 name_2930 40 80 +2931 name_2931 41 81 +2932 name_2932 42 82 +2933 name_2933 43 83 +2934 name_2934 44 84 +2935 name_2935 45 85 +2936 name_2936 46 86 +2937 name_2937 47 87 +2938 name_2938 48 88 +2939 name_2939 49 89 +2946 name_2946 26 96 +2947 name_2947 27 97 +2948 name_2948 28 98 +2949 name_2949 29 99 +2950 name_2950 30 50 +2951 name_2951 31 51 +2952 name_2952 32 52 +2953 name_2953 33 53 +2954 name_2954 34 54 +2955 name_2955 35 55 +2956 name_2956 36 56 +2957 name_2957 37 57 +2958 name_2958 38 58 +2959 name_2959 39 59 +2960 name_2960 40 60 +2961 name_2961 41 61 +2962 name_2962 42 62 +2963 name_2963 43 63 +2964 name_2964 44 64 +2965 name_2965 45 65 +2966 name_2966 46 66 +2967 name_2967 47 67 +2968 name_2968 48 68 +2969 name_2969 49 69 +2976 name_2976 26 76 +2977 name_2977 27 77 +2978 name_2978 28 78 +2979 name_2979 29 79 +2980 name_2980 30 80 +2981 name_2981 31 81 +2982 name_2982 32 82 +2983 name_2983 33 83 +2984 name_2984 34 84 +2985 name_2985 35 85 +2986 name_2986 36 86 +2987 name_2987 37 87 +2988 name_2988 38 88 +2989 name_2989 39 89 +2990 name_2990 40 90 +2991 name_2991 41 91 +2992 name_2992 42 92 +2993 name_2993 43 93 +2994 name_2994 44 94 +2995 name_2995 45 95 +2996 name_2996 46 96 +2997 name_2997 47 97 +2998 name_2998 48 98 +2999 name_2999 49 99 +3006 name_3006 26 56 +3007 name_3007 27 57 +3008 name_3008 28 58 +3009 name_3009 29 59 +3010 name_3010 30 60 +3011 name_3011 31 61 +3012 name_3012 32 62 +3013 name_3013 33 63 +3014 name_3014 34 64 +3015 name_3015 35 65 +3016 name_3016 36 66 +3017 name_3017 37 67 +3018 name_3018 38 68 +3019 name_3019 39 69 +3020 name_3020 40 70 +3021 name_3021 41 71 +3022 name_3022 42 72 +3023 name_3023 43 73 +3024 name_3024 44 74 +3025 name_3025 45 75 +3026 name_3026 46 76 +3027 name_3027 47 77 +3028 name_3028 48 78 +3029 name_3029 49 79 +3036 name_3036 26 86 +3037 name_3037 27 87 +3038 name_3038 28 88 +3039 name_3039 29 89 +3040 name_3040 30 90 +3041 name_3041 31 91 +3042 name_3042 32 92 +3043 name_3043 33 93 +3044 name_3044 34 94 +3045 name_3045 35 95 +3046 name_3046 36 96 +3047 name_3047 37 97 +3048 name_3048 38 98 +3049 name_3049 39 99 +3050 name_3050 40 50 +3051 name_3051 41 51 +3052 name_3052 42 52 +3053 name_3053 43 53 +3054 name_3054 44 54 +3055 name_3055 45 55 +3056 name_3056 46 56 +3057 name_3057 47 57 +3058 name_3058 48 58 +3059 name_3059 49 59 +3066 name_3066 26 66 +3067 name_3067 27 67 +3068 name_3068 28 68 +3069 name_3069 29 69 +3070 name_3070 30 70 +3071 name_3071 31 71 +3072 name_3072 32 72 +3073 name_3073 33 73 +3074 name_3074 34 74 +3075 name_3075 35 75 +3076 name_3076 36 76 +3077 name_3077 37 77 +3078 name_3078 38 78 +3079 name_3079 39 79 +3080 name_3080 40 80 +3081 name_3081 41 81 +3082 name_3082 42 82 +3083 name_3083 43 83 +3084 name_3084 44 84 +3085 name_3085 45 85 +3086 name_3086 46 86 +3087 name_3087 47 87 +3088 name_3088 48 88 +3089 name_3089 49 89 +3096 name_3096 26 96 +3097 name_3097 27 97 +3098 name_3098 28 98 +3099 name_3099 29 99 +3100 name_3100 30 50 +3101 name_3101 31 51 +3102 name_3102 32 52 +3103 name_3103 33 53 +3104 name_3104 34 54 +3105 name_3105 35 55 +3106 name_3106 36 56 +3107 name_3107 37 57 +3108 name_3108 38 58 +3109 name_3109 39 59 +3110 name_3110 40 60 +3111 name_3111 41 61 +3112 name_3112 42 62 +3113 name_3113 43 63 +3114 name_3114 44 64 +3115 name_3115 45 65 +3116 name_3116 46 66 +3117 name_3117 47 67 +3118 name_3118 48 68 +3119 name_3119 49 69 +3126 name_3126 26 76 +3127 name_3127 27 77 +3128 name_3128 28 78 +3129 name_3129 29 79 +3130 name_3130 30 80 +3131 name_3131 31 81 +3132 name_3132 32 82 +3133 name_3133 33 83 +3134 name_3134 34 84 +3135 name_3135 35 85 +3136 name_3136 36 86 +3137 name_3137 37 87 +3138 name_3138 38 88 +3139 name_3139 39 89 +3140 name_3140 40 90 +3141 name_3141 41 91 +3142 name_3142 42 92 +3143 name_3143 43 93 +3144 name_3144 44 94 +3145 name_3145 45 95 +3146 name_3146 46 96 +3147 name_3147 47 97 +3148 name_3148 48 98 +3149 name_3149 49 99 +3156 name_3156 26 56 +3157 name_3157 27 57 +3158 name_3158 28 58 +3159 name_3159 29 59 +3160 name_3160 30 60 +3161 name_3161 31 61 +3162 name_3162 32 62 +3163 name_3163 33 63 +3164 name_3164 34 64 +3165 name_3165 35 65 +3166 name_3166 36 66 +3167 name_3167 37 67 +3168 name_3168 38 68 +3169 name_3169 39 69 +3170 name_3170 40 70 +3171 name_3171 41 71 +3172 name_3172 42 72 +3173 name_3173 43 73 +3174 name_3174 44 74 +3175 name_3175 45 75 +3176 name_3176 46 76 +3177 name_3177 47 77 +3178 name_3178 48 78 +3179 name_3179 49 79 +3186 name_3186 26 86 +3187 name_3187 27 87 +3188 name_3188 28 88 +3189 name_3189 29 89 +3190 name_3190 30 90 +3191 name_3191 31 91 +3192 name_3192 32 92 +3193 name_3193 33 93 +3194 name_3194 34 94 +3195 name_3195 35 95 +3196 name_3196 36 96 +3197 name_3197 37 97 +3198 name_3198 38 98 +3199 name_3199 39 99 +3200 name_3200 40 50 +3201 name_3201 41 51 +3202 name_3202 42 52 +3203 name_3203 43 53 +3204 name_3204 44 54 +3205 name_3205 45 55 +3206 name_3206 46 56 +3207 name_3207 47 57 +3208 name_3208 48 58 +3209 name_3209 49 59 +3216 name_3216 26 66 +3217 name_3217 27 67 +3218 name_3218 28 68 +3219 name_3219 29 69 +3220 name_3220 30 70 +3221 name_3221 31 71 +3222 name_3222 32 72 +3223 name_3223 33 73 +3224 name_3224 34 74 +3225 name_3225 35 75 +3226 name_3226 36 76 +3227 name_3227 37 77 +3228 name_3228 38 78 +3229 name_3229 39 79 +3230 name_3230 40 80 +3231 name_3231 41 81 +3232 name_3232 42 82 +3233 name_3233 43 83 +3234 name_3234 44 84 +3235 name_3235 45 85 +3236 name_3236 46 86 +3237 name_3237 47 87 +3238 name_3238 48 88 +3239 name_3239 49 89 +3246 name_3246 26 96 +3247 name_3247 27 97 +3248 name_3248 28 98 +3249 name_3249 29 99 +3250 name_3250 30 50 +3251 name_3251 31 51 +3252 name_3252 32 52 +3253 name_3253 33 53 +3254 name_3254 34 54 +3255 name_3255 35 55 +3256 name_3256 36 56 +3257 name_3257 37 57 +3258 name_3258 38 58 +3259 name_3259 39 59 +3260 name_3260 40 60 +3261 name_3261 41 61 +3262 name_3262 42 62 +3263 name_3263 43 63 +3264 name_3264 44 64 +3265 name_3265 45 65 +3266 name_3266 46 66 +3267 name_3267 47 67 +3268 name_3268 48 68 +3269 name_3269 49 69 +3276 name_3276 26 76 +3277 name_3277 27 77 +3278 name_3278 28 78 +3279 name_3279 29 79 +3280 name_3280 30 80 +3281 name_3281 31 81 +3282 name_3282 32 82 +3283 name_3283 33 83 +3284 name_3284 34 84 +3285 name_3285 35 85 +3286 name_3286 36 86 +3287 name_3287 37 87 +3288 name_3288 38 88 +3289 name_3289 39 89 +3290 name_3290 40 90 +3291 name_3291 41 91 +3292 name_3292 42 92 +3293 name_3293 43 93 +3294 name_3294 44 94 +3295 name_3295 45 95 +3296 name_3296 46 96 +3297 name_3297 47 97 +3298 name_3298 48 98 +3299 name_3299 49 99 +3306 name_3306 26 56 +3307 name_3307 27 57 +3308 name_3308 28 58 +3309 name_3309 29 59 +3310 name_3310 30 60 +3311 name_3311 31 61 +3312 name_3312 32 62 +3313 name_3313 33 63 +3314 name_3314 34 64 +3315 name_3315 35 65 +3316 name_3316 36 66 +3317 name_3317 37 67 +3318 name_3318 38 68 +3319 name_3319 39 69 +3320 name_3320 40 70 +3321 name_3321 41 71 +3322 name_3322 42 72 +3323 name_3323 43 73 +3324 name_3324 44 74 +3325 name_3325 45 75 +3326 name_3326 46 76 +3327 name_3327 47 77 +3328 name_3328 48 78 +3329 name_3329 49 79 +3336 name_3336 26 86 +3337 name_3337 27 87 +3338 name_3338 28 88 +3339 name_3339 29 89 +3340 name_3340 30 90 +3341 name_3341 31 91 +3342 name_3342 32 92 +3343 name_3343 33 93 +3344 name_3344 34 94 +3345 name_3345 35 95 +3346 name_3346 36 96 +3347 name_3347 37 97 +3348 name_3348 38 98 +3349 name_3349 39 99 +3350 name_3350 40 50 +3351 name_3351 41 51 +3352 name_3352 42 52 +3353 name_3353 43 53 +3354 name_3354 44 54 +3355 name_3355 45 55 +3356 name_3356 46 56 +3357 name_3357 47 57 +3358 name_3358 48 58 +3359 name_3359 49 59 +3366 name_3366 26 66 +3367 name_3367 27 67 +3368 name_3368 28 68 +3369 name_3369 29 69 +3370 name_3370 30 70 +3371 name_3371 31 71 +3372 name_3372 32 72 +3373 name_3373 33 73 +3374 name_3374 34 74 +3375 name_3375 35 75 +3376 name_3376 36 76 +3377 name_3377 37 77 +3378 name_3378 38 78 +3379 name_3379 39 79 +3380 name_3380 40 80 +3381 name_3381 41 81 +3382 name_3382 42 82 +3383 name_3383 43 83 +3384 name_3384 44 84 +3385 name_3385 45 85 +3386 name_3386 46 86 +3387 name_3387 47 87 +3388 name_3388 48 88 +3389 name_3389 49 89 +3396 name_3396 26 96 +3397 name_3397 27 97 +3398 name_3398 28 98 +3399 name_3399 29 99 +3400 name_3400 30 50 +3401 name_3401 31 51 +3402 name_3402 32 52 +3403 name_3403 33 53 +3404 name_3404 34 54 +3405 name_3405 35 55 +3406 name_3406 36 56 +3407 name_3407 37 57 +3408 name_3408 38 58 +3409 name_3409 39 59 +3410 name_3410 40 60 +3411 name_3411 41 61 +3412 name_3412 42 62 +3413 name_3413 43 63 +3414 name_3414 44 64 +3415 name_3415 45 65 +3416 name_3416 46 66 +3417 name_3417 47 67 +3418 name_3418 48 68 +3419 name_3419 49 69 +3426 name_3426 26 76 +3427 name_3427 27 77 +3428 name_3428 28 78 +3429 name_3429 29 79 +3430 name_3430 30 80 +3431 name_3431 31 81 +3432 name_3432 32 82 +3433 name_3433 33 83 +3434 name_3434 34 84 +3435 name_3435 35 85 +3436 name_3436 36 86 +3437 name_3437 37 87 +3438 name_3438 38 88 +3439 name_3439 39 89 +3440 name_3440 40 90 +3441 name_3441 41 91 +3442 name_3442 42 92 +3443 name_3443 43 93 +3444 name_3444 44 94 +3445 name_3445 45 95 +3446 name_3446 46 96 +3447 name_3447 47 97 +3448 name_3448 48 98 +3449 name_3449 49 99 +3456 name_3456 26 56 +3457 name_3457 27 57 +3458 name_3458 28 58 +3459 name_3459 29 59 +3460 name_3460 30 60 +3461 name_3461 31 61 +3462 name_3462 32 62 +3463 name_3463 33 63 +3464 name_3464 34 64 +3465 name_3465 35 65 +3466 name_3466 36 66 +3467 name_3467 37 67 +3468 name_3468 38 68 +3469 name_3469 39 69 +3470 name_3470 40 70 +3471 name_3471 41 71 +3472 name_3472 42 72 +3473 name_3473 43 73 +3474 name_3474 44 74 +3475 name_3475 45 75 +3476 name_3476 46 76 +3477 name_3477 47 77 +3478 name_3478 48 78 +3479 name_3479 49 79 +3486 name_3486 26 86 +3487 name_3487 27 87 +3488 name_3488 28 88 +3489 name_3489 29 89 +3490 name_3490 30 90 +3491 name_3491 31 91 +3492 name_3492 32 92 +3493 name_3493 33 93 +3494 name_3494 34 94 +3495 name_3495 35 95 +3496 name_3496 36 96 +3497 name_3497 37 97 +3498 name_3498 38 98 +3499 name_3499 39 99 +3500 name_3500 40 50 +3501 name_3501 41 51 +3502 name_3502 42 52 +3503 name_3503 43 53 +3504 name_3504 44 54 +3505 name_3505 45 55 +3506 name_3506 46 56 +3507 name_3507 47 57 +3508 name_3508 48 58 +3509 name_3509 49 59 +3516 name_3516 26 66 +3517 name_3517 27 67 +3518 name_3518 28 68 +3519 name_3519 29 69 +3520 name_3520 30 70 +3521 name_3521 31 71 +3522 name_3522 32 72 +3523 name_3523 33 73 +3524 name_3524 34 74 +3525 name_3525 35 75 +3526 name_3526 36 76 +3527 name_3527 37 77 +3528 name_3528 38 78 +3529 name_3529 39 79 +3530 name_3530 40 80 +3531 name_3531 41 81 +3532 name_3532 42 82 +3533 name_3533 43 83 +3534 name_3534 44 84 +3535 name_3535 45 85 +3536 name_3536 46 86 +3537 name_3537 47 87 +3538 name_3538 48 88 +3539 name_3539 49 89 +3546 name_3546 26 96 +3547 name_3547 27 97 +3548 name_3548 28 98 +3549 name_3549 29 99 +3550 name_3550 30 50 +3551 name_3551 31 51 +3552 name_3552 32 52 +3553 name_3553 33 53 +3554 name_3554 34 54 +3555 name_3555 35 55 +3556 name_3556 36 56 +3557 name_3557 37 57 +3558 name_3558 38 58 +3559 name_3559 39 59 +3560 name_3560 40 60 +3561 name_3561 41 61 +3562 name_3562 42 62 +3563 name_3563 43 63 +3564 name_3564 44 64 +3565 name_3565 45 65 +3566 name_3566 46 66 +3567 name_3567 47 67 +3568 name_3568 48 68 +3569 name_3569 49 69 +3576 name_3576 26 76 +3577 name_3577 27 77 +3578 name_3578 28 78 +3579 name_3579 29 79 +3580 name_3580 30 80 +3581 name_3581 31 81 +3582 name_3582 32 82 +3583 name_3583 33 83 +3584 name_3584 34 84 +3585 name_3585 35 85 +3586 name_3586 36 86 +3587 name_3587 37 87 +3588 name_3588 38 88 +3589 name_3589 39 89 +3590 name_3590 40 90 +3591 name_3591 41 91 +3592 name_3592 42 92 +3593 name_3593 43 93 +3594 name_3594 44 94 +3595 name_3595 45 95 +3596 name_3596 46 96 +3597 name_3597 47 97 +3598 name_3598 48 98 +3599 name_3599 49 99 +3606 name_3606 26 56 +3607 name_3607 27 57 +3608 name_3608 28 58 +3609 name_3609 29 59 +3610 name_3610 30 60 +3611 name_3611 31 61 +3612 name_3612 32 62 +3613 name_3613 33 63 +3614 name_3614 34 64 +3615 name_3615 35 65 +3616 name_3616 36 66 +3617 name_3617 37 67 +3618 name_3618 38 68 +3619 name_3619 39 69 +3620 name_3620 40 70 +3621 name_3621 41 71 +3622 name_3622 42 72 +3623 name_3623 43 73 +3624 name_3624 44 74 +3625 name_3625 45 75 +3626 name_3626 46 76 +3627 name_3627 47 77 +3628 name_3628 48 78 +3629 name_3629 49 79 +3636 name_3636 26 86 +3637 name_3637 27 87 +3638 name_3638 28 88 +3639 name_3639 29 89 +3640 name_3640 30 90 +3641 name_3641 31 91 +3642 name_3642 32 92 +3643 name_3643 33 93 +3644 name_3644 34 94 +3645 name_3645 35 95 +3646 name_3646 36 96 +3647 name_3647 37 97 +3648 name_3648 38 98 +3649 name_3649 39 99 +3650 name_3650 40 50 +3651 name_3651 41 51 +3652 name_3652 42 52 +3653 name_3653 43 53 +3654 name_3654 44 54 +3655 name_3655 45 55 +3656 name_3656 46 56 +3657 name_3657 47 57 +3658 name_3658 48 58 +3659 name_3659 49 59 +3666 name_3666 26 66 +3667 name_3667 27 67 +3668 name_3668 28 68 +3669 name_3669 29 69 +3670 name_3670 30 70 +3671 name_3671 31 71 +3672 name_3672 32 72 +3673 name_3673 33 73 +3674 name_3674 34 74 +3675 name_3675 35 75 +3676 name_3676 36 76 +3677 name_3677 37 77 +3678 name_3678 38 78 +3679 name_3679 39 79 +3680 name_3680 40 80 +3681 name_3681 41 81 +3682 name_3682 42 82 +3683 name_3683 43 83 +3684 name_3684 44 84 +3685 name_3685 45 85 +3686 name_3686 46 86 +3687 name_3687 47 87 +3688 name_3688 48 88 +3689 name_3689 49 89 +3696 name_3696 26 96 +3697 name_3697 27 97 +3698 name_3698 28 98 +3699 name_3699 29 99 +3700 name_3700 30 50 +3701 name_3701 31 51 +3702 name_3702 32 52 +3703 name_3703 33 53 +3704 name_3704 34 54 +3705 name_3705 35 55 +3706 name_3706 36 56 +3707 name_3707 37 57 +3708 name_3708 38 58 +3709 name_3709 39 59 +3710 name_3710 40 60 +3711 name_3711 41 61 +3712 name_3712 42 62 +3713 name_3713 43 63 +3714 name_3714 44 64 +3715 name_3715 45 65 +3716 name_3716 46 66 +3717 name_3717 47 67 +3718 name_3718 48 68 +3719 name_3719 49 69 +3726 name_3726 26 76 +3727 name_3727 27 77 +3728 name_3728 28 78 +3729 name_3729 29 79 +3730 name_3730 30 80 +3731 name_3731 31 81 +3732 name_3732 32 82 +3733 name_3733 33 83 +3734 name_3734 34 84 +3735 name_3735 35 85 +3736 name_3736 36 86 +3737 name_3737 37 87 +3738 name_3738 38 88 +3739 name_3739 39 89 +3740 name_3740 40 90 +3741 name_3741 41 91 +3742 name_3742 42 92 +3743 name_3743 43 93 +3744 name_3744 44 94 +3745 name_3745 45 95 +3746 name_3746 46 96 +3747 name_3747 47 97 +3748 name_3748 48 98 +3749 name_3749 49 99 +3756 name_3756 26 56 +3757 name_3757 27 57 +3758 name_3758 28 58 +3759 name_3759 29 59 +3760 name_3760 30 60 +3761 name_3761 31 61 +3762 name_3762 32 62 +3763 name_3763 33 63 +3764 name_3764 34 64 +3765 name_3765 35 65 +3766 name_3766 36 66 +3767 name_3767 37 67 +3768 name_3768 38 68 +3769 name_3769 39 69 +3770 name_3770 40 70 +3771 name_3771 41 71 +3772 name_3772 42 72 +3773 name_3773 43 73 +3774 name_3774 44 74 +3775 name_3775 45 75 +3776 name_3776 46 76 +3777 name_3777 47 77 +3778 name_3778 48 78 +3779 name_3779 49 79 +3786 name_3786 26 86 +3787 name_3787 27 87 +3788 name_3788 28 88 +3789 name_3789 29 89 +3790 name_3790 30 90 +3791 name_3791 31 91 +3792 name_3792 32 92 +3793 name_3793 33 93 +3794 name_3794 34 94 +3795 name_3795 35 95 +3796 name_3796 36 96 +3797 name_3797 37 97 +3798 name_3798 38 98 +3799 name_3799 39 99 +3800 name_3800 40 50 +3801 name_3801 41 51 +3802 name_3802 42 52 +3803 name_3803 43 53 +3804 name_3804 44 54 +3805 name_3805 45 55 +3806 name_3806 46 56 +3807 name_3807 47 57 +3808 name_3808 48 58 +3809 name_3809 49 59 +3816 name_3816 26 66 +3817 name_3817 27 67 +3818 name_3818 28 68 +3819 name_3819 29 69 +3820 name_3820 30 70 +3821 name_3821 31 71 +3822 name_3822 32 72 +3823 name_3823 33 73 +3824 name_3824 34 74 +3825 name_3825 35 75 +3826 name_3826 36 76 +3827 name_3827 37 77 +3828 name_3828 38 78 +3829 name_3829 39 79 +3830 name_3830 40 80 +3831 name_3831 41 81 +3832 name_3832 42 82 +3833 name_3833 43 83 +3834 name_3834 44 84 +3835 name_3835 45 85 +3836 name_3836 46 86 +3837 name_3837 47 87 +3838 name_3838 48 88 +3839 name_3839 49 89 +3846 name_3846 26 96 +3847 name_3847 27 97 +3848 name_3848 28 98 +3849 name_3849 29 99 +3850 name_3850 30 50 +3851 name_3851 31 51 +3852 name_3852 32 52 +3853 name_3853 33 53 +3854 name_3854 34 54 +3855 name_3855 35 55 +3856 name_3856 36 56 +3857 name_3857 37 57 +3858 name_3858 38 58 +3859 name_3859 39 59 +3860 name_3860 40 60 +3861 name_3861 41 61 +3862 name_3862 42 62 +3863 name_3863 43 63 +3864 name_3864 44 64 +3865 name_3865 45 65 +3866 name_3866 46 66 +3867 name_3867 47 67 +3868 name_3868 48 68 +3869 name_3869 49 69 +3876 name_3876 26 76 +3877 name_3877 27 77 +3878 name_3878 28 78 +3879 name_3879 29 79 +3880 name_3880 30 80 +3881 name_3881 31 81 +3882 name_3882 32 82 +3883 name_3883 33 83 +3884 name_3884 34 84 +3885 name_3885 35 85 +3886 name_3886 36 86 +3887 name_3887 37 87 +3888 name_3888 38 88 +3889 name_3889 39 89 +3890 name_3890 40 90 +3891 name_3891 41 91 +3892 name_3892 42 92 +3893 name_3893 43 93 +3894 name_3894 44 94 +3895 name_3895 45 95 +3896 name_3896 46 96 +3897 name_3897 47 97 +3898 name_3898 48 98 +3899 name_3899 49 99 +3906 name_3906 26 56 +3907 name_3907 27 57 +3908 name_3908 28 58 +3909 name_3909 29 59 +3910 name_3910 30 60 +3911 name_3911 31 61 +3912 name_3912 32 62 +3913 name_3913 33 63 +3914 name_3914 34 64 +3915 name_3915 35 65 +3916 name_3916 36 66 +3917 name_3917 37 67 +3918 name_3918 38 68 +3919 name_3919 39 69 +3920 name_3920 40 70 +3921 name_3921 41 71 +3922 name_3922 42 72 +3923 name_3923 43 73 +3924 name_3924 44 74 +3925 name_3925 45 75 +3926 name_3926 46 76 +3927 name_3927 47 77 +3928 name_3928 48 78 +3929 name_3929 49 79 +3936 name_3936 26 86 +3937 name_3937 27 87 +3938 name_3938 28 88 +3939 name_3939 29 89 +3940 name_3940 30 90 +3941 name_3941 31 91 +3942 name_3942 32 92 +3943 name_3943 33 93 +3944 name_3944 34 94 +3945 name_3945 35 95 +3946 name_3946 36 96 +3947 name_3947 37 97 +3948 name_3948 38 98 +3949 name_3949 39 99 +3950 name_3950 40 50 +3951 name_3951 41 51 +3952 name_3952 42 52 +3953 name_3953 43 53 +3954 name_3954 44 54 +3955 name_3955 45 55 +3956 name_3956 46 56 +3957 name_3957 47 57 +3958 name_3958 48 58 +3959 name_3959 49 59 +3966 name_3966 26 66 +3967 name_3967 27 67 +3968 name_3968 28 68 +3969 name_3969 29 69 +3970 name_3970 30 70 +3971 name_3971 31 71 +3972 name_3972 32 72 +3973 name_3973 33 73 +3974 name_3974 34 74 +3975 name_3975 35 75 +3976 name_3976 36 76 +3977 name_3977 37 77 +3978 name_3978 38 78 +3979 name_3979 39 79 +3980 name_3980 40 80 +3981 name_3981 41 81 +3982 name_3982 42 82 +3983 name_3983 43 83 +3984 name_3984 44 84 +3985 name_3985 45 85 +3986 name_3986 46 86 +3987 name_3987 47 87 +3988 name_3988 48 88 +3989 name_3989 49 89 +3996 name_3996 26 96 +3997 name_3997 27 97 +3998 name_3998 28 98 +3999 name_3999 29 99 +4000 name_4000 30 50 +4001 name_4001 31 51 +4002 name_4002 32 52 +4003 name_4003 33 53 +4004 name_4004 34 54 +4005 name_4005 35 55 +4006 name_4006 36 56 +4007 name_4007 37 57 +4008 name_4008 38 58 +4009 name_4009 39 59 +4010 name_4010 40 60 +4011 name_4011 41 61 +4012 name_4012 42 62 +4013 name_4013 43 63 +4014 name_4014 44 64 +4015 name_4015 45 65 +4016 name_4016 46 66 +4017 name_4017 47 67 +4018 name_4018 48 68 +4019 name_4019 49 69 +4026 name_4026 26 76 +4027 name_4027 27 77 +4028 name_4028 28 78 +4029 name_4029 29 79 +4030 name_4030 30 80 +4031 name_4031 31 81 +4032 name_4032 32 82 +4033 name_4033 33 83 +4034 name_4034 34 84 +4035 name_4035 35 85 +4036 name_4036 36 86 +4037 name_4037 37 87 +4038 name_4038 38 88 +4039 name_4039 39 89 +4040 name_4040 40 90 +4041 name_4041 41 91 +4042 name_4042 42 92 +4043 name_4043 43 93 +4044 name_4044 44 94 +4045 name_4045 45 95 +4046 name_4046 46 96 +4047 name_4047 47 97 +4048 name_4048 48 98 +4049 name_4049 49 99 +4056 name_4056 26 56 +4057 name_4057 27 57 +4058 name_4058 28 58 +4059 name_4059 29 59 +4060 name_4060 30 60 +4061 name_4061 31 61 +4062 name_4062 32 62 +4063 name_4063 33 63 +4064 name_4064 34 64 +4065 name_4065 35 65 +4066 name_4066 36 66 +4067 name_4067 37 67 +4068 name_4068 38 68 +4069 name_4069 39 69 +4070 name_4070 40 70 +4071 name_4071 41 71 +4072 name_4072 42 72 +4073 name_4073 43 73 +4074 name_4074 44 74 +4075 name_4075 45 75 +4076 name_4076 46 76 +4077 name_4077 47 77 +4078 name_4078 48 78 +4079 name_4079 49 79 +4086 name_4086 26 86 +4087 name_4087 27 87 +4088 name_4088 28 88 +4089 name_4089 29 89 +4090 name_4090 30 90 +4091 name_4091 31 91 +4092 name_4092 32 92 +4093 name_4093 33 93 +4094 name_4094 34 94 +4095 name_4095 35 95 +4096 name_4096 36 96 +4097 name_4097 37 97 +4098 name_4098 38 98 +4099 name_4099 39 99 +4100 name_4100 40 50 +4101 name_4101 41 51 +4102 name_4102 42 52 +4103 name_4103 43 53 +4104 name_4104 44 54 +4105 name_4105 45 55 +4106 name_4106 46 56 +4107 name_4107 47 57 +4108 name_4108 48 58 +4109 name_4109 49 59 +4116 name_4116 26 66 +4117 name_4117 27 67 +4118 name_4118 28 68 +4119 name_4119 29 69 +4120 name_4120 30 70 +4121 name_4121 31 71 +4122 name_4122 32 72 +4123 name_4123 33 73 +4124 name_4124 34 74 +4125 name_4125 35 75 +4126 name_4126 36 76 +4127 name_4127 37 77 +4128 name_4128 38 78 +4129 name_4129 39 79 +4130 name_4130 40 80 +4131 name_4131 41 81 +4132 name_4132 42 82 +4133 name_4133 43 83 +4134 name_4134 44 84 +4135 name_4135 45 85 +4136 name_4136 46 86 +4137 name_4137 47 87 +4138 name_4138 48 88 +4139 name_4139 49 89 +4146 name_4146 26 96 +4147 name_4147 27 97 +4148 name_4148 28 98 +4149 name_4149 29 99 +4150 name_4150 30 50 +4151 name_4151 31 51 +4152 name_4152 32 52 +4153 name_4153 33 53 +4154 name_4154 34 54 +4155 name_4155 35 55 +4156 name_4156 36 56 +4157 name_4157 37 57 +4158 name_4158 38 58 +4159 name_4159 39 59 +4160 name_4160 40 60 +4161 name_4161 41 61 +4162 name_4162 42 62 +4163 name_4163 43 63 +4164 name_4164 44 64 +4165 name_4165 45 65 +4166 name_4166 46 66 +4167 name_4167 47 67 +4168 name_4168 48 68 +4169 name_4169 49 69 +4176 name_4176 26 76 +4177 name_4177 27 77 +4178 name_4178 28 78 +4179 name_4179 29 79 +4180 name_4180 30 80 +4181 name_4181 31 81 +4182 name_4182 32 82 +4183 name_4183 33 83 +4184 name_4184 34 84 +4185 name_4185 35 85 +4186 name_4186 36 86 +4187 name_4187 37 87 +4188 name_4188 38 88 +4189 name_4189 39 89 +4190 name_4190 40 90 +4191 name_4191 41 91 +4192 name_4192 42 92 +4193 name_4193 43 93 +4194 name_4194 44 94 +4195 name_4195 45 95 +4196 name_4196 46 96 +4197 name_4197 47 97 +4198 name_4198 48 98 +4199 name_4199 49 99 +4206 name_4206 26 56 +4207 name_4207 27 57 +4208 name_4208 28 58 +4209 name_4209 29 59 +4210 name_4210 30 60 +4211 name_4211 31 61 +4212 name_4212 32 62 +4213 name_4213 33 63 +4214 name_4214 34 64 +4215 name_4215 35 65 +4216 name_4216 36 66 +4217 name_4217 37 67 +4218 name_4218 38 68 +4219 name_4219 39 69 +4220 name_4220 40 70 +4221 name_4221 41 71 +4222 name_4222 42 72 +4223 name_4223 43 73 +4224 name_4224 44 74 +4225 name_4225 45 75 +4226 name_4226 46 76 +4227 name_4227 47 77 +4228 name_4228 48 78 +4229 name_4229 49 79 +4236 name_4236 26 86 +4237 name_4237 27 87 +4238 name_4238 28 88 +4239 name_4239 29 89 +4240 name_4240 30 90 +4241 name_4241 31 91 +4242 name_4242 32 92 +4243 name_4243 33 93 +4244 name_4244 34 94 +4245 name_4245 35 95 +4246 name_4246 36 96 +4247 name_4247 37 97 +4248 name_4248 38 98 +4249 name_4249 39 99 +4250 name_4250 40 50 +4251 name_4251 41 51 +4252 name_4252 42 52 +4253 name_4253 43 53 +4254 name_4254 44 54 +4255 name_4255 45 55 +4256 name_4256 46 56 +4257 name_4257 47 57 +4258 name_4258 48 58 +4259 name_4259 49 59 +4266 name_4266 26 66 +4267 name_4267 27 67 +4268 name_4268 28 68 +4269 name_4269 29 69 +4270 name_4270 30 70 +4271 name_4271 31 71 +4272 name_4272 32 72 +4273 name_4273 33 73 +4274 name_4274 34 74 +4275 name_4275 35 75 +4276 name_4276 36 76 +4277 name_4277 37 77 +4278 name_4278 38 78 +4279 name_4279 39 79 +4280 name_4280 40 80 +4281 name_4281 41 81 +4282 name_4282 42 82 +4283 name_4283 43 83 +4284 name_4284 44 84 +4285 name_4285 45 85 +4286 name_4286 46 86 +4287 name_4287 47 87 +4288 name_4288 48 88 +4289 name_4289 49 89 +4296 name_4296 26 96 +4297 name_4297 27 97 +4298 name_4298 28 98 +4299 name_4299 29 99 +4300 name_4300 30 50 +4301 name_4301 31 51 +4302 name_4302 32 52 +4303 name_4303 33 53 +4304 name_4304 34 54 +4305 name_4305 35 55 +4306 name_4306 36 56 +4307 name_4307 37 57 +4308 name_4308 38 58 +4309 name_4309 39 59 +4310 name_4310 40 60 +4311 name_4311 41 61 +4312 name_4312 42 62 +4313 name_4313 43 63 +4314 name_4314 44 64 +4315 name_4315 45 65 +4316 name_4316 46 66 +4317 name_4317 47 67 +4318 name_4318 48 68 +4319 name_4319 49 69 +4326 name_4326 26 76 +4327 name_4327 27 77 +4328 name_4328 28 78 +4329 name_4329 29 79 +4330 name_4330 30 80 +4331 name_4331 31 81 +4332 name_4332 32 82 +4333 name_4333 33 83 +4334 name_4334 34 84 +4335 name_4335 35 85 +4336 name_4336 36 86 +4337 name_4337 37 87 +4338 name_4338 38 88 +4339 name_4339 39 89 +4340 name_4340 40 90 +4341 name_4341 41 91 +4342 name_4342 42 92 +4343 name_4343 43 93 +4344 name_4344 44 94 +4345 name_4345 45 95 +4346 name_4346 46 96 +4347 name_4347 47 97 +4348 name_4348 48 98 +4349 name_4349 49 99 +4356 name_4356 26 56 +4357 name_4357 27 57 +4358 name_4358 28 58 +4359 name_4359 29 59 +4360 name_4360 30 60 +4361 name_4361 31 61 +4362 name_4362 32 62 +4363 name_4363 33 63 +4364 name_4364 34 64 +4365 name_4365 35 65 +4366 name_4366 36 66 +4367 name_4367 37 67 +4368 name_4368 38 68 +4369 name_4369 39 69 +4370 name_4370 40 70 +4371 name_4371 41 71 +4372 name_4372 42 72 +4373 name_4373 43 73 +4374 name_4374 44 74 +4375 name_4375 45 75 +4376 name_4376 46 76 +4377 name_4377 47 77 +4378 name_4378 48 78 +4379 name_4379 49 79 +4386 name_4386 26 86 +4387 name_4387 27 87 +4388 name_4388 28 88 +4389 name_4389 29 89 +4390 name_4390 30 90 +4391 name_4391 31 91 +4392 name_4392 32 92 +4393 name_4393 33 93 +4394 name_4394 34 94 +4395 name_4395 35 95 +4396 name_4396 36 96 +4397 name_4397 37 97 +4398 name_4398 38 98 +4399 name_4399 39 99 +4400 name_4400 40 50 +4401 name_4401 41 51 +4402 name_4402 42 52 +4403 name_4403 43 53 +4404 name_4404 44 54 +4405 name_4405 45 55 +4406 name_4406 46 56 +4407 name_4407 47 57 +4408 name_4408 48 58 +4409 name_4409 49 59 +4416 name_4416 26 66 +4417 name_4417 27 67 +4418 name_4418 28 68 +4419 name_4419 29 69 +4420 name_4420 30 70 +4421 name_4421 31 71 +4422 name_4422 32 72 +4423 name_4423 33 73 +4424 name_4424 34 74 +4425 name_4425 35 75 +4426 name_4426 36 76 +4427 name_4427 37 77 +4428 name_4428 38 78 +4429 name_4429 39 79 +4430 name_4430 40 80 +4431 name_4431 41 81 +4432 name_4432 42 82 +4433 name_4433 43 83 +4434 name_4434 44 84 +4435 name_4435 45 85 +4436 name_4436 46 86 +4437 name_4437 47 87 +4438 name_4438 48 88 +4439 name_4439 49 89 +4446 name_4446 26 96 +4447 name_4447 27 97 +4448 name_4448 28 98 +4449 name_4449 29 99 +4450 name_4450 30 50 +4451 name_4451 31 51 +4452 name_4452 32 52 +4453 name_4453 33 53 +4454 name_4454 34 54 +4455 name_4455 35 55 +4456 name_4456 36 56 +4457 name_4457 37 57 +4458 name_4458 38 58 +4459 name_4459 39 59 +4460 name_4460 40 60 +4461 name_4461 41 61 +4462 name_4462 42 62 +4463 name_4463 43 63 +4464 name_4464 44 64 +4465 name_4465 45 65 +4466 name_4466 46 66 +4467 name_4467 47 67 +4468 name_4468 48 68 +4469 name_4469 49 69 +4476 name_4476 26 76 +4477 name_4477 27 77 +4478 name_4478 28 78 +4479 name_4479 29 79 +4480 name_4480 30 80 +4481 name_4481 31 81 +4482 name_4482 32 82 +4483 name_4483 33 83 +4484 name_4484 34 84 +4485 name_4485 35 85 +4486 name_4486 36 86 +4487 name_4487 37 87 +4488 name_4488 38 88 +4489 name_4489 39 89 +4490 name_4490 40 90 +4491 name_4491 41 91 +4492 name_4492 42 92 +4493 name_4493 43 93 +4494 name_4494 44 94 +4495 name_4495 45 95 +4496 name_4496 46 96 +4497 name_4497 47 97 +4498 name_4498 48 98 +4499 name_4499 49 99 +4506 name_4506 26 56 +4507 name_4507 27 57 +4508 name_4508 28 58 +4509 name_4509 29 59 +4510 name_4510 30 60 +4511 name_4511 31 61 +4512 name_4512 32 62 +4513 name_4513 33 63 +4514 name_4514 34 64 +4515 name_4515 35 65 +4516 name_4516 36 66 +4517 name_4517 37 67 +4518 name_4518 38 68 +4519 name_4519 39 69 +4520 name_4520 40 70 +4521 name_4521 41 71 +4522 name_4522 42 72 +4523 name_4523 43 73 +4524 name_4524 44 74 +4525 name_4525 45 75 +4526 name_4526 46 76 +4527 name_4527 47 77 +4528 name_4528 48 78 +4529 name_4529 49 79 +4536 name_4536 26 86 +4537 name_4537 27 87 +4538 name_4538 28 88 +4539 name_4539 29 89 +4540 name_4540 30 90 +4541 name_4541 31 91 +4542 name_4542 32 92 +4543 name_4543 33 93 +4544 name_4544 34 94 +4545 name_4545 35 95 +4546 name_4546 36 96 +4547 name_4547 37 97 +4548 name_4548 38 98 +4549 name_4549 39 99 +4550 name_4550 40 50 +4551 name_4551 41 51 +4552 name_4552 42 52 +4553 name_4553 43 53 +4554 name_4554 44 54 +4555 name_4555 45 55 +4556 name_4556 46 56 +4557 name_4557 47 57 +4558 name_4558 48 58 +4559 name_4559 49 59 +4566 name_4566 26 66 +4567 name_4567 27 67 +4568 name_4568 28 68 +4569 name_4569 29 69 +4570 name_4570 30 70 +4571 name_4571 31 71 +4572 name_4572 32 72 +4573 name_4573 33 73 +4574 name_4574 34 74 +4575 name_4575 35 75 +4576 name_4576 36 76 +4577 name_4577 37 77 +4578 name_4578 38 78 +4579 name_4579 39 79 +4580 name_4580 40 80 +4581 name_4581 41 81 +4582 name_4582 42 82 +4583 name_4583 43 83 +4584 name_4584 44 84 +4585 name_4585 45 85 +4586 name_4586 46 86 +4587 name_4587 47 87 +4588 name_4588 48 88 +4589 name_4589 49 89 +4596 name_4596 26 96 +4597 name_4597 27 97 +4598 name_4598 28 98 +4599 name_4599 29 99 +4600 name_4600 30 50 +4601 name_4601 31 51 +4602 name_4602 32 52 +4603 name_4603 33 53 +4604 name_4604 34 54 +4605 name_4605 35 55 +4606 name_4606 36 56 +4607 name_4607 37 57 +4608 name_4608 38 58 +4609 name_4609 39 59 +4610 name_4610 40 60 +4611 name_4611 41 61 +4612 name_4612 42 62 +4613 name_4613 43 63 +4614 name_4614 44 64 +4615 name_4615 45 65 +4616 name_4616 46 66 +4617 name_4617 47 67 +4618 name_4618 48 68 +4619 name_4619 49 69 +4626 name_4626 26 76 +4627 name_4627 27 77 +4628 name_4628 28 78 +4629 name_4629 29 79 +4630 name_4630 30 80 +4631 name_4631 31 81 +4632 name_4632 32 82 +4633 name_4633 33 83 +4634 name_4634 34 84 +4635 name_4635 35 85 +4636 name_4636 36 86 +4637 name_4637 37 87 +4638 name_4638 38 88 +4639 name_4639 39 89 +4640 name_4640 40 90 +4641 name_4641 41 91 +4642 name_4642 42 92 +4643 name_4643 43 93 +4644 name_4644 44 94 +4645 name_4645 45 95 +4646 name_4646 46 96 +4647 name_4647 47 97 +4648 name_4648 48 98 +4649 name_4649 49 99 +4656 name_4656 26 56 +4657 name_4657 27 57 +4658 name_4658 28 58 +4659 name_4659 29 59 +4660 name_4660 30 60 +4661 name_4661 31 61 +4662 name_4662 32 62 +4663 name_4663 33 63 +4664 name_4664 34 64 +4665 name_4665 35 65 +4666 name_4666 36 66 +4667 name_4667 37 67 +4668 name_4668 38 68 +4669 name_4669 39 69 +4670 name_4670 40 70 +4671 name_4671 41 71 +4672 name_4672 42 72 +4673 name_4673 43 73 +4674 name_4674 44 74 +4675 name_4675 45 75 +4676 name_4676 46 76 +4677 name_4677 47 77 +4678 name_4678 48 78 +4679 name_4679 49 79 +4686 name_4686 26 86 +4687 name_4687 27 87 +4688 name_4688 28 88 +4689 name_4689 29 89 +4690 name_4690 30 90 +4691 name_4691 31 91 +4692 name_4692 32 92 +4693 name_4693 33 93 +4694 name_4694 34 94 +4695 name_4695 35 95 +4696 name_4696 36 96 +4697 name_4697 37 97 +4698 name_4698 38 98 +4699 name_4699 39 99 +4700 name_4700 40 50 +4701 name_4701 41 51 +4702 name_4702 42 52 +4703 name_4703 43 53 +4704 name_4704 44 54 +4705 name_4705 45 55 +4706 name_4706 46 56 +4707 name_4707 47 57 +4708 name_4708 48 58 +4709 name_4709 49 59 +4716 name_4716 26 66 +4717 name_4717 27 67 +4718 name_4718 28 68 +4719 name_4719 29 69 +4720 name_4720 30 70 +4721 name_4721 31 71 +4722 name_4722 32 72 +4723 name_4723 33 73 +4724 name_4724 34 74 +4725 name_4725 35 75 +4726 name_4726 36 76 +4727 name_4727 37 77 +4728 name_4728 38 78 +4729 name_4729 39 79 +4730 name_4730 40 80 +4731 name_4731 41 81 +4732 name_4732 42 82 +4733 name_4733 43 83 +4734 name_4734 44 84 +4735 name_4735 45 85 +4736 name_4736 46 86 +4737 name_4737 47 87 +4738 name_4738 48 88 +4739 name_4739 49 89 +4746 name_4746 26 96 +4747 name_4747 27 97 +4748 name_4748 28 98 +4749 name_4749 29 99 +4750 name_4750 30 50 +4751 name_4751 31 51 +4752 name_4752 32 52 +4753 name_4753 33 53 +4754 name_4754 34 54 +4755 name_4755 35 55 +4756 name_4756 36 56 +4757 name_4757 37 57 +4758 name_4758 38 58 +4759 name_4759 39 59 +4760 name_4760 40 60 +4761 name_4761 41 61 +4762 name_4762 42 62 +4763 name_4763 43 63 +4764 name_4764 44 64 +4765 name_4765 45 65 +4766 name_4766 46 66 +4767 name_4767 47 67 +4768 name_4768 48 68 +4769 name_4769 49 69 +4776 name_4776 26 76 +4777 name_4777 27 77 +4778 name_4778 28 78 +4779 name_4779 29 79 +4780 name_4780 30 80 +4781 name_4781 31 81 +4782 name_4782 32 82 +4783 name_4783 33 83 +4784 name_4784 34 84 +4785 name_4785 35 85 +4786 name_4786 36 86 +4787 name_4787 37 87 +4788 name_4788 38 88 +4789 name_4789 39 89 +4790 name_4790 40 90 +4791 name_4791 41 91 +4792 name_4792 42 92 +4793 name_4793 43 93 +4794 name_4794 44 94 +4795 name_4795 45 95 +4796 name_4796 46 96 +4797 name_4797 47 97 +4798 name_4798 48 98 +4799 name_4799 49 99 +4806 name_4806 26 56 +4807 name_4807 27 57 +4808 name_4808 28 58 +4809 name_4809 29 59 +4810 name_4810 30 60 +4811 name_4811 31 61 +4812 name_4812 32 62 +4813 name_4813 33 63 +4814 name_4814 34 64 +4815 name_4815 35 65 +4816 name_4816 36 66 +4817 name_4817 37 67 +4818 name_4818 38 68 +4819 name_4819 39 69 +4820 name_4820 40 70 +4821 name_4821 41 71 +4822 name_4822 42 72 +4823 name_4823 43 73 +4824 name_4824 44 74 +4825 name_4825 45 75 +4826 name_4826 46 76 +4827 name_4827 47 77 +4828 name_4828 48 78 +4829 name_4829 49 79 +4836 name_4836 26 86 +4837 name_4837 27 87 +4838 name_4838 28 88 +4839 name_4839 29 89 +4840 name_4840 30 90 +4841 name_4841 31 91 +4842 name_4842 32 92 +4843 name_4843 33 93 +4844 name_4844 34 94 +4845 name_4845 35 95 +4846 name_4846 36 96 +4847 name_4847 37 97 +4848 name_4848 38 98 +4849 name_4849 39 99 +4850 name_4850 40 50 +4851 name_4851 41 51 +4852 name_4852 42 52 +4853 name_4853 43 53 +4854 name_4854 44 54 +4855 name_4855 45 55 +4856 name_4856 46 56 +4857 name_4857 47 57 +4858 name_4858 48 58 +4859 name_4859 49 59 +4866 name_4866 26 66 +4867 name_4867 27 67 +4868 name_4868 28 68 +4869 name_4869 29 69 +4870 name_4870 30 70 +4871 name_4871 31 71 +4872 name_4872 32 72 +4873 name_4873 33 73 +4874 name_4874 34 74 +4875 name_4875 35 75 +4876 name_4876 36 76 +4877 name_4877 37 77 +4878 name_4878 38 78 +4879 name_4879 39 79 +4880 name_4880 40 80 +4881 name_4881 41 81 +4882 name_4882 42 82 +4883 name_4883 43 83 +4884 name_4884 44 84 +4885 name_4885 45 85 +4886 name_4886 46 86 +4887 name_4887 47 87 +4888 name_4888 48 88 +4889 name_4889 49 89 +4896 name_4896 26 96 +4897 name_4897 27 97 +4898 name_4898 28 98 +4899 name_4899 29 99 +4900 name_4900 30 50 +4901 name_4901 31 51 +4902 name_4902 32 52 +4903 name_4903 33 53 +4904 name_4904 34 54 +4905 name_4905 35 55 +4906 name_4906 36 56 +4907 name_4907 37 57 +4908 name_4908 38 58 +4909 name_4909 39 59 +4910 name_4910 40 60 +4911 name_4911 41 61 +4912 name_4912 42 62 +4913 name_4913 43 63 +4914 name_4914 44 64 +4915 name_4915 45 65 +4916 name_4916 46 66 +4917 name_4917 47 67 +4918 name_4918 48 68 +4919 name_4919 49 69 +4926 name_4926 26 76 +4927 name_4927 27 77 +4928 name_4928 28 78 +4929 name_4929 29 79 +4930 name_4930 30 80 +4931 name_4931 31 81 +4932 name_4932 32 82 +4933 name_4933 33 83 +4934 name_4934 34 84 +4935 name_4935 35 85 +4936 name_4936 36 86 +4937 name_4937 37 87 +4938 name_4938 38 88 +4939 name_4939 39 89 +4940 name_4940 40 90 +4941 name_4941 41 91 +4942 name_4942 42 92 +4943 name_4943 43 93 +4944 name_4944 44 94 +4945 name_4945 45 95 +4946 name_4946 46 96 +4947 name_4947 47 97 +4948 name_4948 48 98 +4949 name_4949 49 99 +4956 name_4956 26 56 +4957 name_4957 27 57 +4958 name_4958 28 58 +4959 name_4959 29 59 +4960 name_4960 30 60 +4961 name_4961 31 61 +4962 name_4962 32 62 +4963 name_4963 33 63 +4964 name_4964 34 64 +4965 name_4965 35 65 +4966 name_4966 36 66 +4967 name_4967 37 67 +4968 name_4968 38 68 +4969 name_4969 39 69 +4970 name_4970 40 70 +4971 name_4971 41 71 +4972 name_4972 42 72 +4973 name_4973 43 73 +4974 name_4974 44 74 +4975 name_4975 45 75 +4976 name_4976 46 76 +4977 name_4977 47 77 +4978 name_4978 48 78 +4979 name_4979 49 79 +4986 name_4986 26 86 +4987 name_4987 27 87 +4988 name_4988 28 88 +4989 name_4989 29 89 +4990 name_4990 30 90 +4991 name_4991 31 91 +4992 name_4992 32 92 +4993 name_4993 33 93 +4994 name_4994 34 94 +4995 name_4995 35 95 +4996 name_4996 36 96 +4997 name_4997 37 97 +4998 name_4998 38 98 +4999 name_4999 39 99 + diff --git a/regression-test/data/external_table_p0/cache/condition_cache_parquet.out b/regression-test/data/external_table_p0/cache/condition_cache_parquet.out new file mode 100644 index 00000000000000..ad7881ecb00677 --- /dev/null +++ b/regression-test/data/external_table_p0/cache/condition_cache_parquet.out @@ -0,0 +1,8088 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !condition_cache0 -- +2 Bob 30 90 +4 David 28 92 +5 Eve 26 88 + +-- !condition_cache1 -- +1 Alice 25 85.5 +3 Charlie 22 75.5 + +-- !condition_cache2 -- +2 Bob 30 90 +4 David 28 92 +5 Eve 26 88 + +-- !condition_cache3 -- +1 Alice 25 85.5 +3 Charlie 22 75.5 + +-- !condition_cache4 -- +2 Bob 30 90 +4 David 28 92 +5 Eve 26 88 + +-- !condition_cache5 -- +1 Alice 25 85.5 +3 Charlie 22 75.5 + +-- !condition_cache_join0 -- +2 Bob 30 Marketing Manager +4 David 28 Engineering Senior Developer +5 Eve 26 Finance Analyst + +-- !condition_cache_join1 -- +2 Bob 30 Marketing Manager +4 David 28 Engineering Senior Developer +5 Eve 26 Finance Analyst + +-- !condition_cache_join2 -- +2 Bob 30 Marketing Manager +4 David 28 Engineering Senior Developer +5 Eve 26 Finance Analyst + +-- !condition_cache_join3 -- +2 Bob 30 Engineering Developer +3 Charlie 22 Marketing Manager +4 David 28 HR Specialist +5 Eve 26 Engineering Senior Developer + +-- !condition_cache_join4 -- +2 Bob 30 Engineering Developer +3 Charlie 22 Marketing Manager +4 David 28 HR Specialist +5 Eve 26 Engineering Senior Developer + +-- !condition_cache_join5 -- +2 Bob 30 Marketing Manager +4 David 28 Engineering Senior Developer +5 Eve 26 Finance Analyst + +-- !condition_cache_join6 -- +1 Alice Engineering 100000 +4 David Engineering 140000 + +-- !condition_cache_limit0 -- +6 name_6 26 56 +7 name_7 27 57 +8 name_8 28 58 +9 name_9 29 59 +10 name_10 30 60 +11 name_11 31 61 +12 name_12 32 62 +13 name_13 33 63 +14 name_14 34 64 +15 name_15 35 65 + +-- !condition_cache_limit1 -- +6 name_6 26 56 +7 name_7 27 57 +8 name_8 28 58 +9 name_9 29 59 +10 name_10 30 60 +11 name_11 31 61 +12 name_12 32 62 +13 name_13 33 63 +14 name_14 34 64 +15 name_15 35 65 + +-- !condition_cache_limit2 -- +6 name_6 26 56 +7 name_7 27 57 +8 name_8 28 58 +9 name_9 29 59 +10 name_10 30 60 +11 name_11 31 61 +12 name_12 32 62 +13 name_13 33 63 +14 name_14 34 64 +15 name_15 35 65 +16 name_16 36 66 +17 name_17 37 67 +18 name_18 38 68 +19 name_19 39 69 +20 name_20 40 70 +21 name_21 41 71 +22 name_22 42 72 +23 name_23 43 73 +24 name_24 44 74 +25 name_25 45 75 +26 name_26 46 76 +27 name_27 47 77 +28 name_28 48 78 +29 name_29 49 79 +36 name_36 26 86 +37 name_37 27 87 +38 name_38 28 88 +39 name_39 29 89 +40 name_40 30 90 +41 name_41 31 91 +42 name_42 32 92 +43 name_43 33 93 +44 name_44 34 94 +45 name_45 35 95 +46 name_46 36 96 +47 name_47 37 97 +48 name_48 38 98 +49 name_49 39 99 +50 name_50 40 50 +51 name_51 41 51 +52 name_52 42 52 +53 name_53 43 53 +54 name_54 44 54 +55 name_55 45 55 +56 name_56 46 56 +57 name_57 47 57 +58 name_58 48 58 +59 name_59 49 59 +66 name_66 26 66 +67 name_67 27 67 +68 name_68 28 68 +69 name_69 29 69 +70 name_70 30 70 +71 name_71 31 71 +72 name_72 32 72 +73 name_73 33 73 +74 name_74 34 74 +75 name_75 35 75 +76 name_76 36 76 +77 name_77 37 77 +78 name_78 38 78 +79 name_79 39 79 +80 name_80 40 80 +81 name_81 41 81 +82 name_82 42 82 +83 name_83 43 83 +84 name_84 44 84 +85 name_85 45 85 +86 name_86 46 86 +87 name_87 47 87 +88 name_88 48 88 +89 name_89 49 89 +96 name_96 26 96 +97 name_97 27 97 +98 name_98 28 98 +99 name_99 29 99 +100 name_100 30 50 +101 name_101 31 51 +102 name_102 32 52 +103 name_103 33 53 +104 name_104 34 54 +105 name_105 35 55 +106 name_106 36 56 +107 name_107 37 57 +108 name_108 38 58 +109 name_109 39 59 +110 name_110 40 60 +111 name_111 41 61 +112 name_112 42 62 +113 name_113 43 63 +114 name_114 44 64 +115 name_115 45 65 +116 name_116 46 66 +117 name_117 47 67 +118 name_118 48 68 +119 name_119 49 69 +126 name_126 26 76 +127 name_127 27 77 +128 name_128 28 78 +129 name_129 29 79 +130 name_130 30 80 +131 name_131 31 81 +132 name_132 32 82 +133 name_133 33 83 +134 name_134 34 84 +135 name_135 35 85 +136 name_136 36 86 +137 name_137 37 87 +138 name_138 38 88 +139 name_139 39 89 +140 name_140 40 90 +141 name_141 41 91 +142 name_142 42 92 +143 name_143 43 93 +144 name_144 44 94 +145 name_145 45 95 +146 name_146 46 96 +147 name_147 47 97 +148 name_148 48 98 +149 name_149 49 99 +156 name_156 26 56 +157 name_157 27 57 +158 name_158 28 58 +159 name_159 29 59 +160 name_160 30 60 +161 name_161 31 61 +162 name_162 32 62 +163 name_163 33 63 +164 name_164 34 64 +165 name_165 35 65 +166 name_166 36 66 +167 name_167 37 67 +168 name_168 38 68 +169 name_169 39 69 +170 name_170 40 70 +171 name_171 41 71 +172 name_172 42 72 +173 name_173 43 73 +174 name_174 44 74 +175 name_175 45 75 +176 name_176 46 76 +177 name_177 47 77 +178 name_178 48 78 +179 name_179 49 79 +186 name_186 26 86 +187 name_187 27 87 +188 name_188 28 88 +189 name_189 29 89 +190 name_190 30 90 +191 name_191 31 91 +192 name_192 32 92 +193 name_193 33 93 +194 name_194 34 94 +195 name_195 35 95 +196 name_196 36 96 +197 name_197 37 97 +198 name_198 38 98 +199 name_199 39 99 +200 name_200 40 50 +201 name_201 41 51 +202 name_202 42 52 +203 name_203 43 53 +204 name_204 44 54 +205 name_205 45 55 +206 name_206 46 56 +207 name_207 47 57 +208 name_208 48 58 +209 name_209 49 59 +216 name_216 26 66 +217 name_217 27 67 +218 name_218 28 68 +219 name_219 29 69 +220 name_220 30 70 +221 name_221 31 71 +222 name_222 32 72 +223 name_223 33 73 +224 name_224 34 74 +225 name_225 35 75 +226 name_226 36 76 +227 name_227 37 77 +228 name_228 38 78 +229 name_229 39 79 +230 name_230 40 80 +231 name_231 41 81 +232 name_232 42 82 +233 name_233 43 83 +234 name_234 44 84 +235 name_235 45 85 +236 name_236 46 86 +237 name_237 47 87 +238 name_238 48 88 +239 name_239 49 89 +246 name_246 26 96 +247 name_247 27 97 +248 name_248 28 98 +249 name_249 29 99 +250 name_250 30 50 +251 name_251 31 51 +252 name_252 32 52 +253 name_253 33 53 +254 name_254 34 54 +255 name_255 35 55 +256 name_256 36 56 +257 name_257 37 57 +258 name_258 38 58 +259 name_259 39 59 +260 name_260 40 60 +261 name_261 41 61 +262 name_262 42 62 +263 name_263 43 63 +264 name_264 44 64 +265 name_265 45 65 +266 name_266 46 66 +267 name_267 47 67 +268 name_268 48 68 +269 name_269 49 69 +276 name_276 26 76 +277 name_277 27 77 +278 name_278 28 78 +279 name_279 29 79 +280 name_280 30 80 +281 name_281 31 81 +282 name_282 32 82 +283 name_283 33 83 +284 name_284 34 84 +285 name_285 35 85 +286 name_286 36 86 +287 name_287 37 87 +288 name_288 38 88 +289 name_289 39 89 +290 name_290 40 90 +291 name_291 41 91 +292 name_292 42 92 +293 name_293 43 93 +294 name_294 44 94 +295 name_295 45 95 +296 name_296 46 96 +297 name_297 47 97 +298 name_298 48 98 +299 name_299 49 99 +306 name_306 26 56 +307 name_307 27 57 +308 name_308 28 58 +309 name_309 29 59 +310 name_310 30 60 +311 name_311 31 61 +312 name_312 32 62 +313 name_313 33 63 +314 name_314 34 64 +315 name_315 35 65 +316 name_316 36 66 +317 name_317 37 67 +318 name_318 38 68 +319 name_319 39 69 +320 name_320 40 70 +321 name_321 41 71 +322 name_322 42 72 +323 name_323 43 73 +324 name_324 44 74 +325 name_325 45 75 +326 name_326 46 76 +327 name_327 47 77 +328 name_328 48 78 +329 name_329 49 79 +336 name_336 26 86 +337 name_337 27 87 +338 name_338 28 88 +339 name_339 29 89 +340 name_340 30 90 +341 name_341 31 91 +342 name_342 32 92 +343 name_343 33 93 +344 name_344 34 94 +345 name_345 35 95 +346 name_346 36 96 +347 name_347 37 97 +348 name_348 38 98 +349 name_349 39 99 +350 name_350 40 50 +351 name_351 41 51 +352 name_352 42 52 +353 name_353 43 53 +354 name_354 44 54 +355 name_355 45 55 +356 name_356 46 56 +357 name_357 47 57 +358 name_358 48 58 +359 name_359 49 59 +366 name_366 26 66 +367 name_367 27 67 +368 name_368 28 68 +369 name_369 29 69 +370 name_370 30 70 +371 name_371 31 71 +372 name_372 32 72 +373 name_373 33 73 +374 name_374 34 74 +375 name_375 35 75 +376 name_376 36 76 +377 name_377 37 77 +378 name_378 38 78 +379 name_379 39 79 +380 name_380 40 80 +381 name_381 41 81 +382 name_382 42 82 +383 name_383 43 83 +384 name_384 44 84 +385 name_385 45 85 +386 name_386 46 86 +387 name_387 47 87 +388 name_388 48 88 +389 name_389 49 89 +396 name_396 26 96 +397 name_397 27 97 +398 name_398 28 98 +399 name_399 29 99 +400 name_400 30 50 +401 name_401 31 51 +402 name_402 32 52 +403 name_403 33 53 +404 name_404 34 54 +405 name_405 35 55 +406 name_406 36 56 +407 name_407 37 57 +408 name_408 38 58 +409 name_409 39 59 +410 name_410 40 60 +411 name_411 41 61 +412 name_412 42 62 +413 name_413 43 63 +414 name_414 44 64 +415 name_415 45 65 +416 name_416 46 66 +417 name_417 47 67 +418 name_418 48 68 +419 name_419 49 69 +426 name_426 26 76 +427 name_427 27 77 +428 name_428 28 78 +429 name_429 29 79 +430 name_430 30 80 +431 name_431 31 81 +432 name_432 32 82 +433 name_433 33 83 +434 name_434 34 84 +435 name_435 35 85 +436 name_436 36 86 +437 name_437 37 87 +438 name_438 38 88 +439 name_439 39 89 +440 name_440 40 90 +441 name_441 41 91 +442 name_442 42 92 +443 name_443 43 93 +444 name_444 44 94 +445 name_445 45 95 +446 name_446 46 96 +447 name_447 47 97 +448 name_448 48 98 +449 name_449 49 99 +456 name_456 26 56 +457 name_457 27 57 +458 name_458 28 58 +459 name_459 29 59 +460 name_460 30 60 +461 name_461 31 61 +462 name_462 32 62 +463 name_463 33 63 +464 name_464 34 64 +465 name_465 35 65 +466 name_466 36 66 +467 name_467 37 67 +468 name_468 38 68 +469 name_469 39 69 +470 name_470 40 70 +471 name_471 41 71 +472 name_472 42 72 +473 name_473 43 73 +474 name_474 44 74 +475 name_475 45 75 +476 name_476 46 76 +477 name_477 47 77 +478 name_478 48 78 +479 name_479 49 79 +486 name_486 26 86 +487 name_487 27 87 +488 name_488 28 88 +489 name_489 29 89 +490 name_490 30 90 +491 name_491 31 91 +492 name_492 32 92 +493 name_493 33 93 +494 name_494 34 94 +495 name_495 35 95 +496 name_496 36 96 +497 name_497 37 97 +498 name_498 38 98 +499 name_499 39 99 +500 name_500 40 50 +501 name_501 41 51 +502 name_502 42 52 +503 name_503 43 53 +504 name_504 44 54 +505 name_505 45 55 +506 name_506 46 56 +507 name_507 47 57 +508 name_508 48 58 +509 name_509 49 59 +516 name_516 26 66 +517 name_517 27 67 +518 name_518 28 68 +519 name_519 29 69 +520 name_520 30 70 +521 name_521 31 71 +522 name_522 32 72 +523 name_523 33 73 +524 name_524 34 74 +525 name_525 35 75 +526 name_526 36 76 +527 name_527 37 77 +528 name_528 38 78 +529 name_529 39 79 +530 name_530 40 80 +531 name_531 41 81 +532 name_532 42 82 +533 name_533 43 83 +534 name_534 44 84 +535 name_535 45 85 +536 name_536 46 86 +537 name_537 47 87 +538 name_538 48 88 +539 name_539 49 89 +546 name_546 26 96 +547 name_547 27 97 +548 name_548 28 98 +549 name_549 29 99 +550 name_550 30 50 +551 name_551 31 51 +552 name_552 32 52 +553 name_553 33 53 +554 name_554 34 54 +555 name_555 35 55 +556 name_556 36 56 +557 name_557 37 57 +558 name_558 38 58 +559 name_559 39 59 +560 name_560 40 60 +561 name_561 41 61 +562 name_562 42 62 +563 name_563 43 63 +564 name_564 44 64 +565 name_565 45 65 +566 name_566 46 66 +567 name_567 47 67 +568 name_568 48 68 +569 name_569 49 69 +576 name_576 26 76 +577 name_577 27 77 +578 name_578 28 78 +579 name_579 29 79 +580 name_580 30 80 +581 name_581 31 81 +582 name_582 32 82 +583 name_583 33 83 +584 name_584 34 84 +585 name_585 35 85 +586 name_586 36 86 +587 name_587 37 87 +588 name_588 38 88 +589 name_589 39 89 +590 name_590 40 90 +591 name_591 41 91 +592 name_592 42 92 +593 name_593 43 93 +594 name_594 44 94 +595 name_595 45 95 +596 name_596 46 96 +597 name_597 47 97 +598 name_598 48 98 +599 name_599 49 99 +606 name_606 26 56 +607 name_607 27 57 +608 name_608 28 58 +609 name_609 29 59 +610 name_610 30 60 +611 name_611 31 61 +612 name_612 32 62 +613 name_613 33 63 +614 name_614 34 64 +615 name_615 35 65 +616 name_616 36 66 +617 name_617 37 67 +618 name_618 38 68 +619 name_619 39 69 +620 name_620 40 70 +621 name_621 41 71 +622 name_622 42 72 +623 name_623 43 73 +624 name_624 44 74 +625 name_625 45 75 +626 name_626 46 76 +627 name_627 47 77 +628 name_628 48 78 +629 name_629 49 79 +636 name_636 26 86 +637 name_637 27 87 +638 name_638 28 88 +639 name_639 29 89 +640 name_640 30 90 +641 name_641 31 91 +642 name_642 32 92 +643 name_643 33 93 +644 name_644 34 94 +645 name_645 35 95 +646 name_646 36 96 +647 name_647 37 97 +648 name_648 38 98 +649 name_649 39 99 +650 name_650 40 50 +651 name_651 41 51 +652 name_652 42 52 +653 name_653 43 53 +654 name_654 44 54 +655 name_655 45 55 +656 name_656 46 56 +657 name_657 47 57 +658 name_658 48 58 +659 name_659 49 59 +666 name_666 26 66 +667 name_667 27 67 +668 name_668 28 68 +669 name_669 29 69 +670 name_670 30 70 +671 name_671 31 71 +672 name_672 32 72 +673 name_673 33 73 +674 name_674 34 74 +675 name_675 35 75 +676 name_676 36 76 +677 name_677 37 77 +678 name_678 38 78 +679 name_679 39 79 +680 name_680 40 80 +681 name_681 41 81 +682 name_682 42 82 +683 name_683 43 83 +684 name_684 44 84 +685 name_685 45 85 +686 name_686 46 86 +687 name_687 47 87 +688 name_688 48 88 +689 name_689 49 89 +696 name_696 26 96 +697 name_697 27 97 +698 name_698 28 98 +699 name_699 29 99 +700 name_700 30 50 +701 name_701 31 51 +702 name_702 32 52 +703 name_703 33 53 +704 name_704 34 54 +705 name_705 35 55 +706 name_706 36 56 +707 name_707 37 57 +708 name_708 38 58 +709 name_709 39 59 +710 name_710 40 60 +711 name_711 41 61 +712 name_712 42 62 +713 name_713 43 63 +714 name_714 44 64 +715 name_715 45 65 +716 name_716 46 66 +717 name_717 47 67 +718 name_718 48 68 +719 name_719 49 69 +726 name_726 26 76 +727 name_727 27 77 +728 name_728 28 78 +729 name_729 29 79 +730 name_730 30 80 +731 name_731 31 81 +732 name_732 32 82 +733 name_733 33 83 +734 name_734 34 84 +735 name_735 35 85 +736 name_736 36 86 +737 name_737 37 87 +738 name_738 38 88 +739 name_739 39 89 +740 name_740 40 90 +741 name_741 41 91 +742 name_742 42 92 +743 name_743 43 93 +744 name_744 44 94 +745 name_745 45 95 +746 name_746 46 96 +747 name_747 47 97 +748 name_748 48 98 +749 name_749 49 99 +756 name_756 26 56 +757 name_757 27 57 +758 name_758 28 58 +759 name_759 29 59 +760 name_760 30 60 +761 name_761 31 61 +762 name_762 32 62 +763 name_763 33 63 +764 name_764 34 64 +765 name_765 35 65 +766 name_766 36 66 +767 name_767 37 67 +768 name_768 38 68 +769 name_769 39 69 +770 name_770 40 70 +771 name_771 41 71 +772 name_772 42 72 +773 name_773 43 73 +774 name_774 44 74 +775 name_775 45 75 +776 name_776 46 76 +777 name_777 47 77 +778 name_778 48 78 +779 name_779 49 79 +786 name_786 26 86 +787 name_787 27 87 +788 name_788 28 88 +789 name_789 29 89 +790 name_790 30 90 +791 name_791 31 91 +792 name_792 32 92 +793 name_793 33 93 +794 name_794 34 94 +795 name_795 35 95 +796 name_796 36 96 +797 name_797 37 97 +798 name_798 38 98 +799 name_799 39 99 +800 name_800 40 50 +801 name_801 41 51 +802 name_802 42 52 +803 name_803 43 53 +804 name_804 44 54 +805 name_805 45 55 +806 name_806 46 56 +807 name_807 47 57 +808 name_808 48 58 +809 name_809 49 59 +816 name_816 26 66 +817 name_817 27 67 +818 name_818 28 68 +819 name_819 29 69 +820 name_820 30 70 +821 name_821 31 71 +822 name_822 32 72 +823 name_823 33 73 +824 name_824 34 74 +825 name_825 35 75 +826 name_826 36 76 +827 name_827 37 77 +828 name_828 38 78 +829 name_829 39 79 +830 name_830 40 80 +831 name_831 41 81 +832 name_832 42 82 +833 name_833 43 83 +834 name_834 44 84 +835 name_835 45 85 +836 name_836 46 86 +837 name_837 47 87 +838 name_838 48 88 +839 name_839 49 89 +846 name_846 26 96 +847 name_847 27 97 +848 name_848 28 98 +849 name_849 29 99 +850 name_850 30 50 +851 name_851 31 51 +852 name_852 32 52 +853 name_853 33 53 +854 name_854 34 54 +855 name_855 35 55 +856 name_856 36 56 +857 name_857 37 57 +858 name_858 38 58 +859 name_859 39 59 +860 name_860 40 60 +861 name_861 41 61 +862 name_862 42 62 +863 name_863 43 63 +864 name_864 44 64 +865 name_865 45 65 +866 name_866 46 66 +867 name_867 47 67 +868 name_868 48 68 +869 name_869 49 69 +876 name_876 26 76 +877 name_877 27 77 +878 name_878 28 78 +879 name_879 29 79 +880 name_880 30 80 +881 name_881 31 81 +882 name_882 32 82 +883 name_883 33 83 +884 name_884 34 84 +885 name_885 35 85 +886 name_886 36 86 +887 name_887 37 87 +888 name_888 38 88 +889 name_889 39 89 +890 name_890 40 90 +891 name_891 41 91 +892 name_892 42 92 +893 name_893 43 93 +894 name_894 44 94 +895 name_895 45 95 +896 name_896 46 96 +897 name_897 47 97 +898 name_898 48 98 +899 name_899 49 99 +906 name_906 26 56 +907 name_907 27 57 +908 name_908 28 58 +909 name_909 29 59 +910 name_910 30 60 +911 name_911 31 61 +912 name_912 32 62 +913 name_913 33 63 +914 name_914 34 64 +915 name_915 35 65 +916 name_916 36 66 +917 name_917 37 67 +918 name_918 38 68 +919 name_919 39 69 +920 name_920 40 70 +921 name_921 41 71 +922 name_922 42 72 +923 name_923 43 73 +924 name_924 44 74 +925 name_925 45 75 +926 name_926 46 76 +927 name_927 47 77 +928 name_928 48 78 +929 name_929 49 79 +936 name_936 26 86 +937 name_937 27 87 +938 name_938 28 88 +939 name_939 29 89 +940 name_940 30 90 +941 name_941 31 91 +942 name_942 32 92 +943 name_943 33 93 +944 name_944 34 94 +945 name_945 35 95 +946 name_946 36 96 +947 name_947 37 97 +948 name_948 38 98 +949 name_949 39 99 +950 name_950 40 50 +951 name_951 41 51 +952 name_952 42 52 +953 name_953 43 53 +954 name_954 44 54 +955 name_955 45 55 +956 name_956 46 56 +957 name_957 47 57 +958 name_958 48 58 +959 name_959 49 59 +966 name_966 26 66 +967 name_967 27 67 +968 name_968 28 68 +969 name_969 29 69 +970 name_970 30 70 +971 name_971 31 71 +972 name_972 32 72 +973 name_973 33 73 +974 name_974 34 74 +975 name_975 35 75 +976 name_976 36 76 +977 name_977 37 77 +978 name_978 38 78 +979 name_979 39 79 +980 name_980 40 80 +981 name_981 41 81 +982 name_982 42 82 +983 name_983 43 83 +984 name_984 44 84 +985 name_985 45 85 +986 name_986 46 86 +987 name_987 47 87 +988 name_988 48 88 +989 name_989 49 89 +996 name_996 26 96 +997 name_997 27 97 +998 name_998 28 98 +999 name_999 29 99 +1000 name_1000 30 50 +1001 name_1001 31 51 +1002 name_1002 32 52 +1003 name_1003 33 53 +1004 name_1004 34 54 +1005 name_1005 35 55 +1006 name_1006 36 56 +1007 name_1007 37 57 +1008 name_1008 38 58 +1009 name_1009 39 59 +1010 name_1010 40 60 +1011 name_1011 41 61 +1012 name_1012 42 62 +1013 name_1013 43 63 +1014 name_1014 44 64 +1015 name_1015 45 65 +1016 name_1016 46 66 +1017 name_1017 47 67 +1018 name_1018 48 68 +1019 name_1019 49 69 +1026 name_1026 26 76 +1027 name_1027 27 77 +1028 name_1028 28 78 +1029 name_1029 29 79 +1030 name_1030 30 80 +1031 name_1031 31 81 +1032 name_1032 32 82 +1033 name_1033 33 83 +1034 name_1034 34 84 +1035 name_1035 35 85 +1036 name_1036 36 86 +1037 name_1037 37 87 +1038 name_1038 38 88 +1039 name_1039 39 89 +1040 name_1040 40 90 +1041 name_1041 41 91 +1042 name_1042 42 92 +1043 name_1043 43 93 +1044 name_1044 44 94 +1045 name_1045 45 95 +1046 name_1046 46 96 +1047 name_1047 47 97 +1048 name_1048 48 98 +1049 name_1049 49 99 +1056 name_1056 26 56 +1057 name_1057 27 57 +1058 name_1058 28 58 +1059 name_1059 29 59 +1060 name_1060 30 60 +1061 name_1061 31 61 +1062 name_1062 32 62 +1063 name_1063 33 63 +1064 name_1064 34 64 +1065 name_1065 35 65 +1066 name_1066 36 66 +1067 name_1067 37 67 +1068 name_1068 38 68 +1069 name_1069 39 69 +1070 name_1070 40 70 +1071 name_1071 41 71 +1072 name_1072 42 72 +1073 name_1073 43 73 +1074 name_1074 44 74 +1075 name_1075 45 75 +1076 name_1076 46 76 +1077 name_1077 47 77 +1078 name_1078 48 78 +1079 name_1079 49 79 +1086 name_1086 26 86 +1087 name_1087 27 87 +1088 name_1088 28 88 +1089 name_1089 29 89 +1090 name_1090 30 90 +1091 name_1091 31 91 +1092 name_1092 32 92 +1093 name_1093 33 93 +1094 name_1094 34 94 +1095 name_1095 35 95 +1096 name_1096 36 96 +1097 name_1097 37 97 +1098 name_1098 38 98 +1099 name_1099 39 99 +1100 name_1100 40 50 +1101 name_1101 41 51 +1102 name_1102 42 52 +1103 name_1103 43 53 +1104 name_1104 44 54 +1105 name_1105 45 55 +1106 name_1106 46 56 +1107 name_1107 47 57 +1108 name_1108 48 58 +1109 name_1109 49 59 +1116 name_1116 26 66 +1117 name_1117 27 67 +1118 name_1118 28 68 +1119 name_1119 29 69 +1120 name_1120 30 70 +1121 name_1121 31 71 +1122 name_1122 32 72 +1123 name_1123 33 73 +1124 name_1124 34 74 +1125 name_1125 35 75 +1126 name_1126 36 76 +1127 name_1127 37 77 +1128 name_1128 38 78 +1129 name_1129 39 79 +1130 name_1130 40 80 +1131 name_1131 41 81 +1132 name_1132 42 82 +1133 name_1133 43 83 +1134 name_1134 44 84 +1135 name_1135 45 85 +1136 name_1136 46 86 +1137 name_1137 47 87 +1138 name_1138 48 88 +1139 name_1139 49 89 +1146 name_1146 26 96 +1147 name_1147 27 97 +1148 name_1148 28 98 +1149 name_1149 29 99 +1150 name_1150 30 50 +1151 name_1151 31 51 +1152 name_1152 32 52 +1153 name_1153 33 53 +1154 name_1154 34 54 +1155 name_1155 35 55 +1156 name_1156 36 56 +1157 name_1157 37 57 +1158 name_1158 38 58 +1159 name_1159 39 59 +1160 name_1160 40 60 +1161 name_1161 41 61 +1162 name_1162 42 62 +1163 name_1163 43 63 +1164 name_1164 44 64 +1165 name_1165 45 65 +1166 name_1166 46 66 +1167 name_1167 47 67 +1168 name_1168 48 68 +1169 name_1169 49 69 +1176 name_1176 26 76 +1177 name_1177 27 77 +1178 name_1178 28 78 +1179 name_1179 29 79 +1180 name_1180 30 80 +1181 name_1181 31 81 +1182 name_1182 32 82 +1183 name_1183 33 83 +1184 name_1184 34 84 +1185 name_1185 35 85 +1186 name_1186 36 86 +1187 name_1187 37 87 +1188 name_1188 38 88 +1189 name_1189 39 89 +1190 name_1190 40 90 +1191 name_1191 41 91 +1192 name_1192 42 92 +1193 name_1193 43 93 +1194 name_1194 44 94 +1195 name_1195 45 95 +1196 name_1196 46 96 +1197 name_1197 47 97 +1198 name_1198 48 98 +1199 name_1199 49 99 +1206 name_1206 26 56 +1207 name_1207 27 57 +1208 name_1208 28 58 +1209 name_1209 29 59 +1210 name_1210 30 60 +1211 name_1211 31 61 +1212 name_1212 32 62 +1213 name_1213 33 63 +1214 name_1214 34 64 +1215 name_1215 35 65 +1216 name_1216 36 66 +1217 name_1217 37 67 +1218 name_1218 38 68 +1219 name_1219 39 69 +1220 name_1220 40 70 +1221 name_1221 41 71 +1222 name_1222 42 72 +1223 name_1223 43 73 +1224 name_1224 44 74 +1225 name_1225 45 75 +1226 name_1226 46 76 +1227 name_1227 47 77 +1228 name_1228 48 78 +1229 name_1229 49 79 +1236 name_1236 26 86 +1237 name_1237 27 87 +1238 name_1238 28 88 +1239 name_1239 29 89 +1240 name_1240 30 90 +1241 name_1241 31 91 +1242 name_1242 32 92 +1243 name_1243 33 93 +1244 name_1244 34 94 +1245 name_1245 35 95 +1246 name_1246 36 96 +1247 name_1247 37 97 +1248 name_1248 38 98 +1249 name_1249 39 99 +1250 name_1250 40 50 +1251 name_1251 41 51 +1252 name_1252 42 52 +1253 name_1253 43 53 +1254 name_1254 44 54 +1255 name_1255 45 55 +1256 name_1256 46 56 +1257 name_1257 47 57 +1258 name_1258 48 58 +1259 name_1259 49 59 +1266 name_1266 26 66 +1267 name_1267 27 67 +1268 name_1268 28 68 +1269 name_1269 29 69 +1270 name_1270 30 70 +1271 name_1271 31 71 +1272 name_1272 32 72 +1273 name_1273 33 73 +1274 name_1274 34 74 +1275 name_1275 35 75 +1276 name_1276 36 76 +1277 name_1277 37 77 +1278 name_1278 38 78 +1279 name_1279 39 79 +1280 name_1280 40 80 +1281 name_1281 41 81 +1282 name_1282 42 82 +1283 name_1283 43 83 +1284 name_1284 44 84 +1285 name_1285 45 85 +1286 name_1286 46 86 +1287 name_1287 47 87 +1288 name_1288 48 88 +1289 name_1289 49 89 +1296 name_1296 26 96 +1297 name_1297 27 97 +1298 name_1298 28 98 +1299 name_1299 29 99 +1300 name_1300 30 50 +1301 name_1301 31 51 +1302 name_1302 32 52 +1303 name_1303 33 53 +1304 name_1304 34 54 +1305 name_1305 35 55 +1306 name_1306 36 56 +1307 name_1307 37 57 +1308 name_1308 38 58 +1309 name_1309 39 59 +1310 name_1310 40 60 +1311 name_1311 41 61 +1312 name_1312 42 62 +1313 name_1313 43 63 +1314 name_1314 44 64 +1315 name_1315 45 65 +1316 name_1316 46 66 +1317 name_1317 47 67 +1318 name_1318 48 68 +1319 name_1319 49 69 +1326 name_1326 26 76 +1327 name_1327 27 77 +1328 name_1328 28 78 +1329 name_1329 29 79 +1330 name_1330 30 80 +1331 name_1331 31 81 +1332 name_1332 32 82 +1333 name_1333 33 83 +1334 name_1334 34 84 +1335 name_1335 35 85 +1336 name_1336 36 86 +1337 name_1337 37 87 +1338 name_1338 38 88 +1339 name_1339 39 89 +1340 name_1340 40 90 +1341 name_1341 41 91 +1342 name_1342 42 92 +1343 name_1343 43 93 +1344 name_1344 44 94 +1345 name_1345 45 95 +1346 name_1346 46 96 +1347 name_1347 47 97 +1348 name_1348 48 98 +1349 name_1349 49 99 +1356 name_1356 26 56 +1357 name_1357 27 57 +1358 name_1358 28 58 +1359 name_1359 29 59 +1360 name_1360 30 60 +1361 name_1361 31 61 +1362 name_1362 32 62 +1363 name_1363 33 63 +1364 name_1364 34 64 +1365 name_1365 35 65 +1366 name_1366 36 66 +1367 name_1367 37 67 +1368 name_1368 38 68 +1369 name_1369 39 69 +1370 name_1370 40 70 +1371 name_1371 41 71 +1372 name_1372 42 72 +1373 name_1373 43 73 +1374 name_1374 44 74 +1375 name_1375 45 75 +1376 name_1376 46 76 +1377 name_1377 47 77 +1378 name_1378 48 78 +1379 name_1379 49 79 +1386 name_1386 26 86 +1387 name_1387 27 87 +1388 name_1388 28 88 +1389 name_1389 29 89 +1390 name_1390 30 90 +1391 name_1391 31 91 +1392 name_1392 32 92 +1393 name_1393 33 93 +1394 name_1394 34 94 +1395 name_1395 35 95 +1396 name_1396 36 96 +1397 name_1397 37 97 +1398 name_1398 38 98 +1399 name_1399 39 99 +1400 name_1400 40 50 +1401 name_1401 41 51 +1402 name_1402 42 52 +1403 name_1403 43 53 +1404 name_1404 44 54 +1405 name_1405 45 55 +1406 name_1406 46 56 +1407 name_1407 47 57 +1408 name_1408 48 58 +1409 name_1409 49 59 +1416 name_1416 26 66 +1417 name_1417 27 67 +1418 name_1418 28 68 +1419 name_1419 29 69 +1420 name_1420 30 70 +1421 name_1421 31 71 +1422 name_1422 32 72 +1423 name_1423 33 73 +1424 name_1424 34 74 +1425 name_1425 35 75 +1426 name_1426 36 76 +1427 name_1427 37 77 +1428 name_1428 38 78 +1429 name_1429 39 79 +1430 name_1430 40 80 +1431 name_1431 41 81 +1432 name_1432 42 82 +1433 name_1433 43 83 +1434 name_1434 44 84 +1435 name_1435 45 85 +1436 name_1436 46 86 +1437 name_1437 47 87 +1438 name_1438 48 88 +1439 name_1439 49 89 +1446 name_1446 26 96 +1447 name_1447 27 97 +1448 name_1448 28 98 +1449 name_1449 29 99 +1450 name_1450 30 50 +1451 name_1451 31 51 +1452 name_1452 32 52 +1453 name_1453 33 53 +1454 name_1454 34 54 +1455 name_1455 35 55 +1456 name_1456 36 56 +1457 name_1457 37 57 +1458 name_1458 38 58 +1459 name_1459 39 59 +1460 name_1460 40 60 +1461 name_1461 41 61 +1462 name_1462 42 62 +1463 name_1463 43 63 +1464 name_1464 44 64 +1465 name_1465 45 65 +1466 name_1466 46 66 +1467 name_1467 47 67 +1468 name_1468 48 68 +1469 name_1469 49 69 +1476 name_1476 26 76 +1477 name_1477 27 77 +1478 name_1478 28 78 +1479 name_1479 29 79 +1480 name_1480 30 80 +1481 name_1481 31 81 +1482 name_1482 32 82 +1483 name_1483 33 83 +1484 name_1484 34 84 +1485 name_1485 35 85 +1486 name_1486 36 86 +1487 name_1487 37 87 +1488 name_1488 38 88 +1489 name_1489 39 89 +1490 name_1490 40 90 +1491 name_1491 41 91 +1492 name_1492 42 92 +1493 name_1493 43 93 +1494 name_1494 44 94 +1495 name_1495 45 95 +1496 name_1496 46 96 +1497 name_1497 47 97 +1498 name_1498 48 98 +1499 name_1499 49 99 +1506 name_1506 26 56 +1507 name_1507 27 57 +1508 name_1508 28 58 +1509 name_1509 29 59 +1510 name_1510 30 60 +1511 name_1511 31 61 +1512 name_1512 32 62 +1513 name_1513 33 63 +1514 name_1514 34 64 +1515 name_1515 35 65 +1516 name_1516 36 66 +1517 name_1517 37 67 +1518 name_1518 38 68 +1519 name_1519 39 69 +1520 name_1520 40 70 +1521 name_1521 41 71 +1522 name_1522 42 72 +1523 name_1523 43 73 +1524 name_1524 44 74 +1525 name_1525 45 75 +1526 name_1526 46 76 +1527 name_1527 47 77 +1528 name_1528 48 78 +1529 name_1529 49 79 +1536 name_1536 26 86 +1537 name_1537 27 87 +1538 name_1538 28 88 +1539 name_1539 29 89 +1540 name_1540 30 90 +1541 name_1541 31 91 +1542 name_1542 32 92 +1543 name_1543 33 93 +1544 name_1544 34 94 +1545 name_1545 35 95 +1546 name_1546 36 96 +1547 name_1547 37 97 +1548 name_1548 38 98 +1549 name_1549 39 99 +1550 name_1550 40 50 +1551 name_1551 41 51 +1552 name_1552 42 52 +1553 name_1553 43 53 +1554 name_1554 44 54 +1555 name_1555 45 55 +1556 name_1556 46 56 +1557 name_1557 47 57 +1558 name_1558 48 58 +1559 name_1559 49 59 +1566 name_1566 26 66 +1567 name_1567 27 67 +1568 name_1568 28 68 +1569 name_1569 29 69 +1570 name_1570 30 70 +1571 name_1571 31 71 +1572 name_1572 32 72 +1573 name_1573 33 73 +1574 name_1574 34 74 +1575 name_1575 35 75 +1576 name_1576 36 76 +1577 name_1577 37 77 +1578 name_1578 38 78 +1579 name_1579 39 79 +1580 name_1580 40 80 +1581 name_1581 41 81 +1582 name_1582 42 82 +1583 name_1583 43 83 +1584 name_1584 44 84 +1585 name_1585 45 85 +1586 name_1586 46 86 +1587 name_1587 47 87 +1588 name_1588 48 88 +1589 name_1589 49 89 +1596 name_1596 26 96 +1597 name_1597 27 97 +1598 name_1598 28 98 +1599 name_1599 29 99 +1600 name_1600 30 50 +1601 name_1601 31 51 +1602 name_1602 32 52 +1603 name_1603 33 53 +1604 name_1604 34 54 +1605 name_1605 35 55 +1606 name_1606 36 56 +1607 name_1607 37 57 +1608 name_1608 38 58 +1609 name_1609 39 59 +1610 name_1610 40 60 +1611 name_1611 41 61 +1612 name_1612 42 62 +1613 name_1613 43 63 +1614 name_1614 44 64 +1615 name_1615 45 65 +1616 name_1616 46 66 +1617 name_1617 47 67 +1618 name_1618 48 68 +1619 name_1619 49 69 +1626 name_1626 26 76 +1627 name_1627 27 77 +1628 name_1628 28 78 +1629 name_1629 29 79 +1630 name_1630 30 80 +1631 name_1631 31 81 +1632 name_1632 32 82 +1633 name_1633 33 83 +1634 name_1634 34 84 +1635 name_1635 35 85 +1636 name_1636 36 86 +1637 name_1637 37 87 +1638 name_1638 38 88 +1639 name_1639 39 89 +1640 name_1640 40 90 +1641 name_1641 41 91 +1642 name_1642 42 92 +1643 name_1643 43 93 +1644 name_1644 44 94 +1645 name_1645 45 95 +1646 name_1646 46 96 +1647 name_1647 47 97 +1648 name_1648 48 98 +1649 name_1649 49 99 +1656 name_1656 26 56 +1657 name_1657 27 57 +1658 name_1658 28 58 +1659 name_1659 29 59 +1660 name_1660 30 60 +1661 name_1661 31 61 +1662 name_1662 32 62 +1663 name_1663 33 63 +1664 name_1664 34 64 +1665 name_1665 35 65 +1666 name_1666 36 66 +1667 name_1667 37 67 +1668 name_1668 38 68 +1669 name_1669 39 69 +1670 name_1670 40 70 +1671 name_1671 41 71 +1672 name_1672 42 72 +1673 name_1673 43 73 +1674 name_1674 44 74 +1675 name_1675 45 75 +1676 name_1676 46 76 +1677 name_1677 47 77 +1678 name_1678 48 78 +1679 name_1679 49 79 +1686 name_1686 26 86 +1687 name_1687 27 87 +1688 name_1688 28 88 +1689 name_1689 29 89 +1690 name_1690 30 90 +1691 name_1691 31 91 +1692 name_1692 32 92 +1693 name_1693 33 93 +1694 name_1694 34 94 +1695 name_1695 35 95 +1696 name_1696 36 96 +1697 name_1697 37 97 +1698 name_1698 38 98 +1699 name_1699 39 99 +1700 name_1700 40 50 +1701 name_1701 41 51 +1702 name_1702 42 52 +1703 name_1703 43 53 +1704 name_1704 44 54 +1705 name_1705 45 55 +1706 name_1706 46 56 +1707 name_1707 47 57 +1708 name_1708 48 58 +1709 name_1709 49 59 +1716 name_1716 26 66 +1717 name_1717 27 67 +1718 name_1718 28 68 +1719 name_1719 29 69 +1720 name_1720 30 70 +1721 name_1721 31 71 +1722 name_1722 32 72 +1723 name_1723 33 73 +1724 name_1724 34 74 +1725 name_1725 35 75 +1726 name_1726 36 76 +1727 name_1727 37 77 +1728 name_1728 38 78 +1729 name_1729 39 79 +1730 name_1730 40 80 +1731 name_1731 41 81 +1732 name_1732 42 82 +1733 name_1733 43 83 +1734 name_1734 44 84 +1735 name_1735 45 85 +1736 name_1736 46 86 +1737 name_1737 47 87 +1738 name_1738 48 88 +1739 name_1739 49 89 +1746 name_1746 26 96 +1747 name_1747 27 97 +1748 name_1748 28 98 +1749 name_1749 29 99 +1750 name_1750 30 50 +1751 name_1751 31 51 +1752 name_1752 32 52 +1753 name_1753 33 53 +1754 name_1754 34 54 +1755 name_1755 35 55 +1756 name_1756 36 56 +1757 name_1757 37 57 +1758 name_1758 38 58 +1759 name_1759 39 59 +1760 name_1760 40 60 +1761 name_1761 41 61 +1762 name_1762 42 62 +1763 name_1763 43 63 +1764 name_1764 44 64 +1765 name_1765 45 65 +1766 name_1766 46 66 +1767 name_1767 47 67 +1768 name_1768 48 68 +1769 name_1769 49 69 +1776 name_1776 26 76 +1777 name_1777 27 77 +1778 name_1778 28 78 +1779 name_1779 29 79 +1780 name_1780 30 80 +1781 name_1781 31 81 +1782 name_1782 32 82 +1783 name_1783 33 83 +1784 name_1784 34 84 +1785 name_1785 35 85 +1786 name_1786 36 86 +1787 name_1787 37 87 +1788 name_1788 38 88 +1789 name_1789 39 89 +1790 name_1790 40 90 +1791 name_1791 41 91 +1792 name_1792 42 92 +1793 name_1793 43 93 +1794 name_1794 44 94 +1795 name_1795 45 95 +1796 name_1796 46 96 +1797 name_1797 47 97 +1798 name_1798 48 98 +1799 name_1799 49 99 +1806 name_1806 26 56 +1807 name_1807 27 57 +1808 name_1808 28 58 +1809 name_1809 29 59 +1810 name_1810 30 60 +1811 name_1811 31 61 +1812 name_1812 32 62 +1813 name_1813 33 63 +1814 name_1814 34 64 +1815 name_1815 35 65 +1816 name_1816 36 66 +1817 name_1817 37 67 +1818 name_1818 38 68 +1819 name_1819 39 69 +1820 name_1820 40 70 +1821 name_1821 41 71 +1822 name_1822 42 72 +1823 name_1823 43 73 +1824 name_1824 44 74 +1825 name_1825 45 75 +1826 name_1826 46 76 +1827 name_1827 47 77 +1828 name_1828 48 78 +1829 name_1829 49 79 +1836 name_1836 26 86 +1837 name_1837 27 87 +1838 name_1838 28 88 +1839 name_1839 29 89 +1840 name_1840 30 90 +1841 name_1841 31 91 +1842 name_1842 32 92 +1843 name_1843 33 93 +1844 name_1844 34 94 +1845 name_1845 35 95 +1846 name_1846 36 96 +1847 name_1847 37 97 +1848 name_1848 38 98 +1849 name_1849 39 99 +1850 name_1850 40 50 +1851 name_1851 41 51 +1852 name_1852 42 52 +1853 name_1853 43 53 +1854 name_1854 44 54 +1855 name_1855 45 55 +1856 name_1856 46 56 +1857 name_1857 47 57 +1858 name_1858 48 58 +1859 name_1859 49 59 +1866 name_1866 26 66 +1867 name_1867 27 67 +1868 name_1868 28 68 +1869 name_1869 29 69 +1870 name_1870 30 70 +1871 name_1871 31 71 +1872 name_1872 32 72 +1873 name_1873 33 73 +1874 name_1874 34 74 +1875 name_1875 35 75 +1876 name_1876 36 76 +1877 name_1877 37 77 +1878 name_1878 38 78 +1879 name_1879 39 79 +1880 name_1880 40 80 +1881 name_1881 41 81 +1882 name_1882 42 82 +1883 name_1883 43 83 +1884 name_1884 44 84 +1885 name_1885 45 85 +1886 name_1886 46 86 +1887 name_1887 47 87 +1888 name_1888 48 88 +1889 name_1889 49 89 +1896 name_1896 26 96 +1897 name_1897 27 97 +1898 name_1898 28 98 +1899 name_1899 29 99 +1900 name_1900 30 50 +1901 name_1901 31 51 +1902 name_1902 32 52 +1903 name_1903 33 53 +1904 name_1904 34 54 +1905 name_1905 35 55 +1906 name_1906 36 56 +1907 name_1907 37 57 +1908 name_1908 38 58 +1909 name_1909 39 59 +1910 name_1910 40 60 +1911 name_1911 41 61 +1912 name_1912 42 62 +1913 name_1913 43 63 +1914 name_1914 44 64 +1915 name_1915 45 65 +1916 name_1916 46 66 +1917 name_1917 47 67 +1918 name_1918 48 68 +1919 name_1919 49 69 +1926 name_1926 26 76 +1927 name_1927 27 77 +1928 name_1928 28 78 +1929 name_1929 29 79 +1930 name_1930 30 80 +1931 name_1931 31 81 +1932 name_1932 32 82 +1933 name_1933 33 83 +1934 name_1934 34 84 +1935 name_1935 35 85 +1936 name_1936 36 86 +1937 name_1937 37 87 +1938 name_1938 38 88 +1939 name_1939 39 89 +1940 name_1940 40 90 +1941 name_1941 41 91 +1942 name_1942 42 92 +1943 name_1943 43 93 +1944 name_1944 44 94 +1945 name_1945 45 95 +1946 name_1946 46 96 +1947 name_1947 47 97 +1948 name_1948 48 98 +1949 name_1949 49 99 +1956 name_1956 26 56 +1957 name_1957 27 57 +1958 name_1958 28 58 +1959 name_1959 29 59 +1960 name_1960 30 60 +1961 name_1961 31 61 +1962 name_1962 32 62 +1963 name_1963 33 63 +1964 name_1964 34 64 +1965 name_1965 35 65 +1966 name_1966 36 66 +1967 name_1967 37 67 +1968 name_1968 38 68 +1969 name_1969 39 69 +1970 name_1970 40 70 +1971 name_1971 41 71 +1972 name_1972 42 72 +1973 name_1973 43 73 +1974 name_1974 44 74 +1975 name_1975 45 75 +1976 name_1976 46 76 +1977 name_1977 47 77 +1978 name_1978 48 78 +1979 name_1979 49 79 +1986 name_1986 26 86 +1987 name_1987 27 87 +1988 name_1988 28 88 +1989 name_1989 29 89 +1990 name_1990 30 90 +1991 name_1991 31 91 +1992 name_1992 32 92 +1993 name_1993 33 93 +1994 name_1994 34 94 +1995 name_1995 35 95 +1996 name_1996 36 96 +1997 name_1997 37 97 +1998 name_1998 38 98 +1999 name_1999 39 99 +2000 name_2000 40 50 +2001 name_2001 41 51 +2002 name_2002 42 52 +2003 name_2003 43 53 +2004 name_2004 44 54 +2005 name_2005 45 55 +2006 name_2006 46 56 +2007 name_2007 47 57 +2008 name_2008 48 58 +2009 name_2009 49 59 +2016 name_2016 26 66 +2017 name_2017 27 67 +2018 name_2018 28 68 +2019 name_2019 29 69 +2020 name_2020 30 70 +2021 name_2021 31 71 +2022 name_2022 32 72 +2023 name_2023 33 73 +2024 name_2024 34 74 +2025 name_2025 35 75 +2026 name_2026 36 76 +2027 name_2027 37 77 +2028 name_2028 38 78 +2029 name_2029 39 79 +2030 name_2030 40 80 +2031 name_2031 41 81 +2032 name_2032 42 82 +2033 name_2033 43 83 +2034 name_2034 44 84 +2035 name_2035 45 85 +2036 name_2036 46 86 +2037 name_2037 47 87 +2038 name_2038 48 88 +2039 name_2039 49 89 +2046 name_2046 26 96 +2047 name_2047 27 97 +2048 name_2048 28 98 +2049 name_2049 29 99 +2050 name_2050 30 50 +2051 name_2051 31 51 +2052 name_2052 32 52 +2053 name_2053 33 53 +2054 name_2054 34 54 +2055 name_2055 35 55 +2056 name_2056 36 56 +2057 name_2057 37 57 +2058 name_2058 38 58 +2059 name_2059 39 59 +2060 name_2060 40 60 +2061 name_2061 41 61 +2062 name_2062 42 62 +2063 name_2063 43 63 +2064 name_2064 44 64 +2065 name_2065 45 65 +2066 name_2066 46 66 +2067 name_2067 47 67 +2068 name_2068 48 68 +2069 name_2069 49 69 +2076 name_2076 26 76 +2077 name_2077 27 77 +2078 name_2078 28 78 +2079 name_2079 29 79 +2080 name_2080 30 80 +2081 name_2081 31 81 +2082 name_2082 32 82 +2083 name_2083 33 83 +2084 name_2084 34 84 +2085 name_2085 35 85 +2086 name_2086 36 86 +2087 name_2087 37 87 +2088 name_2088 38 88 +2089 name_2089 39 89 +2090 name_2090 40 90 +2091 name_2091 41 91 +2092 name_2092 42 92 +2093 name_2093 43 93 +2094 name_2094 44 94 +2095 name_2095 45 95 +2096 name_2096 46 96 +2097 name_2097 47 97 +2098 name_2098 48 98 +2099 name_2099 49 99 +2106 name_2106 26 56 +2107 name_2107 27 57 +2108 name_2108 28 58 +2109 name_2109 29 59 +2110 name_2110 30 60 +2111 name_2111 31 61 +2112 name_2112 32 62 +2113 name_2113 33 63 +2114 name_2114 34 64 +2115 name_2115 35 65 +2116 name_2116 36 66 +2117 name_2117 37 67 +2118 name_2118 38 68 +2119 name_2119 39 69 +2120 name_2120 40 70 +2121 name_2121 41 71 +2122 name_2122 42 72 +2123 name_2123 43 73 +2124 name_2124 44 74 +2125 name_2125 45 75 +2126 name_2126 46 76 +2127 name_2127 47 77 +2128 name_2128 48 78 +2129 name_2129 49 79 +2136 name_2136 26 86 +2137 name_2137 27 87 +2138 name_2138 28 88 +2139 name_2139 29 89 +2140 name_2140 30 90 +2141 name_2141 31 91 +2142 name_2142 32 92 +2143 name_2143 33 93 +2144 name_2144 34 94 +2145 name_2145 35 95 +2146 name_2146 36 96 +2147 name_2147 37 97 +2148 name_2148 38 98 +2149 name_2149 39 99 +2150 name_2150 40 50 +2151 name_2151 41 51 +2152 name_2152 42 52 +2153 name_2153 43 53 +2154 name_2154 44 54 +2155 name_2155 45 55 +2156 name_2156 46 56 +2157 name_2157 47 57 +2158 name_2158 48 58 +2159 name_2159 49 59 +2166 name_2166 26 66 +2167 name_2167 27 67 +2168 name_2168 28 68 +2169 name_2169 29 69 +2170 name_2170 30 70 +2171 name_2171 31 71 +2172 name_2172 32 72 +2173 name_2173 33 73 +2174 name_2174 34 74 +2175 name_2175 35 75 +2176 name_2176 36 76 +2177 name_2177 37 77 +2178 name_2178 38 78 +2179 name_2179 39 79 +2180 name_2180 40 80 +2181 name_2181 41 81 +2182 name_2182 42 82 +2183 name_2183 43 83 +2184 name_2184 44 84 +2185 name_2185 45 85 +2186 name_2186 46 86 +2187 name_2187 47 87 +2188 name_2188 48 88 +2189 name_2189 49 89 +2196 name_2196 26 96 +2197 name_2197 27 97 +2198 name_2198 28 98 +2199 name_2199 29 99 +2200 name_2200 30 50 +2201 name_2201 31 51 +2202 name_2202 32 52 +2203 name_2203 33 53 +2204 name_2204 34 54 +2205 name_2205 35 55 +2206 name_2206 36 56 +2207 name_2207 37 57 +2208 name_2208 38 58 +2209 name_2209 39 59 +2210 name_2210 40 60 +2211 name_2211 41 61 +2212 name_2212 42 62 +2213 name_2213 43 63 +2214 name_2214 44 64 +2215 name_2215 45 65 +2216 name_2216 46 66 +2217 name_2217 47 67 +2218 name_2218 48 68 +2219 name_2219 49 69 +2226 name_2226 26 76 +2227 name_2227 27 77 +2228 name_2228 28 78 +2229 name_2229 29 79 +2230 name_2230 30 80 +2231 name_2231 31 81 +2232 name_2232 32 82 +2233 name_2233 33 83 +2234 name_2234 34 84 +2235 name_2235 35 85 +2236 name_2236 36 86 +2237 name_2237 37 87 +2238 name_2238 38 88 +2239 name_2239 39 89 +2240 name_2240 40 90 +2241 name_2241 41 91 +2242 name_2242 42 92 +2243 name_2243 43 93 +2244 name_2244 44 94 +2245 name_2245 45 95 +2246 name_2246 46 96 +2247 name_2247 47 97 +2248 name_2248 48 98 +2249 name_2249 49 99 +2256 name_2256 26 56 +2257 name_2257 27 57 +2258 name_2258 28 58 +2259 name_2259 29 59 +2260 name_2260 30 60 +2261 name_2261 31 61 +2262 name_2262 32 62 +2263 name_2263 33 63 +2264 name_2264 34 64 +2265 name_2265 35 65 +2266 name_2266 36 66 +2267 name_2267 37 67 +2268 name_2268 38 68 +2269 name_2269 39 69 +2270 name_2270 40 70 +2271 name_2271 41 71 +2272 name_2272 42 72 +2273 name_2273 43 73 +2274 name_2274 44 74 +2275 name_2275 45 75 +2276 name_2276 46 76 +2277 name_2277 47 77 +2278 name_2278 48 78 +2279 name_2279 49 79 +2286 name_2286 26 86 +2287 name_2287 27 87 +2288 name_2288 28 88 +2289 name_2289 29 89 +2290 name_2290 30 90 +2291 name_2291 31 91 +2292 name_2292 32 92 +2293 name_2293 33 93 +2294 name_2294 34 94 +2295 name_2295 35 95 +2296 name_2296 36 96 +2297 name_2297 37 97 +2298 name_2298 38 98 +2299 name_2299 39 99 +2300 name_2300 40 50 +2301 name_2301 41 51 +2302 name_2302 42 52 +2303 name_2303 43 53 +2304 name_2304 44 54 +2305 name_2305 45 55 +2306 name_2306 46 56 +2307 name_2307 47 57 +2308 name_2308 48 58 +2309 name_2309 49 59 +2316 name_2316 26 66 +2317 name_2317 27 67 +2318 name_2318 28 68 +2319 name_2319 29 69 +2320 name_2320 30 70 +2321 name_2321 31 71 +2322 name_2322 32 72 +2323 name_2323 33 73 +2324 name_2324 34 74 +2325 name_2325 35 75 +2326 name_2326 36 76 +2327 name_2327 37 77 +2328 name_2328 38 78 +2329 name_2329 39 79 +2330 name_2330 40 80 +2331 name_2331 41 81 +2332 name_2332 42 82 +2333 name_2333 43 83 +2334 name_2334 44 84 +2335 name_2335 45 85 +2336 name_2336 46 86 +2337 name_2337 47 87 +2338 name_2338 48 88 +2339 name_2339 49 89 +2346 name_2346 26 96 +2347 name_2347 27 97 +2348 name_2348 28 98 +2349 name_2349 29 99 +2350 name_2350 30 50 +2351 name_2351 31 51 +2352 name_2352 32 52 +2353 name_2353 33 53 +2354 name_2354 34 54 +2355 name_2355 35 55 +2356 name_2356 36 56 +2357 name_2357 37 57 +2358 name_2358 38 58 +2359 name_2359 39 59 +2360 name_2360 40 60 +2361 name_2361 41 61 +2362 name_2362 42 62 +2363 name_2363 43 63 +2364 name_2364 44 64 +2365 name_2365 45 65 +2366 name_2366 46 66 +2367 name_2367 47 67 +2368 name_2368 48 68 +2369 name_2369 49 69 +2376 name_2376 26 76 +2377 name_2377 27 77 +2378 name_2378 28 78 +2379 name_2379 29 79 +2380 name_2380 30 80 +2381 name_2381 31 81 +2382 name_2382 32 82 +2383 name_2383 33 83 +2384 name_2384 34 84 +2385 name_2385 35 85 +2386 name_2386 36 86 +2387 name_2387 37 87 +2388 name_2388 38 88 +2389 name_2389 39 89 +2390 name_2390 40 90 +2391 name_2391 41 91 +2392 name_2392 42 92 +2393 name_2393 43 93 +2394 name_2394 44 94 +2395 name_2395 45 95 +2396 name_2396 46 96 +2397 name_2397 47 97 +2398 name_2398 48 98 +2399 name_2399 49 99 +2406 name_2406 26 56 +2407 name_2407 27 57 +2408 name_2408 28 58 +2409 name_2409 29 59 +2410 name_2410 30 60 +2411 name_2411 31 61 +2412 name_2412 32 62 +2413 name_2413 33 63 +2414 name_2414 34 64 +2415 name_2415 35 65 +2416 name_2416 36 66 +2417 name_2417 37 67 +2418 name_2418 38 68 +2419 name_2419 39 69 +2420 name_2420 40 70 +2421 name_2421 41 71 +2422 name_2422 42 72 +2423 name_2423 43 73 +2424 name_2424 44 74 +2425 name_2425 45 75 +2426 name_2426 46 76 +2427 name_2427 47 77 +2428 name_2428 48 78 +2429 name_2429 49 79 +2436 name_2436 26 86 +2437 name_2437 27 87 +2438 name_2438 28 88 +2439 name_2439 29 89 +2440 name_2440 30 90 +2441 name_2441 31 91 +2442 name_2442 32 92 +2443 name_2443 33 93 +2444 name_2444 34 94 +2445 name_2445 35 95 +2446 name_2446 36 96 +2447 name_2447 37 97 +2448 name_2448 38 98 +2449 name_2449 39 99 +2450 name_2450 40 50 +2451 name_2451 41 51 +2452 name_2452 42 52 +2453 name_2453 43 53 +2454 name_2454 44 54 +2455 name_2455 45 55 +2456 name_2456 46 56 +2457 name_2457 47 57 +2458 name_2458 48 58 +2459 name_2459 49 59 +2466 name_2466 26 66 +2467 name_2467 27 67 +2468 name_2468 28 68 +2469 name_2469 29 69 +2470 name_2470 30 70 +2471 name_2471 31 71 +2472 name_2472 32 72 +2473 name_2473 33 73 +2474 name_2474 34 74 +2475 name_2475 35 75 +2476 name_2476 36 76 +2477 name_2477 37 77 +2478 name_2478 38 78 +2479 name_2479 39 79 +2480 name_2480 40 80 +2481 name_2481 41 81 +2482 name_2482 42 82 +2483 name_2483 43 83 +2484 name_2484 44 84 +2485 name_2485 45 85 +2486 name_2486 46 86 +2487 name_2487 47 87 +2488 name_2488 48 88 +2489 name_2489 49 89 +2496 name_2496 26 96 +2497 name_2497 27 97 +2498 name_2498 28 98 +2499 name_2499 29 99 +2500 name_2500 30 50 +2501 name_2501 31 51 +2502 name_2502 32 52 +2503 name_2503 33 53 +2504 name_2504 34 54 +2505 name_2505 35 55 +2506 name_2506 36 56 +2507 name_2507 37 57 +2508 name_2508 38 58 +2509 name_2509 39 59 +2510 name_2510 40 60 +2511 name_2511 41 61 +2512 name_2512 42 62 +2513 name_2513 43 63 +2514 name_2514 44 64 +2515 name_2515 45 65 +2516 name_2516 46 66 +2517 name_2517 47 67 +2518 name_2518 48 68 +2519 name_2519 49 69 +2526 name_2526 26 76 +2527 name_2527 27 77 +2528 name_2528 28 78 +2529 name_2529 29 79 +2530 name_2530 30 80 +2531 name_2531 31 81 +2532 name_2532 32 82 +2533 name_2533 33 83 +2534 name_2534 34 84 +2535 name_2535 35 85 +2536 name_2536 36 86 +2537 name_2537 37 87 +2538 name_2538 38 88 +2539 name_2539 39 89 +2540 name_2540 40 90 +2541 name_2541 41 91 +2542 name_2542 42 92 +2543 name_2543 43 93 +2544 name_2544 44 94 +2545 name_2545 45 95 +2546 name_2546 46 96 +2547 name_2547 47 97 +2548 name_2548 48 98 +2549 name_2549 49 99 +2556 name_2556 26 56 +2557 name_2557 27 57 +2558 name_2558 28 58 +2559 name_2559 29 59 +2560 name_2560 30 60 +2561 name_2561 31 61 +2562 name_2562 32 62 +2563 name_2563 33 63 +2564 name_2564 34 64 +2565 name_2565 35 65 +2566 name_2566 36 66 +2567 name_2567 37 67 +2568 name_2568 38 68 +2569 name_2569 39 69 +2570 name_2570 40 70 +2571 name_2571 41 71 +2572 name_2572 42 72 +2573 name_2573 43 73 +2574 name_2574 44 74 +2575 name_2575 45 75 +2576 name_2576 46 76 +2577 name_2577 47 77 +2578 name_2578 48 78 +2579 name_2579 49 79 +2586 name_2586 26 86 +2587 name_2587 27 87 +2588 name_2588 28 88 +2589 name_2589 29 89 +2590 name_2590 30 90 +2591 name_2591 31 91 +2592 name_2592 32 92 +2593 name_2593 33 93 +2594 name_2594 34 94 +2595 name_2595 35 95 +2596 name_2596 36 96 +2597 name_2597 37 97 +2598 name_2598 38 98 +2599 name_2599 39 99 +2600 name_2600 40 50 +2601 name_2601 41 51 +2602 name_2602 42 52 +2603 name_2603 43 53 +2604 name_2604 44 54 +2605 name_2605 45 55 +2606 name_2606 46 56 +2607 name_2607 47 57 +2608 name_2608 48 58 +2609 name_2609 49 59 +2616 name_2616 26 66 +2617 name_2617 27 67 +2618 name_2618 28 68 +2619 name_2619 29 69 +2620 name_2620 30 70 +2621 name_2621 31 71 +2622 name_2622 32 72 +2623 name_2623 33 73 +2624 name_2624 34 74 +2625 name_2625 35 75 +2626 name_2626 36 76 +2627 name_2627 37 77 +2628 name_2628 38 78 +2629 name_2629 39 79 +2630 name_2630 40 80 +2631 name_2631 41 81 +2632 name_2632 42 82 +2633 name_2633 43 83 +2634 name_2634 44 84 +2635 name_2635 45 85 +2636 name_2636 46 86 +2637 name_2637 47 87 +2638 name_2638 48 88 +2639 name_2639 49 89 +2646 name_2646 26 96 +2647 name_2647 27 97 +2648 name_2648 28 98 +2649 name_2649 29 99 +2650 name_2650 30 50 +2651 name_2651 31 51 +2652 name_2652 32 52 +2653 name_2653 33 53 +2654 name_2654 34 54 +2655 name_2655 35 55 +2656 name_2656 36 56 +2657 name_2657 37 57 +2658 name_2658 38 58 +2659 name_2659 39 59 +2660 name_2660 40 60 +2661 name_2661 41 61 +2662 name_2662 42 62 +2663 name_2663 43 63 +2664 name_2664 44 64 +2665 name_2665 45 65 +2666 name_2666 46 66 +2667 name_2667 47 67 +2668 name_2668 48 68 +2669 name_2669 49 69 +2676 name_2676 26 76 +2677 name_2677 27 77 +2678 name_2678 28 78 +2679 name_2679 29 79 +2680 name_2680 30 80 +2681 name_2681 31 81 +2682 name_2682 32 82 +2683 name_2683 33 83 +2684 name_2684 34 84 +2685 name_2685 35 85 +2686 name_2686 36 86 +2687 name_2687 37 87 +2688 name_2688 38 88 +2689 name_2689 39 89 +2690 name_2690 40 90 +2691 name_2691 41 91 +2692 name_2692 42 92 +2693 name_2693 43 93 +2694 name_2694 44 94 +2695 name_2695 45 95 +2696 name_2696 46 96 +2697 name_2697 47 97 +2698 name_2698 48 98 +2699 name_2699 49 99 +2706 name_2706 26 56 +2707 name_2707 27 57 +2708 name_2708 28 58 +2709 name_2709 29 59 +2710 name_2710 30 60 +2711 name_2711 31 61 +2712 name_2712 32 62 +2713 name_2713 33 63 +2714 name_2714 34 64 +2715 name_2715 35 65 +2716 name_2716 36 66 +2717 name_2717 37 67 +2718 name_2718 38 68 +2719 name_2719 39 69 +2720 name_2720 40 70 +2721 name_2721 41 71 +2722 name_2722 42 72 +2723 name_2723 43 73 +2724 name_2724 44 74 +2725 name_2725 45 75 +2726 name_2726 46 76 +2727 name_2727 47 77 +2728 name_2728 48 78 +2729 name_2729 49 79 +2736 name_2736 26 86 +2737 name_2737 27 87 +2738 name_2738 28 88 +2739 name_2739 29 89 +2740 name_2740 30 90 +2741 name_2741 31 91 +2742 name_2742 32 92 +2743 name_2743 33 93 +2744 name_2744 34 94 +2745 name_2745 35 95 +2746 name_2746 36 96 +2747 name_2747 37 97 +2748 name_2748 38 98 +2749 name_2749 39 99 +2750 name_2750 40 50 +2751 name_2751 41 51 +2752 name_2752 42 52 +2753 name_2753 43 53 +2754 name_2754 44 54 +2755 name_2755 45 55 +2756 name_2756 46 56 +2757 name_2757 47 57 +2758 name_2758 48 58 +2759 name_2759 49 59 +2766 name_2766 26 66 +2767 name_2767 27 67 +2768 name_2768 28 68 +2769 name_2769 29 69 +2770 name_2770 30 70 +2771 name_2771 31 71 +2772 name_2772 32 72 +2773 name_2773 33 73 +2774 name_2774 34 74 +2775 name_2775 35 75 +2776 name_2776 36 76 +2777 name_2777 37 77 +2778 name_2778 38 78 +2779 name_2779 39 79 +2780 name_2780 40 80 +2781 name_2781 41 81 +2782 name_2782 42 82 +2783 name_2783 43 83 +2784 name_2784 44 84 +2785 name_2785 45 85 +2786 name_2786 46 86 +2787 name_2787 47 87 +2788 name_2788 48 88 +2789 name_2789 49 89 +2796 name_2796 26 96 +2797 name_2797 27 97 +2798 name_2798 28 98 +2799 name_2799 29 99 +2800 name_2800 30 50 +2801 name_2801 31 51 +2802 name_2802 32 52 +2803 name_2803 33 53 +2804 name_2804 34 54 +2805 name_2805 35 55 +2806 name_2806 36 56 +2807 name_2807 37 57 +2808 name_2808 38 58 +2809 name_2809 39 59 +2810 name_2810 40 60 +2811 name_2811 41 61 +2812 name_2812 42 62 +2813 name_2813 43 63 +2814 name_2814 44 64 +2815 name_2815 45 65 +2816 name_2816 46 66 +2817 name_2817 47 67 +2818 name_2818 48 68 +2819 name_2819 49 69 +2826 name_2826 26 76 +2827 name_2827 27 77 +2828 name_2828 28 78 +2829 name_2829 29 79 +2830 name_2830 30 80 +2831 name_2831 31 81 +2832 name_2832 32 82 +2833 name_2833 33 83 +2834 name_2834 34 84 +2835 name_2835 35 85 +2836 name_2836 36 86 +2837 name_2837 37 87 +2838 name_2838 38 88 +2839 name_2839 39 89 +2840 name_2840 40 90 +2841 name_2841 41 91 +2842 name_2842 42 92 +2843 name_2843 43 93 +2844 name_2844 44 94 +2845 name_2845 45 95 +2846 name_2846 46 96 +2847 name_2847 47 97 +2848 name_2848 48 98 +2849 name_2849 49 99 +2856 name_2856 26 56 +2857 name_2857 27 57 +2858 name_2858 28 58 +2859 name_2859 29 59 +2860 name_2860 30 60 +2861 name_2861 31 61 +2862 name_2862 32 62 +2863 name_2863 33 63 +2864 name_2864 34 64 +2865 name_2865 35 65 +2866 name_2866 36 66 +2867 name_2867 37 67 +2868 name_2868 38 68 +2869 name_2869 39 69 +2870 name_2870 40 70 +2871 name_2871 41 71 +2872 name_2872 42 72 +2873 name_2873 43 73 +2874 name_2874 44 74 +2875 name_2875 45 75 +2876 name_2876 46 76 +2877 name_2877 47 77 +2878 name_2878 48 78 +2879 name_2879 49 79 +2886 name_2886 26 86 +2887 name_2887 27 87 +2888 name_2888 28 88 +2889 name_2889 29 89 +2890 name_2890 30 90 +2891 name_2891 31 91 +2892 name_2892 32 92 +2893 name_2893 33 93 +2894 name_2894 34 94 +2895 name_2895 35 95 +2896 name_2896 36 96 +2897 name_2897 37 97 +2898 name_2898 38 98 +2899 name_2899 39 99 +2900 name_2900 40 50 +2901 name_2901 41 51 +2902 name_2902 42 52 +2903 name_2903 43 53 +2904 name_2904 44 54 +2905 name_2905 45 55 +2906 name_2906 46 56 +2907 name_2907 47 57 +2908 name_2908 48 58 +2909 name_2909 49 59 +2916 name_2916 26 66 +2917 name_2917 27 67 +2918 name_2918 28 68 +2919 name_2919 29 69 +2920 name_2920 30 70 +2921 name_2921 31 71 +2922 name_2922 32 72 +2923 name_2923 33 73 +2924 name_2924 34 74 +2925 name_2925 35 75 +2926 name_2926 36 76 +2927 name_2927 37 77 +2928 name_2928 38 78 +2929 name_2929 39 79 +2930 name_2930 40 80 +2931 name_2931 41 81 +2932 name_2932 42 82 +2933 name_2933 43 83 +2934 name_2934 44 84 +2935 name_2935 45 85 +2936 name_2936 46 86 +2937 name_2937 47 87 +2938 name_2938 48 88 +2939 name_2939 49 89 +2946 name_2946 26 96 +2947 name_2947 27 97 +2948 name_2948 28 98 +2949 name_2949 29 99 +2950 name_2950 30 50 +2951 name_2951 31 51 +2952 name_2952 32 52 +2953 name_2953 33 53 +2954 name_2954 34 54 +2955 name_2955 35 55 +2956 name_2956 36 56 +2957 name_2957 37 57 +2958 name_2958 38 58 +2959 name_2959 39 59 +2960 name_2960 40 60 +2961 name_2961 41 61 +2962 name_2962 42 62 +2963 name_2963 43 63 +2964 name_2964 44 64 +2965 name_2965 45 65 +2966 name_2966 46 66 +2967 name_2967 47 67 +2968 name_2968 48 68 +2969 name_2969 49 69 +2976 name_2976 26 76 +2977 name_2977 27 77 +2978 name_2978 28 78 +2979 name_2979 29 79 +2980 name_2980 30 80 +2981 name_2981 31 81 +2982 name_2982 32 82 +2983 name_2983 33 83 +2984 name_2984 34 84 +2985 name_2985 35 85 +2986 name_2986 36 86 +2987 name_2987 37 87 +2988 name_2988 38 88 +2989 name_2989 39 89 +2990 name_2990 40 90 +2991 name_2991 41 91 +2992 name_2992 42 92 +2993 name_2993 43 93 +2994 name_2994 44 94 +2995 name_2995 45 95 +2996 name_2996 46 96 +2997 name_2997 47 97 +2998 name_2998 48 98 +2999 name_2999 49 99 +3006 name_3006 26 56 +3007 name_3007 27 57 +3008 name_3008 28 58 +3009 name_3009 29 59 +3010 name_3010 30 60 +3011 name_3011 31 61 +3012 name_3012 32 62 +3013 name_3013 33 63 +3014 name_3014 34 64 +3015 name_3015 35 65 +3016 name_3016 36 66 +3017 name_3017 37 67 +3018 name_3018 38 68 +3019 name_3019 39 69 +3020 name_3020 40 70 +3021 name_3021 41 71 +3022 name_3022 42 72 +3023 name_3023 43 73 +3024 name_3024 44 74 +3025 name_3025 45 75 +3026 name_3026 46 76 +3027 name_3027 47 77 +3028 name_3028 48 78 +3029 name_3029 49 79 +3036 name_3036 26 86 +3037 name_3037 27 87 +3038 name_3038 28 88 +3039 name_3039 29 89 +3040 name_3040 30 90 +3041 name_3041 31 91 +3042 name_3042 32 92 +3043 name_3043 33 93 +3044 name_3044 34 94 +3045 name_3045 35 95 +3046 name_3046 36 96 +3047 name_3047 37 97 +3048 name_3048 38 98 +3049 name_3049 39 99 +3050 name_3050 40 50 +3051 name_3051 41 51 +3052 name_3052 42 52 +3053 name_3053 43 53 +3054 name_3054 44 54 +3055 name_3055 45 55 +3056 name_3056 46 56 +3057 name_3057 47 57 +3058 name_3058 48 58 +3059 name_3059 49 59 +3066 name_3066 26 66 +3067 name_3067 27 67 +3068 name_3068 28 68 +3069 name_3069 29 69 +3070 name_3070 30 70 +3071 name_3071 31 71 +3072 name_3072 32 72 +3073 name_3073 33 73 +3074 name_3074 34 74 +3075 name_3075 35 75 +3076 name_3076 36 76 +3077 name_3077 37 77 +3078 name_3078 38 78 +3079 name_3079 39 79 +3080 name_3080 40 80 +3081 name_3081 41 81 +3082 name_3082 42 82 +3083 name_3083 43 83 +3084 name_3084 44 84 +3085 name_3085 45 85 +3086 name_3086 46 86 +3087 name_3087 47 87 +3088 name_3088 48 88 +3089 name_3089 49 89 +3096 name_3096 26 96 +3097 name_3097 27 97 +3098 name_3098 28 98 +3099 name_3099 29 99 +3100 name_3100 30 50 +3101 name_3101 31 51 +3102 name_3102 32 52 +3103 name_3103 33 53 +3104 name_3104 34 54 +3105 name_3105 35 55 +3106 name_3106 36 56 +3107 name_3107 37 57 +3108 name_3108 38 58 +3109 name_3109 39 59 +3110 name_3110 40 60 +3111 name_3111 41 61 +3112 name_3112 42 62 +3113 name_3113 43 63 +3114 name_3114 44 64 +3115 name_3115 45 65 +3116 name_3116 46 66 +3117 name_3117 47 67 +3118 name_3118 48 68 +3119 name_3119 49 69 +3126 name_3126 26 76 +3127 name_3127 27 77 +3128 name_3128 28 78 +3129 name_3129 29 79 +3130 name_3130 30 80 +3131 name_3131 31 81 +3132 name_3132 32 82 +3133 name_3133 33 83 +3134 name_3134 34 84 +3135 name_3135 35 85 +3136 name_3136 36 86 +3137 name_3137 37 87 +3138 name_3138 38 88 +3139 name_3139 39 89 +3140 name_3140 40 90 +3141 name_3141 41 91 +3142 name_3142 42 92 +3143 name_3143 43 93 +3144 name_3144 44 94 +3145 name_3145 45 95 +3146 name_3146 46 96 +3147 name_3147 47 97 +3148 name_3148 48 98 +3149 name_3149 49 99 +3156 name_3156 26 56 +3157 name_3157 27 57 +3158 name_3158 28 58 +3159 name_3159 29 59 +3160 name_3160 30 60 +3161 name_3161 31 61 +3162 name_3162 32 62 +3163 name_3163 33 63 +3164 name_3164 34 64 +3165 name_3165 35 65 +3166 name_3166 36 66 +3167 name_3167 37 67 +3168 name_3168 38 68 +3169 name_3169 39 69 +3170 name_3170 40 70 +3171 name_3171 41 71 +3172 name_3172 42 72 +3173 name_3173 43 73 +3174 name_3174 44 74 +3175 name_3175 45 75 +3176 name_3176 46 76 +3177 name_3177 47 77 +3178 name_3178 48 78 +3179 name_3179 49 79 +3186 name_3186 26 86 +3187 name_3187 27 87 +3188 name_3188 28 88 +3189 name_3189 29 89 +3190 name_3190 30 90 +3191 name_3191 31 91 +3192 name_3192 32 92 +3193 name_3193 33 93 +3194 name_3194 34 94 +3195 name_3195 35 95 +3196 name_3196 36 96 +3197 name_3197 37 97 +3198 name_3198 38 98 +3199 name_3199 39 99 +3200 name_3200 40 50 +3201 name_3201 41 51 +3202 name_3202 42 52 +3203 name_3203 43 53 +3204 name_3204 44 54 +3205 name_3205 45 55 +3206 name_3206 46 56 +3207 name_3207 47 57 +3208 name_3208 48 58 +3209 name_3209 49 59 +3216 name_3216 26 66 +3217 name_3217 27 67 +3218 name_3218 28 68 +3219 name_3219 29 69 +3220 name_3220 30 70 +3221 name_3221 31 71 +3222 name_3222 32 72 +3223 name_3223 33 73 +3224 name_3224 34 74 +3225 name_3225 35 75 +3226 name_3226 36 76 +3227 name_3227 37 77 +3228 name_3228 38 78 +3229 name_3229 39 79 +3230 name_3230 40 80 +3231 name_3231 41 81 +3232 name_3232 42 82 +3233 name_3233 43 83 +3234 name_3234 44 84 +3235 name_3235 45 85 +3236 name_3236 46 86 +3237 name_3237 47 87 +3238 name_3238 48 88 +3239 name_3239 49 89 +3246 name_3246 26 96 +3247 name_3247 27 97 +3248 name_3248 28 98 +3249 name_3249 29 99 +3250 name_3250 30 50 +3251 name_3251 31 51 +3252 name_3252 32 52 +3253 name_3253 33 53 +3254 name_3254 34 54 +3255 name_3255 35 55 +3256 name_3256 36 56 +3257 name_3257 37 57 +3258 name_3258 38 58 +3259 name_3259 39 59 +3260 name_3260 40 60 +3261 name_3261 41 61 +3262 name_3262 42 62 +3263 name_3263 43 63 +3264 name_3264 44 64 +3265 name_3265 45 65 +3266 name_3266 46 66 +3267 name_3267 47 67 +3268 name_3268 48 68 +3269 name_3269 49 69 +3276 name_3276 26 76 +3277 name_3277 27 77 +3278 name_3278 28 78 +3279 name_3279 29 79 +3280 name_3280 30 80 +3281 name_3281 31 81 +3282 name_3282 32 82 +3283 name_3283 33 83 +3284 name_3284 34 84 +3285 name_3285 35 85 +3286 name_3286 36 86 +3287 name_3287 37 87 +3288 name_3288 38 88 +3289 name_3289 39 89 +3290 name_3290 40 90 +3291 name_3291 41 91 +3292 name_3292 42 92 +3293 name_3293 43 93 +3294 name_3294 44 94 +3295 name_3295 45 95 +3296 name_3296 46 96 +3297 name_3297 47 97 +3298 name_3298 48 98 +3299 name_3299 49 99 +3306 name_3306 26 56 +3307 name_3307 27 57 +3308 name_3308 28 58 +3309 name_3309 29 59 +3310 name_3310 30 60 +3311 name_3311 31 61 +3312 name_3312 32 62 +3313 name_3313 33 63 +3314 name_3314 34 64 +3315 name_3315 35 65 +3316 name_3316 36 66 +3317 name_3317 37 67 +3318 name_3318 38 68 +3319 name_3319 39 69 +3320 name_3320 40 70 +3321 name_3321 41 71 +3322 name_3322 42 72 +3323 name_3323 43 73 +3324 name_3324 44 74 +3325 name_3325 45 75 +3326 name_3326 46 76 +3327 name_3327 47 77 +3328 name_3328 48 78 +3329 name_3329 49 79 +3336 name_3336 26 86 +3337 name_3337 27 87 +3338 name_3338 28 88 +3339 name_3339 29 89 +3340 name_3340 30 90 +3341 name_3341 31 91 +3342 name_3342 32 92 +3343 name_3343 33 93 +3344 name_3344 34 94 +3345 name_3345 35 95 +3346 name_3346 36 96 +3347 name_3347 37 97 +3348 name_3348 38 98 +3349 name_3349 39 99 +3350 name_3350 40 50 +3351 name_3351 41 51 +3352 name_3352 42 52 +3353 name_3353 43 53 +3354 name_3354 44 54 +3355 name_3355 45 55 +3356 name_3356 46 56 +3357 name_3357 47 57 +3358 name_3358 48 58 +3359 name_3359 49 59 +3366 name_3366 26 66 +3367 name_3367 27 67 +3368 name_3368 28 68 +3369 name_3369 29 69 +3370 name_3370 30 70 +3371 name_3371 31 71 +3372 name_3372 32 72 +3373 name_3373 33 73 +3374 name_3374 34 74 +3375 name_3375 35 75 +3376 name_3376 36 76 +3377 name_3377 37 77 +3378 name_3378 38 78 +3379 name_3379 39 79 +3380 name_3380 40 80 +3381 name_3381 41 81 +3382 name_3382 42 82 +3383 name_3383 43 83 +3384 name_3384 44 84 +3385 name_3385 45 85 +3386 name_3386 46 86 +3387 name_3387 47 87 +3388 name_3388 48 88 +3389 name_3389 49 89 +3396 name_3396 26 96 +3397 name_3397 27 97 +3398 name_3398 28 98 +3399 name_3399 29 99 +3400 name_3400 30 50 +3401 name_3401 31 51 +3402 name_3402 32 52 +3403 name_3403 33 53 +3404 name_3404 34 54 +3405 name_3405 35 55 +3406 name_3406 36 56 +3407 name_3407 37 57 +3408 name_3408 38 58 +3409 name_3409 39 59 +3410 name_3410 40 60 +3411 name_3411 41 61 +3412 name_3412 42 62 +3413 name_3413 43 63 +3414 name_3414 44 64 +3415 name_3415 45 65 +3416 name_3416 46 66 +3417 name_3417 47 67 +3418 name_3418 48 68 +3419 name_3419 49 69 +3426 name_3426 26 76 +3427 name_3427 27 77 +3428 name_3428 28 78 +3429 name_3429 29 79 +3430 name_3430 30 80 +3431 name_3431 31 81 +3432 name_3432 32 82 +3433 name_3433 33 83 +3434 name_3434 34 84 +3435 name_3435 35 85 +3436 name_3436 36 86 +3437 name_3437 37 87 +3438 name_3438 38 88 +3439 name_3439 39 89 +3440 name_3440 40 90 +3441 name_3441 41 91 +3442 name_3442 42 92 +3443 name_3443 43 93 +3444 name_3444 44 94 +3445 name_3445 45 95 +3446 name_3446 46 96 +3447 name_3447 47 97 +3448 name_3448 48 98 +3449 name_3449 49 99 +3456 name_3456 26 56 +3457 name_3457 27 57 +3458 name_3458 28 58 +3459 name_3459 29 59 +3460 name_3460 30 60 +3461 name_3461 31 61 +3462 name_3462 32 62 +3463 name_3463 33 63 +3464 name_3464 34 64 +3465 name_3465 35 65 +3466 name_3466 36 66 +3467 name_3467 37 67 +3468 name_3468 38 68 +3469 name_3469 39 69 +3470 name_3470 40 70 +3471 name_3471 41 71 +3472 name_3472 42 72 +3473 name_3473 43 73 +3474 name_3474 44 74 +3475 name_3475 45 75 +3476 name_3476 46 76 +3477 name_3477 47 77 +3478 name_3478 48 78 +3479 name_3479 49 79 +3486 name_3486 26 86 +3487 name_3487 27 87 +3488 name_3488 28 88 +3489 name_3489 29 89 +3490 name_3490 30 90 +3491 name_3491 31 91 +3492 name_3492 32 92 +3493 name_3493 33 93 +3494 name_3494 34 94 +3495 name_3495 35 95 +3496 name_3496 36 96 +3497 name_3497 37 97 +3498 name_3498 38 98 +3499 name_3499 39 99 +3500 name_3500 40 50 +3501 name_3501 41 51 +3502 name_3502 42 52 +3503 name_3503 43 53 +3504 name_3504 44 54 +3505 name_3505 45 55 +3506 name_3506 46 56 +3507 name_3507 47 57 +3508 name_3508 48 58 +3509 name_3509 49 59 +3516 name_3516 26 66 +3517 name_3517 27 67 +3518 name_3518 28 68 +3519 name_3519 29 69 +3520 name_3520 30 70 +3521 name_3521 31 71 +3522 name_3522 32 72 +3523 name_3523 33 73 +3524 name_3524 34 74 +3525 name_3525 35 75 +3526 name_3526 36 76 +3527 name_3527 37 77 +3528 name_3528 38 78 +3529 name_3529 39 79 +3530 name_3530 40 80 +3531 name_3531 41 81 +3532 name_3532 42 82 +3533 name_3533 43 83 +3534 name_3534 44 84 +3535 name_3535 45 85 +3536 name_3536 46 86 +3537 name_3537 47 87 +3538 name_3538 48 88 +3539 name_3539 49 89 +3546 name_3546 26 96 +3547 name_3547 27 97 +3548 name_3548 28 98 +3549 name_3549 29 99 +3550 name_3550 30 50 +3551 name_3551 31 51 +3552 name_3552 32 52 +3553 name_3553 33 53 +3554 name_3554 34 54 +3555 name_3555 35 55 +3556 name_3556 36 56 +3557 name_3557 37 57 +3558 name_3558 38 58 +3559 name_3559 39 59 +3560 name_3560 40 60 +3561 name_3561 41 61 +3562 name_3562 42 62 +3563 name_3563 43 63 +3564 name_3564 44 64 +3565 name_3565 45 65 +3566 name_3566 46 66 +3567 name_3567 47 67 +3568 name_3568 48 68 +3569 name_3569 49 69 +3576 name_3576 26 76 +3577 name_3577 27 77 +3578 name_3578 28 78 +3579 name_3579 29 79 +3580 name_3580 30 80 +3581 name_3581 31 81 +3582 name_3582 32 82 +3583 name_3583 33 83 +3584 name_3584 34 84 +3585 name_3585 35 85 +3586 name_3586 36 86 +3587 name_3587 37 87 +3588 name_3588 38 88 +3589 name_3589 39 89 +3590 name_3590 40 90 +3591 name_3591 41 91 +3592 name_3592 42 92 +3593 name_3593 43 93 +3594 name_3594 44 94 +3595 name_3595 45 95 +3596 name_3596 46 96 +3597 name_3597 47 97 +3598 name_3598 48 98 +3599 name_3599 49 99 +3606 name_3606 26 56 +3607 name_3607 27 57 +3608 name_3608 28 58 +3609 name_3609 29 59 +3610 name_3610 30 60 +3611 name_3611 31 61 +3612 name_3612 32 62 +3613 name_3613 33 63 +3614 name_3614 34 64 +3615 name_3615 35 65 +3616 name_3616 36 66 +3617 name_3617 37 67 +3618 name_3618 38 68 +3619 name_3619 39 69 +3620 name_3620 40 70 +3621 name_3621 41 71 +3622 name_3622 42 72 +3623 name_3623 43 73 +3624 name_3624 44 74 +3625 name_3625 45 75 +3626 name_3626 46 76 +3627 name_3627 47 77 +3628 name_3628 48 78 +3629 name_3629 49 79 +3636 name_3636 26 86 +3637 name_3637 27 87 +3638 name_3638 28 88 +3639 name_3639 29 89 +3640 name_3640 30 90 +3641 name_3641 31 91 +3642 name_3642 32 92 +3643 name_3643 33 93 +3644 name_3644 34 94 +3645 name_3645 35 95 +3646 name_3646 36 96 +3647 name_3647 37 97 +3648 name_3648 38 98 +3649 name_3649 39 99 +3650 name_3650 40 50 +3651 name_3651 41 51 +3652 name_3652 42 52 +3653 name_3653 43 53 +3654 name_3654 44 54 +3655 name_3655 45 55 +3656 name_3656 46 56 +3657 name_3657 47 57 +3658 name_3658 48 58 +3659 name_3659 49 59 +3666 name_3666 26 66 +3667 name_3667 27 67 +3668 name_3668 28 68 +3669 name_3669 29 69 +3670 name_3670 30 70 +3671 name_3671 31 71 +3672 name_3672 32 72 +3673 name_3673 33 73 +3674 name_3674 34 74 +3675 name_3675 35 75 +3676 name_3676 36 76 +3677 name_3677 37 77 +3678 name_3678 38 78 +3679 name_3679 39 79 +3680 name_3680 40 80 +3681 name_3681 41 81 +3682 name_3682 42 82 +3683 name_3683 43 83 +3684 name_3684 44 84 +3685 name_3685 45 85 +3686 name_3686 46 86 +3687 name_3687 47 87 +3688 name_3688 48 88 +3689 name_3689 49 89 +3696 name_3696 26 96 +3697 name_3697 27 97 +3698 name_3698 28 98 +3699 name_3699 29 99 +3700 name_3700 30 50 +3701 name_3701 31 51 +3702 name_3702 32 52 +3703 name_3703 33 53 +3704 name_3704 34 54 +3705 name_3705 35 55 +3706 name_3706 36 56 +3707 name_3707 37 57 +3708 name_3708 38 58 +3709 name_3709 39 59 +3710 name_3710 40 60 +3711 name_3711 41 61 +3712 name_3712 42 62 +3713 name_3713 43 63 +3714 name_3714 44 64 +3715 name_3715 45 65 +3716 name_3716 46 66 +3717 name_3717 47 67 +3718 name_3718 48 68 +3719 name_3719 49 69 +3726 name_3726 26 76 +3727 name_3727 27 77 +3728 name_3728 28 78 +3729 name_3729 29 79 +3730 name_3730 30 80 +3731 name_3731 31 81 +3732 name_3732 32 82 +3733 name_3733 33 83 +3734 name_3734 34 84 +3735 name_3735 35 85 +3736 name_3736 36 86 +3737 name_3737 37 87 +3738 name_3738 38 88 +3739 name_3739 39 89 +3740 name_3740 40 90 +3741 name_3741 41 91 +3742 name_3742 42 92 +3743 name_3743 43 93 +3744 name_3744 44 94 +3745 name_3745 45 95 +3746 name_3746 46 96 +3747 name_3747 47 97 +3748 name_3748 48 98 +3749 name_3749 49 99 +3756 name_3756 26 56 +3757 name_3757 27 57 +3758 name_3758 28 58 +3759 name_3759 29 59 +3760 name_3760 30 60 +3761 name_3761 31 61 +3762 name_3762 32 62 +3763 name_3763 33 63 +3764 name_3764 34 64 +3765 name_3765 35 65 +3766 name_3766 36 66 +3767 name_3767 37 67 +3768 name_3768 38 68 +3769 name_3769 39 69 +3770 name_3770 40 70 +3771 name_3771 41 71 +3772 name_3772 42 72 +3773 name_3773 43 73 +3774 name_3774 44 74 +3775 name_3775 45 75 +3776 name_3776 46 76 +3777 name_3777 47 77 +3778 name_3778 48 78 +3779 name_3779 49 79 +3786 name_3786 26 86 +3787 name_3787 27 87 +3788 name_3788 28 88 +3789 name_3789 29 89 +3790 name_3790 30 90 +3791 name_3791 31 91 +3792 name_3792 32 92 +3793 name_3793 33 93 +3794 name_3794 34 94 +3795 name_3795 35 95 +3796 name_3796 36 96 +3797 name_3797 37 97 +3798 name_3798 38 98 +3799 name_3799 39 99 +3800 name_3800 40 50 +3801 name_3801 41 51 +3802 name_3802 42 52 +3803 name_3803 43 53 +3804 name_3804 44 54 +3805 name_3805 45 55 +3806 name_3806 46 56 +3807 name_3807 47 57 +3808 name_3808 48 58 +3809 name_3809 49 59 +3816 name_3816 26 66 +3817 name_3817 27 67 +3818 name_3818 28 68 +3819 name_3819 29 69 +3820 name_3820 30 70 +3821 name_3821 31 71 +3822 name_3822 32 72 +3823 name_3823 33 73 +3824 name_3824 34 74 +3825 name_3825 35 75 +3826 name_3826 36 76 +3827 name_3827 37 77 +3828 name_3828 38 78 +3829 name_3829 39 79 +3830 name_3830 40 80 +3831 name_3831 41 81 +3832 name_3832 42 82 +3833 name_3833 43 83 +3834 name_3834 44 84 +3835 name_3835 45 85 +3836 name_3836 46 86 +3837 name_3837 47 87 +3838 name_3838 48 88 +3839 name_3839 49 89 +3846 name_3846 26 96 +3847 name_3847 27 97 +3848 name_3848 28 98 +3849 name_3849 29 99 +3850 name_3850 30 50 +3851 name_3851 31 51 +3852 name_3852 32 52 +3853 name_3853 33 53 +3854 name_3854 34 54 +3855 name_3855 35 55 +3856 name_3856 36 56 +3857 name_3857 37 57 +3858 name_3858 38 58 +3859 name_3859 39 59 +3860 name_3860 40 60 +3861 name_3861 41 61 +3862 name_3862 42 62 +3863 name_3863 43 63 +3864 name_3864 44 64 +3865 name_3865 45 65 +3866 name_3866 46 66 +3867 name_3867 47 67 +3868 name_3868 48 68 +3869 name_3869 49 69 +3876 name_3876 26 76 +3877 name_3877 27 77 +3878 name_3878 28 78 +3879 name_3879 29 79 +3880 name_3880 30 80 +3881 name_3881 31 81 +3882 name_3882 32 82 +3883 name_3883 33 83 +3884 name_3884 34 84 +3885 name_3885 35 85 +3886 name_3886 36 86 +3887 name_3887 37 87 +3888 name_3888 38 88 +3889 name_3889 39 89 +3890 name_3890 40 90 +3891 name_3891 41 91 +3892 name_3892 42 92 +3893 name_3893 43 93 +3894 name_3894 44 94 +3895 name_3895 45 95 +3896 name_3896 46 96 +3897 name_3897 47 97 +3898 name_3898 48 98 +3899 name_3899 49 99 +3906 name_3906 26 56 +3907 name_3907 27 57 +3908 name_3908 28 58 +3909 name_3909 29 59 +3910 name_3910 30 60 +3911 name_3911 31 61 +3912 name_3912 32 62 +3913 name_3913 33 63 +3914 name_3914 34 64 +3915 name_3915 35 65 +3916 name_3916 36 66 +3917 name_3917 37 67 +3918 name_3918 38 68 +3919 name_3919 39 69 +3920 name_3920 40 70 +3921 name_3921 41 71 +3922 name_3922 42 72 +3923 name_3923 43 73 +3924 name_3924 44 74 +3925 name_3925 45 75 +3926 name_3926 46 76 +3927 name_3927 47 77 +3928 name_3928 48 78 +3929 name_3929 49 79 +3936 name_3936 26 86 +3937 name_3937 27 87 +3938 name_3938 28 88 +3939 name_3939 29 89 +3940 name_3940 30 90 +3941 name_3941 31 91 +3942 name_3942 32 92 +3943 name_3943 33 93 +3944 name_3944 34 94 +3945 name_3945 35 95 +3946 name_3946 36 96 +3947 name_3947 37 97 +3948 name_3948 38 98 +3949 name_3949 39 99 +3950 name_3950 40 50 +3951 name_3951 41 51 +3952 name_3952 42 52 +3953 name_3953 43 53 +3954 name_3954 44 54 +3955 name_3955 45 55 +3956 name_3956 46 56 +3957 name_3957 47 57 +3958 name_3958 48 58 +3959 name_3959 49 59 +3966 name_3966 26 66 +3967 name_3967 27 67 +3968 name_3968 28 68 +3969 name_3969 29 69 +3970 name_3970 30 70 +3971 name_3971 31 71 +3972 name_3972 32 72 +3973 name_3973 33 73 +3974 name_3974 34 74 +3975 name_3975 35 75 +3976 name_3976 36 76 +3977 name_3977 37 77 +3978 name_3978 38 78 +3979 name_3979 39 79 +3980 name_3980 40 80 +3981 name_3981 41 81 +3982 name_3982 42 82 +3983 name_3983 43 83 +3984 name_3984 44 84 +3985 name_3985 45 85 +3986 name_3986 46 86 +3987 name_3987 47 87 +3988 name_3988 48 88 +3989 name_3989 49 89 +3996 name_3996 26 96 +3997 name_3997 27 97 +3998 name_3998 28 98 +3999 name_3999 29 99 +4000 name_4000 30 50 +4001 name_4001 31 51 +4002 name_4002 32 52 +4003 name_4003 33 53 +4004 name_4004 34 54 +4005 name_4005 35 55 +4006 name_4006 36 56 +4007 name_4007 37 57 +4008 name_4008 38 58 +4009 name_4009 39 59 +4010 name_4010 40 60 +4011 name_4011 41 61 +4012 name_4012 42 62 +4013 name_4013 43 63 +4014 name_4014 44 64 +4015 name_4015 45 65 +4016 name_4016 46 66 +4017 name_4017 47 67 +4018 name_4018 48 68 +4019 name_4019 49 69 +4026 name_4026 26 76 +4027 name_4027 27 77 +4028 name_4028 28 78 +4029 name_4029 29 79 +4030 name_4030 30 80 +4031 name_4031 31 81 +4032 name_4032 32 82 +4033 name_4033 33 83 +4034 name_4034 34 84 +4035 name_4035 35 85 +4036 name_4036 36 86 +4037 name_4037 37 87 +4038 name_4038 38 88 +4039 name_4039 39 89 +4040 name_4040 40 90 +4041 name_4041 41 91 +4042 name_4042 42 92 +4043 name_4043 43 93 +4044 name_4044 44 94 +4045 name_4045 45 95 +4046 name_4046 46 96 +4047 name_4047 47 97 +4048 name_4048 48 98 +4049 name_4049 49 99 +4056 name_4056 26 56 +4057 name_4057 27 57 +4058 name_4058 28 58 +4059 name_4059 29 59 +4060 name_4060 30 60 +4061 name_4061 31 61 +4062 name_4062 32 62 +4063 name_4063 33 63 +4064 name_4064 34 64 +4065 name_4065 35 65 +4066 name_4066 36 66 +4067 name_4067 37 67 +4068 name_4068 38 68 +4069 name_4069 39 69 +4070 name_4070 40 70 +4071 name_4071 41 71 +4072 name_4072 42 72 +4073 name_4073 43 73 +4074 name_4074 44 74 +4075 name_4075 45 75 +4076 name_4076 46 76 +4077 name_4077 47 77 +4078 name_4078 48 78 +4079 name_4079 49 79 +4086 name_4086 26 86 +4087 name_4087 27 87 +4088 name_4088 28 88 +4089 name_4089 29 89 +4090 name_4090 30 90 +4091 name_4091 31 91 +4092 name_4092 32 92 +4093 name_4093 33 93 +4094 name_4094 34 94 +4095 name_4095 35 95 +4096 name_4096 36 96 +4097 name_4097 37 97 +4098 name_4098 38 98 +4099 name_4099 39 99 +4100 name_4100 40 50 +4101 name_4101 41 51 +4102 name_4102 42 52 +4103 name_4103 43 53 +4104 name_4104 44 54 +4105 name_4105 45 55 +4106 name_4106 46 56 +4107 name_4107 47 57 +4108 name_4108 48 58 +4109 name_4109 49 59 +4116 name_4116 26 66 +4117 name_4117 27 67 +4118 name_4118 28 68 +4119 name_4119 29 69 +4120 name_4120 30 70 +4121 name_4121 31 71 +4122 name_4122 32 72 +4123 name_4123 33 73 +4124 name_4124 34 74 +4125 name_4125 35 75 +4126 name_4126 36 76 +4127 name_4127 37 77 +4128 name_4128 38 78 +4129 name_4129 39 79 +4130 name_4130 40 80 +4131 name_4131 41 81 +4132 name_4132 42 82 +4133 name_4133 43 83 +4134 name_4134 44 84 +4135 name_4135 45 85 +4136 name_4136 46 86 +4137 name_4137 47 87 +4138 name_4138 48 88 +4139 name_4139 49 89 +4146 name_4146 26 96 +4147 name_4147 27 97 +4148 name_4148 28 98 +4149 name_4149 29 99 +4150 name_4150 30 50 +4151 name_4151 31 51 +4152 name_4152 32 52 +4153 name_4153 33 53 +4154 name_4154 34 54 +4155 name_4155 35 55 +4156 name_4156 36 56 +4157 name_4157 37 57 +4158 name_4158 38 58 +4159 name_4159 39 59 +4160 name_4160 40 60 +4161 name_4161 41 61 +4162 name_4162 42 62 +4163 name_4163 43 63 +4164 name_4164 44 64 +4165 name_4165 45 65 +4166 name_4166 46 66 +4167 name_4167 47 67 +4168 name_4168 48 68 +4169 name_4169 49 69 +4176 name_4176 26 76 +4177 name_4177 27 77 +4178 name_4178 28 78 +4179 name_4179 29 79 +4180 name_4180 30 80 +4181 name_4181 31 81 +4182 name_4182 32 82 +4183 name_4183 33 83 +4184 name_4184 34 84 +4185 name_4185 35 85 +4186 name_4186 36 86 +4187 name_4187 37 87 +4188 name_4188 38 88 +4189 name_4189 39 89 +4190 name_4190 40 90 +4191 name_4191 41 91 +4192 name_4192 42 92 +4193 name_4193 43 93 +4194 name_4194 44 94 +4195 name_4195 45 95 +4196 name_4196 46 96 +4197 name_4197 47 97 +4198 name_4198 48 98 +4199 name_4199 49 99 +4206 name_4206 26 56 +4207 name_4207 27 57 +4208 name_4208 28 58 +4209 name_4209 29 59 +4210 name_4210 30 60 +4211 name_4211 31 61 +4212 name_4212 32 62 +4213 name_4213 33 63 +4214 name_4214 34 64 +4215 name_4215 35 65 +4216 name_4216 36 66 +4217 name_4217 37 67 +4218 name_4218 38 68 +4219 name_4219 39 69 +4220 name_4220 40 70 +4221 name_4221 41 71 +4222 name_4222 42 72 +4223 name_4223 43 73 +4224 name_4224 44 74 +4225 name_4225 45 75 +4226 name_4226 46 76 +4227 name_4227 47 77 +4228 name_4228 48 78 +4229 name_4229 49 79 +4236 name_4236 26 86 +4237 name_4237 27 87 +4238 name_4238 28 88 +4239 name_4239 29 89 +4240 name_4240 30 90 +4241 name_4241 31 91 +4242 name_4242 32 92 +4243 name_4243 33 93 +4244 name_4244 34 94 +4245 name_4245 35 95 +4246 name_4246 36 96 +4247 name_4247 37 97 +4248 name_4248 38 98 +4249 name_4249 39 99 +4250 name_4250 40 50 +4251 name_4251 41 51 +4252 name_4252 42 52 +4253 name_4253 43 53 +4254 name_4254 44 54 +4255 name_4255 45 55 +4256 name_4256 46 56 +4257 name_4257 47 57 +4258 name_4258 48 58 +4259 name_4259 49 59 +4266 name_4266 26 66 +4267 name_4267 27 67 +4268 name_4268 28 68 +4269 name_4269 29 69 +4270 name_4270 30 70 +4271 name_4271 31 71 +4272 name_4272 32 72 +4273 name_4273 33 73 +4274 name_4274 34 74 +4275 name_4275 35 75 +4276 name_4276 36 76 +4277 name_4277 37 77 +4278 name_4278 38 78 +4279 name_4279 39 79 +4280 name_4280 40 80 +4281 name_4281 41 81 +4282 name_4282 42 82 +4283 name_4283 43 83 +4284 name_4284 44 84 +4285 name_4285 45 85 +4286 name_4286 46 86 +4287 name_4287 47 87 +4288 name_4288 48 88 +4289 name_4289 49 89 +4296 name_4296 26 96 +4297 name_4297 27 97 +4298 name_4298 28 98 +4299 name_4299 29 99 +4300 name_4300 30 50 +4301 name_4301 31 51 +4302 name_4302 32 52 +4303 name_4303 33 53 +4304 name_4304 34 54 +4305 name_4305 35 55 +4306 name_4306 36 56 +4307 name_4307 37 57 +4308 name_4308 38 58 +4309 name_4309 39 59 +4310 name_4310 40 60 +4311 name_4311 41 61 +4312 name_4312 42 62 +4313 name_4313 43 63 +4314 name_4314 44 64 +4315 name_4315 45 65 +4316 name_4316 46 66 +4317 name_4317 47 67 +4318 name_4318 48 68 +4319 name_4319 49 69 +4326 name_4326 26 76 +4327 name_4327 27 77 +4328 name_4328 28 78 +4329 name_4329 29 79 +4330 name_4330 30 80 +4331 name_4331 31 81 +4332 name_4332 32 82 +4333 name_4333 33 83 +4334 name_4334 34 84 +4335 name_4335 35 85 +4336 name_4336 36 86 +4337 name_4337 37 87 +4338 name_4338 38 88 +4339 name_4339 39 89 +4340 name_4340 40 90 +4341 name_4341 41 91 +4342 name_4342 42 92 +4343 name_4343 43 93 +4344 name_4344 44 94 +4345 name_4345 45 95 +4346 name_4346 46 96 +4347 name_4347 47 97 +4348 name_4348 48 98 +4349 name_4349 49 99 +4356 name_4356 26 56 +4357 name_4357 27 57 +4358 name_4358 28 58 +4359 name_4359 29 59 +4360 name_4360 30 60 +4361 name_4361 31 61 +4362 name_4362 32 62 +4363 name_4363 33 63 +4364 name_4364 34 64 +4365 name_4365 35 65 +4366 name_4366 36 66 +4367 name_4367 37 67 +4368 name_4368 38 68 +4369 name_4369 39 69 +4370 name_4370 40 70 +4371 name_4371 41 71 +4372 name_4372 42 72 +4373 name_4373 43 73 +4374 name_4374 44 74 +4375 name_4375 45 75 +4376 name_4376 46 76 +4377 name_4377 47 77 +4378 name_4378 48 78 +4379 name_4379 49 79 +4386 name_4386 26 86 +4387 name_4387 27 87 +4388 name_4388 28 88 +4389 name_4389 29 89 +4390 name_4390 30 90 +4391 name_4391 31 91 +4392 name_4392 32 92 +4393 name_4393 33 93 +4394 name_4394 34 94 +4395 name_4395 35 95 +4396 name_4396 36 96 +4397 name_4397 37 97 +4398 name_4398 38 98 +4399 name_4399 39 99 +4400 name_4400 40 50 +4401 name_4401 41 51 +4402 name_4402 42 52 +4403 name_4403 43 53 +4404 name_4404 44 54 +4405 name_4405 45 55 +4406 name_4406 46 56 +4407 name_4407 47 57 +4408 name_4408 48 58 +4409 name_4409 49 59 +4416 name_4416 26 66 +4417 name_4417 27 67 +4418 name_4418 28 68 +4419 name_4419 29 69 +4420 name_4420 30 70 +4421 name_4421 31 71 +4422 name_4422 32 72 +4423 name_4423 33 73 +4424 name_4424 34 74 +4425 name_4425 35 75 +4426 name_4426 36 76 +4427 name_4427 37 77 +4428 name_4428 38 78 +4429 name_4429 39 79 +4430 name_4430 40 80 +4431 name_4431 41 81 +4432 name_4432 42 82 +4433 name_4433 43 83 +4434 name_4434 44 84 +4435 name_4435 45 85 +4436 name_4436 46 86 +4437 name_4437 47 87 +4438 name_4438 48 88 +4439 name_4439 49 89 +4446 name_4446 26 96 +4447 name_4447 27 97 +4448 name_4448 28 98 +4449 name_4449 29 99 +4450 name_4450 30 50 +4451 name_4451 31 51 +4452 name_4452 32 52 +4453 name_4453 33 53 +4454 name_4454 34 54 +4455 name_4455 35 55 +4456 name_4456 36 56 +4457 name_4457 37 57 +4458 name_4458 38 58 +4459 name_4459 39 59 +4460 name_4460 40 60 +4461 name_4461 41 61 +4462 name_4462 42 62 +4463 name_4463 43 63 +4464 name_4464 44 64 +4465 name_4465 45 65 +4466 name_4466 46 66 +4467 name_4467 47 67 +4468 name_4468 48 68 +4469 name_4469 49 69 +4476 name_4476 26 76 +4477 name_4477 27 77 +4478 name_4478 28 78 +4479 name_4479 29 79 +4480 name_4480 30 80 +4481 name_4481 31 81 +4482 name_4482 32 82 +4483 name_4483 33 83 +4484 name_4484 34 84 +4485 name_4485 35 85 +4486 name_4486 36 86 +4487 name_4487 37 87 +4488 name_4488 38 88 +4489 name_4489 39 89 +4490 name_4490 40 90 +4491 name_4491 41 91 +4492 name_4492 42 92 +4493 name_4493 43 93 +4494 name_4494 44 94 +4495 name_4495 45 95 +4496 name_4496 46 96 +4497 name_4497 47 97 +4498 name_4498 48 98 +4499 name_4499 49 99 +4506 name_4506 26 56 +4507 name_4507 27 57 +4508 name_4508 28 58 +4509 name_4509 29 59 +4510 name_4510 30 60 +4511 name_4511 31 61 +4512 name_4512 32 62 +4513 name_4513 33 63 +4514 name_4514 34 64 +4515 name_4515 35 65 +4516 name_4516 36 66 +4517 name_4517 37 67 +4518 name_4518 38 68 +4519 name_4519 39 69 +4520 name_4520 40 70 +4521 name_4521 41 71 +4522 name_4522 42 72 +4523 name_4523 43 73 +4524 name_4524 44 74 +4525 name_4525 45 75 +4526 name_4526 46 76 +4527 name_4527 47 77 +4528 name_4528 48 78 +4529 name_4529 49 79 +4536 name_4536 26 86 +4537 name_4537 27 87 +4538 name_4538 28 88 +4539 name_4539 29 89 +4540 name_4540 30 90 +4541 name_4541 31 91 +4542 name_4542 32 92 +4543 name_4543 33 93 +4544 name_4544 34 94 +4545 name_4545 35 95 +4546 name_4546 36 96 +4547 name_4547 37 97 +4548 name_4548 38 98 +4549 name_4549 39 99 +4550 name_4550 40 50 +4551 name_4551 41 51 +4552 name_4552 42 52 +4553 name_4553 43 53 +4554 name_4554 44 54 +4555 name_4555 45 55 +4556 name_4556 46 56 +4557 name_4557 47 57 +4558 name_4558 48 58 +4559 name_4559 49 59 +4566 name_4566 26 66 +4567 name_4567 27 67 +4568 name_4568 28 68 +4569 name_4569 29 69 +4570 name_4570 30 70 +4571 name_4571 31 71 +4572 name_4572 32 72 +4573 name_4573 33 73 +4574 name_4574 34 74 +4575 name_4575 35 75 +4576 name_4576 36 76 +4577 name_4577 37 77 +4578 name_4578 38 78 +4579 name_4579 39 79 +4580 name_4580 40 80 +4581 name_4581 41 81 +4582 name_4582 42 82 +4583 name_4583 43 83 +4584 name_4584 44 84 +4585 name_4585 45 85 +4586 name_4586 46 86 +4587 name_4587 47 87 +4588 name_4588 48 88 +4589 name_4589 49 89 +4596 name_4596 26 96 +4597 name_4597 27 97 +4598 name_4598 28 98 +4599 name_4599 29 99 +4600 name_4600 30 50 +4601 name_4601 31 51 +4602 name_4602 32 52 +4603 name_4603 33 53 +4604 name_4604 34 54 +4605 name_4605 35 55 +4606 name_4606 36 56 +4607 name_4607 37 57 +4608 name_4608 38 58 +4609 name_4609 39 59 +4610 name_4610 40 60 +4611 name_4611 41 61 +4612 name_4612 42 62 +4613 name_4613 43 63 +4614 name_4614 44 64 +4615 name_4615 45 65 +4616 name_4616 46 66 +4617 name_4617 47 67 +4618 name_4618 48 68 +4619 name_4619 49 69 +4626 name_4626 26 76 +4627 name_4627 27 77 +4628 name_4628 28 78 +4629 name_4629 29 79 +4630 name_4630 30 80 +4631 name_4631 31 81 +4632 name_4632 32 82 +4633 name_4633 33 83 +4634 name_4634 34 84 +4635 name_4635 35 85 +4636 name_4636 36 86 +4637 name_4637 37 87 +4638 name_4638 38 88 +4639 name_4639 39 89 +4640 name_4640 40 90 +4641 name_4641 41 91 +4642 name_4642 42 92 +4643 name_4643 43 93 +4644 name_4644 44 94 +4645 name_4645 45 95 +4646 name_4646 46 96 +4647 name_4647 47 97 +4648 name_4648 48 98 +4649 name_4649 49 99 +4656 name_4656 26 56 +4657 name_4657 27 57 +4658 name_4658 28 58 +4659 name_4659 29 59 +4660 name_4660 30 60 +4661 name_4661 31 61 +4662 name_4662 32 62 +4663 name_4663 33 63 +4664 name_4664 34 64 +4665 name_4665 35 65 +4666 name_4666 36 66 +4667 name_4667 37 67 +4668 name_4668 38 68 +4669 name_4669 39 69 +4670 name_4670 40 70 +4671 name_4671 41 71 +4672 name_4672 42 72 +4673 name_4673 43 73 +4674 name_4674 44 74 +4675 name_4675 45 75 +4676 name_4676 46 76 +4677 name_4677 47 77 +4678 name_4678 48 78 +4679 name_4679 49 79 +4686 name_4686 26 86 +4687 name_4687 27 87 +4688 name_4688 28 88 +4689 name_4689 29 89 +4690 name_4690 30 90 +4691 name_4691 31 91 +4692 name_4692 32 92 +4693 name_4693 33 93 +4694 name_4694 34 94 +4695 name_4695 35 95 +4696 name_4696 36 96 +4697 name_4697 37 97 +4698 name_4698 38 98 +4699 name_4699 39 99 +4700 name_4700 40 50 +4701 name_4701 41 51 +4702 name_4702 42 52 +4703 name_4703 43 53 +4704 name_4704 44 54 +4705 name_4705 45 55 +4706 name_4706 46 56 +4707 name_4707 47 57 +4708 name_4708 48 58 +4709 name_4709 49 59 +4716 name_4716 26 66 +4717 name_4717 27 67 +4718 name_4718 28 68 +4719 name_4719 29 69 +4720 name_4720 30 70 +4721 name_4721 31 71 +4722 name_4722 32 72 +4723 name_4723 33 73 +4724 name_4724 34 74 +4725 name_4725 35 75 +4726 name_4726 36 76 +4727 name_4727 37 77 +4728 name_4728 38 78 +4729 name_4729 39 79 +4730 name_4730 40 80 +4731 name_4731 41 81 +4732 name_4732 42 82 +4733 name_4733 43 83 +4734 name_4734 44 84 +4735 name_4735 45 85 +4736 name_4736 46 86 +4737 name_4737 47 87 +4738 name_4738 48 88 +4739 name_4739 49 89 +4746 name_4746 26 96 +4747 name_4747 27 97 +4748 name_4748 28 98 +4749 name_4749 29 99 +4750 name_4750 30 50 +4751 name_4751 31 51 +4752 name_4752 32 52 +4753 name_4753 33 53 +4754 name_4754 34 54 +4755 name_4755 35 55 +4756 name_4756 36 56 +4757 name_4757 37 57 +4758 name_4758 38 58 +4759 name_4759 39 59 +4760 name_4760 40 60 +4761 name_4761 41 61 +4762 name_4762 42 62 +4763 name_4763 43 63 +4764 name_4764 44 64 +4765 name_4765 45 65 +4766 name_4766 46 66 +4767 name_4767 47 67 +4768 name_4768 48 68 +4769 name_4769 49 69 +4776 name_4776 26 76 +4777 name_4777 27 77 +4778 name_4778 28 78 +4779 name_4779 29 79 +4780 name_4780 30 80 +4781 name_4781 31 81 +4782 name_4782 32 82 +4783 name_4783 33 83 +4784 name_4784 34 84 +4785 name_4785 35 85 +4786 name_4786 36 86 +4787 name_4787 37 87 +4788 name_4788 38 88 +4789 name_4789 39 89 +4790 name_4790 40 90 +4791 name_4791 41 91 +4792 name_4792 42 92 +4793 name_4793 43 93 +4794 name_4794 44 94 +4795 name_4795 45 95 +4796 name_4796 46 96 +4797 name_4797 47 97 +4798 name_4798 48 98 +4799 name_4799 49 99 +4806 name_4806 26 56 +4807 name_4807 27 57 +4808 name_4808 28 58 +4809 name_4809 29 59 +4810 name_4810 30 60 +4811 name_4811 31 61 +4812 name_4812 32 62 +4813 name_4813 33 63 +4814 name_4814 34 64 +4815 name_4815 35 65 +4816 name_4816 36 66 +4817 name_4817 37 67 +4818 name_4818 38 68 +4819 name_4819 39 69 +4820 name_4820 40 70 +4821 name_4821 41 71 +4822 name_4822 42 72 +4823 name_4823 43 73 +4824 name_4824 44 74 +4825 name_4825 45 75 +4826 name_4826 46 76 +4827 name_4827 47 77 +4828 name_4828 48 78 +4829 name_4829 49 79 +4836 name_4836 26 86 +4837 name_4837 27 87 +4838 name_4838 28 88 +4839 name_4839 29 89 +4840 name_4840 30 90 +4841 name_4841 31 91 +4842 name_4842 32 92 +4843 name_4843 33 93 +4844 name_4844 34 94 +4845 name_4845 35 95 +4846 name_4846 36 96 +4847 name_4847 37 97 +4848 name_4848 38 98 +4849 name_4849 39 99 +4850 name_4850 40 50 +4851 name_4851 41 51 +4852 name_4852 42 52 +4853 name_4853 43 53 +4854 name_4854 44 54 +4855 name_4855 45 55 +4856 name_4856 46 56 +4857 name_4857 47 57 +4858 name_4858 48 58 +4859 name_4859 49 59 +4866 name_4866 26 66 +4867 name_4867 27 67 +4868 name_4868 28 68 +4869 name_4869 29 69 +4870 name_4870 30 70 +4871 name_4871 31 71 +4872 name_4872 32 72 +4873 name_4873 33 73 +4874 name_4874 34 74 +4875 name_4875 35 75 +4876 name_4876 36 76 +4877 name_4877 37 77 +4878 name_4878 38 78 +4879 name_4879 39 79 +4880 name_4880 40 80 +4881 name_4881 41 81 +4882 name_4882 42 82 +4883 name_4883 43 83 +4884 name_4884 44 84 +4885 name_4885 45 85 +4886 name_4886 46 86 +4887 name_4887 47 87 +4888 name_4888 48 88 +4889 name_4889 49 89 +4896 name_4896 26 96 +4897 name_4897 27 97 +4898 name_4898 28 98 +4899 name_4899 29 99 +4900 name_4900 30 50 +4901 name_4901 31 51 +4902 name_4902 32 52 +4903 name_4903 33 53 +4904 name_4904 34 54 +4905 name_4905 35 55 +4906 name_4906 36 56 +4907 name_4907 37 57 +4908 name_4908 38 58 +4909 name_4909 39 59 +4910 name_4910 40 60 +4911 name_4911 41 61 +4912 name_4912 42 62 +4913 name_4913 43 63 +4914 name_4914 44 64 +4915 name_4915 45 65 +4916 name_4916 46 66 +4917 name_4917 47 67 +4918 name_4918 48 68 +4919 name_4919 49 69 +4926 name_4926 26 76 +4927 name_4927 27 77 +4928 name_4928 28 78 +4929 name_4929 29 79 +4930 name_4930 30 80 +4931 name_4931 31 81 +4932 name_4932 32 82 +4933 name_4933 33 83 +4934 name_4934 34 84 +4935 name_4935 35 85 +4936 name_4936 36 86 +4937 name_4937 37 87 +4938 name_4938 38 88 +4939 name_4939 39 89 +4940 name_4940 40 90 +4941 name_4941 41 91 +4942 name_4942 42 92 +4943 name_4943 43 93 +4944 name_4944 44 94 +4945 name_4945 45 95 +4946 name_4946 46 96 +4947 name_4947 47 97 +4948 name_4948 48 98 +4949 name_4949 49 99 +4956 name_4956 26 56 +4957 name_4957 27 57 +4958 name_4958 28 58 +4959 name_4959 29 59 +4960 name_4960 30 60 +4961 name_4961 31 61 +4962 name_4962 32 62 +4963 name_4963 33 63 +4964 name_4964 34 64 +4965 name_4965 35 65 +4966 name_4966 36 66 +4967 name_4967 37 67 +4968 name_4968 38 68 +4969 name_4969 39 69 +4970 name_4970 40 70 +4971 name_4971 41 71 +4972 name_4972 42 72 +4973 name_4973 43 73 +4974 name_4974 44 74 +4975 name_4975 45 75 +4976 name_4976 46 76 +4977 name_4977 47 77 +4978 name_4978 48 78 +4979 name_4979 49 79 +4986 name_4986 26 86 +4987 name_4987 27 87 +4988 name_4988 28 88 +4989 name_4989 29 89 +4990 name_4990 30 90 +4991 name_4991 31 91 +4992 name_4992 32 92 +4993 name_4993 33 93 +4994 name_4994 34 94 +4995 name_4995 35 95 +4996 name_4996 36 96 +4997 name_4997 37 97 +4998 name_4998 38 98 +4999 name_4999 39 99 + +-- !condition_cache_limit3 -- +6 name_6 26 56 +7 name_7 27 57 +8 name_8 28 58 +9 name_9 29 59 +10 name_10 30 60 +11 name_11 31 61 +12 name_12 32 62 +13 name_13 33 63 +14 name_14 34 64 +15 name_15 35 65 +16 name_16 36 66 +17 name_17 37 67 +18 name_18 38 68 +19 name_19 39 69 +20 name_20 40 70 +21 name_21 41 71 +22 name_22 42 72 +23 name_23 43 73 +24 name_24 44 74 +25 name_25 45 75 +26 name_26 46 76 +27 name_27 47 77 +28 name_28 48 78 +29 name_29 49 79 +36 name_36 26 86 +37 name_37 27 87 +38 name_38 28 88 +39 name_39 29 89 +40 name_40 30 90 +41 name_41 31 91 +42 name_42 32 92 +43 name_43 33 93 +44 name_44 34 94 +45 name_45 35 95 +46 name_46 36 96 +47 name_47 37 97 +48 name_48 38 98 +49 name_49 39 99 +50 name_50 40 50 +51 name_51 41 51 +52 name_52 42 52 +53 name_53 43 53 +54 name_54 44 54 +55 name_55 45 55 +56 name_56 46 56 +57 name_57 47 57 +58 name_58 48 58 +59 name_59 49 59 +66 name_66 26 66 +67 name_67 27 67 +68 name_68 28 68 +69 name_69 29 69 +70 name_70 30 70 +71 name_71 31 71 +72 name_72 32 72 +73 name_73 33 73 +74 name_74 34 74 +75 name_75 35 75 +76 name_76 36 76 +77 name_77 37 77 +78 name_78 38 78 +79 name_79 39 79 +80 name_80 40 80 +81 name_81 41 81 +82 name_82 42 82 +83 name_83 43 83 +84 name_84 44 84 +85 name_85 45 85 +86 name_86 46 86 +87 name_87 47 87 +88 name_88 48 88 +89 name_89 49 89 +96 name_96 26 96 +97 name_97 27 97 +98 name_98 28 98 +99 name_99 29 99 +100 name_100 30 50 +101 name_101 31 51 +102 name_102 32 52 +103 name_103 33 53 +104 name_104 34 54 +105 name_105 35 55 +106 name_106 36 56 +107 name_107 37 57 +108 name_108 38 58 +109 name_109 39 59 +110 name_110 40 60 +111 name_111 41 61 +112 name_112 42 62 +113 name_113 43 63 +114 name_114 44 64 +115 name_115 45 65 +116 name_116 46 66 +117 name_117 47 67 +118 name_118 48 68 +119 name_119 49 69 +126 name_126 26 76 +127 name_127 27 77 +128 name_128 28 78 +129 name_129 29 79 +130 name_130 30 80 +131 name_131 31 81 +132 name_132 32 82 +133 name_133 33 83 +134 name_134 34 84 +135 name_135 35 85 +136 name_136 36 86 +137 name_137 37 87 +138 name_138 38 88 +139 name_139 39 89 +140 name_140 40 90 +141 name_141 41 91 +142 name_142 42 92 +143 name_143 43 93 +144 name_144 44 94 +145 name_145 45 95 +146 name_146 46 96 +147 name_147 47 97 +148 name_148 48 98 +149 name_149 49 99 +156 name_156 26 56 +157 name_157 27 57 +158 name_158 28 58 +159 name_159 29 59 +160 name_160 30 60 +161 name_161 31 61 +162 name_162 32 62 +163 name_163 33 63 +164 name_164 34 64 +165 name_165 35 65 +166 name_166 36 66 +167 name_167 37 67 +168 name_168 38 68 +169 name_169 39 69 +170 name_170 40 70 +171 name_171 41 71 +172 name_172 42 72 +173 name_173 43 73 +174 name_174 44 74 +175 name_175 45 75 +176 name_176 46 76 +177 name_177 47 77 +178 name_178 48 78 +179 name_179 49 79 +186 name_186 26 86 +187 name_187 27 87 +188 name_188 28 88 +189 name_189 29 89 +190 name_190 30 90 +191 name_191 31 91 +192 name_192 32 92 +193 name_193 33 93 +194 name_194 34 94 +195 name_195 35 95 +196 name_196 36 96 +197 name_197 37 97 +198 name_198 38 98 +199 name_199 39 99 +200 name_200 40 50 +201 name_201 41 51 +202 name_202 42 52 +203 name_203 43 53 +204 name_204 44 54 +205 name_205 45 55 +206 name_206 46 56 +207 name_207 47 57 +208 name_208 48 58 +209 name_209 49 59 +216 name_216 26 66 +217 name_217 27 67 +218 name_218 28 68 +219 name_219 29 69 +220 name_220 30 70 +221 name_221 31 71 +222 name_222 32 72 +223 name_223 33 73 +224 name_224 34 74 +225 name_225 35 75 +226 name_226 36 76 +227 name_227 37 77 +228 name_228 38 78 +229 name_229 39 79 +230 name_230 40 80 +231 name_231 41 81 +232 name_232 42 82 +233 name_233 43 83 +234 name_234 44 84 +235 name_235 45 85 +236 name_236 46 86 +237 name_237 47 87 +238 name_238 48 88 +239 name_239 49 89 +246 name_246 26 96 +247 name_247 27 97 +248 name_248 28 98 +249 name_249 29 99 +250 name_250 30 50 +251 name_251 31 51 +252 name_252 32 52 +253 name_253 33 53 +254 name_254 34 54 +255 name_255 35 55 +256 name_256 36 56 +257 name_257 37 57 +258 name_258 38 58 +259 name_259 39 59 +260 name_260 40 60 +261 name_261 41 61 +262 name_262 42 62 +263 name_263 43 63 +264 name_264 44 64 +265 name_265 45 65 +266 name_266 46 66 +267 name_267 47 67 +268 name_268 48 68 +269 name_269 49 69 +276 name_276 26 76 +277 name_277 27 77 +278 name_278 28 78 +279 name_279 29 79 +280 name_280 30 80 +281 name_281 31 81 +282 name_282 32 82 +283 name_283 33 83 +284 name_284 34 84 +285 name_285 35 85 +286 name_286 36 86 +287 name_287 37 87 +288 name_288 38 88 +289 name_289 39 89 +290 name_290 40 90 +291 name_291 41 91 +292 name_292 42 92 +293 name_293 43 93 +294 name_294 44 94 +295 name_295 45 95 +296 name_296 46 96 +297 name_297 47 97 +298 name_298 48 98 +299 name_299 49 99 +306 name_306 26 56 +307 name_307 27 57 +308 name_308 28 58 +309 name_309 29 59 +310 name_310 30 60 +311 name_311 31 61 +312 name_312 32 62 +313 name_313 33 63 +314 name_314 34 64 +315 name_315 35 65 +316 name_316 36 66 +317 name_317 37 67 +318 name_318 38 68 +319 name_319 39 69 +320 name_320 40 70 +321 name_321 41 71 +322 name_322 42 72 +323 name_323 43 73 +324 name_324 44 74 +325 name_325 45 75 +326 name_326 46 76 +327 name_327 47 77 +328 name_328 48 78 +329 name_329 49 79 +336 name_336 26 86 +337 name_337 27 87 +338 name_338 28 88 +339 name_339 29 89 +340 name_340 30 90 +341 name_341 31 91 +342 name_342 32 92 +343 name_343 33 93 +344 name_344 34 94 +345 name_345 35 95 +346 name_346 36 96 +347 name_347 37 97 +348 name_348 38 98 +349 name_349 39 99 +350 name_350 40 50 +351 name_351 41 51 +352 name_352 42 52 +353 name_353 43 53 +354 name_354 44 54 +355 name_355 45 55 +356 name_356 46 56 +357 name_357 47 57 +358 name_358 48 58 +359 name_359 49 59 +366 name_366 26 66 +367 name_367 27 67 +368 name_368 28 68 +369 name_369 29 69 +370 name_370 30 70 +371 name_371 31 71 +372 name_372 32 72 +373 name_373 33 73 +374 name_374 34 74 +375 name_375 35 75 +376 name_376 36 76 +377 name_377 37 77 +378 name_378 38 78 +379 name_379 39 79 +380 name_380 40 80 +381 name_381 41 81 +382 name_382 42 82 +383 name_383 43 83 +384 name_384 44 84 +385 name_385 45 85 +386 name_386 46 86 +387 name_387 47 87 +388 name_388 48 88 +389 name_389 49 89 +396 name_396 26 96 +397 name_397 27 97 +398 name_398 28 98 +399 name_399 29 99 +400 name_400 30 50 +401 name_401 31 51 +402 name_402 32 52 +403 name_403 33 53 +404 name_404 34 54 +405 name_405 35 55 +406 name_406 36 56 +407 name_407 37 57 +408 name_408 38 58 +409 name_409 39 59 +410 name_410 40 60 +411 name_411 41 61 +412 name_412 42 62 +413 name_413 43 63 +414 name_414 44 64 +415 name_415 45 65 +416 name_416 46 66 +417 name_417 47 67 +418 name_418 48 68 +419 name_419 49 69 +426 name_426 26 76 +427 name_427 27 77 +428 name_428 28 78 +429 name_429 29 79 +430 name_430 30 80 +431 name_431 31 81 +432 name_432 32 82 +433 name_433 33 83 +434 name_434 34 84 +435 name_435 35 85 +436 name_436 36 86 +437 name_437 37 87 +438 name_438 38 88 +439 name_439 39 89 +440 name_440 40 90 +441 name_441 41 91 +442 name_442 42 92 +443 name_443 43 93 +444 name_444 44 94 +445 name_445 45 95 +446 name_446 46 96 +447 name_447 47 97 +448 name_448 48 98 +449 name_449 49 99 +456 name_456 26 56 +457 name_457 27 57 +458 name_458 28 58 +459 name_459 29 59 +460 name_460 30 60 +461 name_461 31 61 +462 name_462 32 62 +463 name_463 33 63 +464 name_464 34 64 +465 name_465 35 65 +466 name_466 36 66 +467 name_467 37 67 +468 name_468 38 68 +469 name_469 39 69 +470 name_470 40 70 +471 name_471 41 71 +472 name_472 42 72 +473 name_473 43 73 +474 name_474 44 74 +475 name_475 45 75 +476 name_476 46 76 +477 name_477 47 77 +478 name_478 48 78 +479 name_479 49 79 +486 name_486 26 86 +487 name_487 27 87 +488 name_488 28 88 +489 name_489 29 89 +490 name_490 30 90 +491 name_491 31 91 +492 name_492 32 92 +493 name_493 33 93 +494 name_494 34 94 +495 name_495 35 95 +496 name_496 36 96 +497 name_497 37 97 +498 name_498 38 98 +499 name_499 39 99 +500 name_500 40 50 +501 name_501 41 51 +502 name_502 42 52 +503 name_503 43 53 +504 name_504 44 54 +505 name_505 45 55 +506 name_506 46 56 +507 name_507 47 57 +508 name_508 48 58 +509 name_509 49 59 +516 name_516 26 66 +517 name_517 27 67 +518 name_518 28 68 +519 name_519 29 69 +520 name_520 30 70 +521 name_521 31 71 +522 name_522 32 72 +523 name_523 33 73 +524 name_524 34 74 +525 name_525 35 75 +526 name_526 36 76 +527 name_527 37 77 +528 name_528 38 78 +529 name_529 39 79 +530 name_530 40 80 +531 name_531 41 81 +532 name_532 42 82 +533 name_533 43 83 +534 name_534 44 84 +535 name_535 45 85 +536 name_536 46 86 +537 name_537 47 87 +538 name_538 48 88 +539 name_539 49 89 +546 name_546 26 96 +547 name_547 27 97 +548 name_548 28 98 +549 name_549 29 99 +550 name_550 30 50 +551 name_551 31 51 +552 name_552 32 52 +553 name_553 33 53 +554 name_554 34 54 +555 name_555 35 55 +556 name_556 36 56 +557 name_557 37 57 +558 name_558 38 58 +559 name_559 39 59 +560 name_560 40 60 +561 name_561 41 61 +562 name_562 42 62 +563 name_563 43 63 +564 name_564 44 64 +565 name_565 45 65 +566 name_566 46 66 +567 name_567 47 67 +568 name_568 48 68 +569 name_569 49 69 +576 name_576 26 76 +577 name_577 27 77 +578 name_578 28 78 +579 name_579 29 79 +580 name_580 30 80 +581 name_581 31 81 +582 name_582 32 82 +583 name_583 33 83 +584 name_584 34 84 +585 name_585 35 85 +586 name_586 36 86 +587 name_587 37 87 +588 name_588 38 88 +589 name_589 39 89 +590 name_590 40 90 +591 name_591 41 91 +592 name_592 42 92 +593 name_593 43 93 +594 name_594 44 94 +595 name_595 45 95 +596 name_596 46 96 +597 name_597 47 97 +598 name_598 48 98 +599 name_599 49 99 +606 name_606 26 56 +607 name_607 27 57 +608 name_608 28 58 +609 name_609 29 59 +610 name_610 30 60 +611 name_611 31 61 +612 name_612 32 62 +613 name_613 33 63 +614 name_614 34 64 +615 name_615 35 65 +616 name_616 36 66 +617 name_617 37 67 +618 name_618 38 68 +619 name_619 39 69 +620 name_620 40 70 +621 name_621 41 71 +622 name_622 42 72 +623 name_623 43 73 +624 name_624 44 74 +625 name_625 45 75 +626 name_626 46 76 +627 name_627 47 77 +628 name_628 48 78 +629 name_629 49 79 +636 name_636 26 86 +637 name_637 27 87 +638 name_638 28 88 +639 name_639 29 89 +640 name_640 30 90 +641 name_641 31 91 +642 name_642 32 92 +643 name_643 33 93 +644 name_644 34 94 +645 name_645 35 95 +646 name_646 36 96 +647 name_647 37 97 +648 name_648 38 98 +649 name_649 39 99 +650 name_650 40 50 +651 name_651 41 51 +652 name_652 42 52 +653 name_653 43 53 +654 name_654 44 54 +655 name_655 45 55 +656 name_656 46 56 +657 name_657 47 57 +658 name_658 48 58 +659 name_659 49 59 +666 name_666 26 66 +667 name_667 27 67 +668 name_668 28 68 +669 name_669 29 69 +670 name_670 30 70 +671 name_671 31 71 +672 name_672 32 72 +673 name_673 33 73 +674 name_674 34 74 +675 name_675 35 75 +676 name_676 36 76 +677 name_677 37 77 +678 name_678 38 78 +679 name_679 39 79 +680 name_680 40 80 +681 name_681 41 81 +682 name_682 42 82 +683 name_683 43 83 +684 name_684 44 84 +685 name_685 45 85 +686 name_686 46 86 +687 name_687 47 87 +688 name_688 48 88 +689 name_689 49 89 +696 name_696 26 96 +697 name_697 27 97 +698 name_698 28 98 +699 name_699 29 99 +700 name_700 30 50 +701 name_701 31 51 +702 name_702 32 52 +703 name_703 33 53 +704 name_704 34 54 +705 name_705 35 55 +706 name_706 36 56 +707 name_707 37 57 +708 name_708 38 58 +709 name_709 39 59 +710 name_710 40 60 +711 name_711 41 61 +712 name_712 42 62 +713 name_713 43 63 +714 name_714 44 64 +715 name_715 45 65 +716 name_716 46 66 +717 name_717 47 67 +718 name_718 48 68 +719 name_719 49 69 +726 name_726 26 76 +727 name_727 27 77 +728 name_728 28 78 +729 name_729 29 79 +730 name_730 30 80 +731 name_731 31 81 +732 name_732 32 82 +733 name_733 33 83 +734 name_734 34 84 +735 name_735 35 85 +736 name_736 36 86 +737 name_737 37 87 +738 name_738 38 88 +739 name_739 39 89 +740 name_740 40 90 +741 name_741 41 91 +742 name_742 42 92 +743 name_743 43 93 +744 name_744 44 94 +745 name_745 45 95 +746 name_746 46 96 +747 name_747 47 97 +748 name_748 48 98 +749 name_749 49 99 +756 name_756 26 56 +757 name_757 27 57 +758 name_758 28 58 +759 name_759 29 59 +760 name_760 30 60 +761 name_761 31 61 +762 name_762 32 62 +763 name_763 33 63 +764 name_764 34 64 +765 name_765 35 65 +766 name_766 36 66 +767 name_767 37 67 +768 name_768 38 68 +769 name_769 39 69 +770 name_770 40 70 +771 name_771 41 71 +772 name_772 42 72 +773 name_773 43 73 +774 name_774 44 74 +775 name_775 45 75 +776 name_776 46 76 +777 name_777 47 77 +778 name_778 48 78 +779 name_779 49 79 +786 name_786 26 86 +787 name_787 27 87 +788 name_788 28 88 +789 name_789 29 89 +790 name_790 30 90 +791 name_791 31 91 +792 name_792 32 92 +793 name_793 33 93 +794 name_794 34 94 +795 name_795 35 95 +796 name_796 36 96 +797 name_797 37 97 +798 name_798 38 98 +799 name_799 39 99 +800 name_800 40 50 +801 name_801 41 51 +802 name_802 42 52 +803 name_803 43 53 +804 name_804 44 54 +805 name_805 45 55 +806 name_806 46 56 +807 name_807 47 57 +808 name_808 48 58 +809 name_809 49 59 +816 name_816 26 66 +817 name_817 27 67 +818 name_818 28 68 +819 name_819 29 69 +820 name_820 30 70 +821 name_821 31 71 +822 name_822 32 72 +823 name_823 33 73 +824 name_824 34 74 +825 name_825 35 75 +826 name_826 36 76 +827 name_827 37 77 +828 name_828 38 78 +829 name_829 39 79 +830 name_830 40 80 +831 name_831 41 81 +832 name_832 42 82 +833 name_833 43 83 +834 name_834 44 84 +835 name_835 45 85 +836 name_836 46 86 +837 name_837 47 87 +838 name_838 48 88 +839 name_839 49 89 +846 name_846 26 96 +847 name_847 27 97 +848 name_848 28 98 +849 name_849 29 99 +850 name_850 30 50 +851 name_851 31 51 +852 name_852 32 52 +853 name_853 33 53 +854 name_854 34 54 +855 name_855 35 55 +856 name_856 36 56 +857 name_857 37 57 +858 name_858 38 58 +859 name_859 39 59 +860 name_860 40 60 +861 name_861 41 61 +862 name_862 42 62 +863 name_863 43 63 +864 name_864 44 64 +865 name_865 45 65 +866 name_866 46 66 +867 name_867 47 67 +868 name_868 48 68 +869 name_869 49 69 +876 name_876 26 76 +877 name_877 27 77 +878 name_878 28 78 +879 name_879 29 79 +880 name_880 30 80 +881 name_881 31 81 +882 name_882 32 82 +883 name_883 33 83 +884 name_884 34 84 +885 name_885 35 85 +886 name_886 36 86 +887 name_887 37 87 +888 name_888 38 88 +889 name_889 39 89 +890 name_890 40 90 +891 name_891 41 91 +892 name_892 42 92 +893 name_893 43 93 +894 name_894 44 94 +895 name_895 45 95 +896 name_896 46 96 +897 name_897 47 97 +898 name_898 48 98 +899 name_899 49 99 +906 name_906 26 56 +907 name_907 27 57 +908 name_908 28 58 +909 name_909 29 59 +910 name_910 30 60 +911 name_911 31 61 +912 name_912 32 62 +913 name_913 33 63 +914 name_914 34 64 +915 name_915 35 65 +916 name_916 36 66 +917 name_917 37 67 +918 name_918 38 68 +919 name_919 39 69 +920 name_920 40 70 +921 name_921 41 71 +922 name_922 42 72 +923 name_923 43 73 +924 name_924 44 74 +925 name_925 45 75 +926 name_926 46 76 +927 name_927 47 77 +928 name_928 48 78 +929 name_929 49 79 +936 name_936 26 86 +937 name_937 27 87 +938 name_938 28 88 +939 name_939 29 89 +940 name_940 30 90 +941 name_941 31 91 +942 name_942 32 92 +943 name_943 33 93 +944 name_944 34 94 +945 name_945 35 95 +946 name_946 36 96 +947 name_947 37 97 +948 name_948 38 98 +949 name_949 39 99 +950 name_950 40 50 +951 name_951 41 51 +952 name_952 42 52 +953 name_953 43 53 +954 name_954 44 54 +955 name_955 45 55 +956 name_956 46 56 +957 name_957 47 57 +958 name_958 48 58 +959 name_959 49 59 +966 name_966 26 66 +967 name_967 27 67 +968 name_968 28 68 +969 name_969 29 69 +970 name_970 30 70 +971 name_971 31 71 +972 name_972 32 72 +973 name_973 33 73 +974 name_974 34 74 +975 name_975 35 75 +976 name_976 36 76 +977 name_977 37 77 +978 name_978 38 78 +979 name_979 39 79 +980 name_980 40 80 +981 name_981 41 81 +982 name_982 42 82 +983 name_983 43 83 +984 name_984 44 84 +985 name_985 45 85 +986 name_986 46 86 +987 name_987 47 87 +988 name_988 48 88 +989 name_989 49 89 +996 name_996 26 96 +997 name_997 27 97 +998 name_998 28 98 +999 name_999 29 99 +1000 name_1000 30 50 +1001 name_1001 31 51 +1002 name_1002 32 52 +1003 name_1003 33 53 +1004 name_1004 34 54 +1005 name_1005 35 55 +1006 name_1006 36 56 +1007 name_1007 37 57 +1008 name_1008 38 58 +1009 name_1009 39 59 +1010 name_1010 40 60 +1011 name_1011 41 61 +1012 name_1012 42 62 +1013 name_1013 43 63 +1014 name_1014 44 64 +1015 name_1015 45 65 +1016 name_1016 46 66 +1017 name_1017 47 67 +1018 name_1018 48 68 +1019 name_1019 49 69 +1026 name_1026 26 76 +1027 name_1027 27 77 +1028 name_1028 28 78 +1029 name_1029 29 79 +1030 name_1030 30 80 +1031 name_1031 31 81 +1032 name_1032 32 82 +1033 name_1033 33 83 +1034 name_1034 34 84 +1035 name_1035 35 85 +1036 name_1036 36 86 +1037 name_1037 37 87 +1038 name_1038 38 88 +1039 name_1039 39 89 +1040 name_1040 40 90 +1041 name_1041 41 91 +1042 name_1042 42 92 +1043 name_1043 43 93 +1044 name_1044 44 94 +1045 name_1045 45 95 +1046 name_1046 46 96 +1047 name_1047 47 97 +1048 name_1048 48 98 +1049 name_1049 49 99 +1056 name_1056 26 56 +1057 name_1057 27 57 +1058 name_1058 28 58 +1059 name_1059 29 59 +1060 name_1060 30 60 +1061 name_1061 31 61 +1062 name_1062 32 62 +1063 name_1063 33 63 +1064 name_1064 34 64 +1065 name_1065 35 65 +1066 name_1066 36 66 +1067 name_1067 37 67 +1068 name_1068 38 68 +1069 name_1069 39 69 +1070 name_1070 40 70 +1071 name_1071 41 71 +1072 name_1072 42 72 +1073 name_1073 43 73 +1074 name_1074 44 74 +1075 name_1075 45 75 +1076 name_1076 46 76 +1077 name_1077 47 77 +1078 name_1078 48 78 +1079 name_1079 49 79 +1086 name_1086 26 86 +1087 name_1087 27 87 +1088 name_1088 28 88 +1089 name_1089 29 89 +1090 name_1090 30 90 +1091 name_1091 31 91 +1092 name_1092 32 92 +1093 name_1093 33 93 +1094 name_1094 34 94 +1095 name_1095 35 95 +1096 name_1096 36 96 +1097 name_1097 37 97 +1098 name_1098 38 98 +1099 name_1099 39 99 +1100 name_1100 40 50 +1101 name_1101 41 51 +1102 name_1102 42 52 +1103 name_1103 43 53 +1104 name_1104 44 54 +1105 name_1105 45 55 +1106 name_1106 46 56 +1107 name_1107 47 57 +1108 name_1108 48 58 +1109 name_1109 49 59 +1116 name_1116 26 66 +1117 name_1117 27 67 +1118 name_1118 28 68 +1119 name_1119 29 69 +1120 name_1120 30 70 +1121 name_1121 31 71 +1122 name_1122 32 72 +1123 name_1123 33 73 +1124 name_1124 34 74 +1125 name_1125 35 75 +1126 name_1126 36 76 +1127 name_1127 37 77 +1128 name_1128 38 78 +1129 name_1129 39 79 +1130 name_1130 40 80 +1131 name_1131 41 81 +1132 name_1132 42 82 +1133 name_1133 43 83 +1134 name_1134 44 84 +1135 name_1135 45 85 +1136 name_1136 46 86 +1137 name_1137 47 87 +1138 name_1138 48 88 +1139 name_1139 49 89 +1146 name_1146 26 96 +1147 name_1147 27 97 +1148 name_1148 28 98 +1149 name_1149 29 99 +1150 name_1150 30 50 +1151 name_1151 31 51 +1152 name_1152 32 52 +1153 name_1153 33 53 +1154 name_1154 34 54 +1155 name_1155 35 55 +1156 name_1156 36 56 +1157 name_1157 37 57 +1158 name_1158 38 58 +1159 name_1159 39 59 +1160 name_1160 40 60 +1161 name_1161 41 61 +1162 name_1162 42 62 +1163 name_1163 43 63 +1164 name_1164 44 64 +1165 name_1165 45 65 +1166 name_1166 46 66 +1167 name_1167 47 67 +1168 name_1168 48 68 +1169 name_1169 49 69 +1176 name_1176 26 76 +1177 name_1177 27 77 +1178 name_1178 28 78 +1179 name_1179 29 79 +1180 name_1180 30 80 +1181 name_1181 31 81 +1182 name_1182 32 82 +1183 name_1183 33 83 +1184 name_1184 34 84 +1185 name_1185 35 85 +1186 name_1186 36 86 +1187 name_1187 37 87 +1188 name_1188 38 88 +1189 name_1189 39 89 +1190 name_1190 40 90 +1191 name_1191 41 91 +1192 name_1192 42 92 +1193 name_1193 43 93 +1194 name_1194 44 94 +1195 name_1195 45 95 +1196 name_1196 46 96 +1197 name_1197 47 97 +1198 name_1198 48 98 +1199 name_1199 49 99 +1206 name_1206 26 56 +1207 name_1207 27 57 +1208 name_1208 28 58 +1209 name_1209 29 59 +1210 name_1210 30 60 +1211 name_1211 31 61 +1212 name_1212 32 62 +1213 name_1213 33 63 +1214 name_1214 34 64 +1215 name_1215 35 65 +1216 name_1216 36 66 +1217 name_1217 37 67 +1218 name_1218 38 68 +1219 name_1219 39 69 +1220 name_1220 40 70 +1221 name_1221 41 71 +1222 name_1222 42 72 +1223 name_1223 43 73 +1224 name_1224 44 74 +1225 name_1225 45 75 +1226 name_1226 46 76 +1227 name_1227 47 77 +1228 name_1228 48 78 +1229 name_1229 49 79 +1236 name_1236 26 86 +1237 name_1237 27 87 +1238 name_1238 28 88 +1239 name_1239 29 89 +1240 name_1240 30 90 +1241 name_1241 31 91 +1242 name_1242 32 92 +1243 name_1243 33 93 +1244 name_1244 34 94 +1245 name_1245 35 95 +1246 name_1246 36 96 +1247 name_1247 37 97 +1248 name_1248 38 98 +1249 name_1249 39 99 +1250 name_1250 40 50 +1251 name_1251 41 51 +1252 name_1252 42 52 +1253 name_1253 43 53 +1254 name_1254 44 54 +1255 name_1255 45 55 +1256 name_1256 46 56 +1257 name_1257 47 57 +1258 name_1258 48 58 +1259 name_1259 49 59 +1266 name_1266 26 66 +1267 name_1267 27 67 +1268 name_1268 28 68 +1269 name_1269 29 69 +1270 name_1270 30 70 +1271 name_1271 31 71 +1272 name_1272 32 72 +1273 name_1273 33 73 +1274 name_1274 34 74 +1275 name_1275 35 75 +1276 name_1276 36 76 +1277 name_1277 37 77 +1278 name_1278 38 78 +1279 name_1279 39 79 +1280 name_1280 40 80 +1281 name_1281 41 81 +1282 name_1282 42 82 +1283 name_1283 43 83 +1284 name_1284 44 84 +1285 name_1285 45 85 +1286 name_1286 46 86 +1287 name_1287 47 87 +1288 name_1288 48 88 +1289 name_1289 49 89 +1296 name_1296 26 96 +1297 name_1297 27 97 +1298 name_1298 28 98 +1299 name_1299 29 99 +1300 name_1300 30 50 +1301 name_1301 31 51 +1302 name_1302 32 52 +1303 name_1303 33 53 +1304 name_1304 34 54 +1305 name_1305 35 55 +1306 name_1306 36 56 +1307 name_1307 37 57 +1308 name_1308 38 58 +1309 name_1309 39 59 +1310 name_1310 40 60 +1311 name_1311 41 61 +1312 name_1312 42 62 +1313 name_1313 43 63 +1314 name_1314 44 64 +1315 name_1315 45 65 +1316 name_1316 46 66 +1317 name_1317 47 67 +1318 name_1318 48 68 +1319 name_1319 49 69 +1326 name_1326 26 76 +1327 name_1327 27 77 +1328 name_1328 28 78 +1329 name_1329 29 79 +1330 name_1330 30 80 +1331 name_1331 31 81 +1332 name_1332 32 82 +1333 name_1333 33 83 +1334 name_1334 34 84 +1335 name_1335 35 85 +1336 name_1336 36 86 +1337 name_1337 37 87 +1338 name_1338 38 88 +1339 name_1339 39 89 +1340 name_1340 40 90 +1341 name_1341 41 91 +1342 name_1342 42 92 +1343 name_1343 43 93 +1344 name_1344 44 94 +1345 name_1345 45 95 +1346 name_1346 46 96 +1347 name_1347 47 97 +1348 name_1348 48 98 +1349 name_1349 49 99 +1356 name_1356 26 56 +1357 name_1357 27 57 +1358 name_1358 28 58 +1359 name_1359 29 59 +1360 name_1360 30 60 +1361 name_1361 31 61 +1362 name_1362 32 62 +1363 name_1363 33 63 +1364 name_1364 34 64 +1365 name_1365 35 65 +1366 name_1366 36 66 +1367 name_1367 37 67 +1368 name_1368 38 68 +1369 name_1369 39 69 +1370 name_1370 40 70 +1371 name_1371 41 71 +1372 name_1372 42 72 +1373 name_1373 43 73 +1374 name_1374 44 74 +1375 name_1375 45 75 +1376 name_1376 46 76 +1377 name_1377 47 77 +1378 name_1378 48 78 +1379 name_1379 49 79 +1386 name_1386 26 86 +1387 name_1387 27 87 +1388 name_1388 28 88 +1389 name_1389 29 89 +1390 name_1390 30 90 +1391 name_1391 31 91 +1392 name_1392 32 92 +1393 name_1393 33 93 +1394 name_1394 34 94 +1395 name_1395 35 95 +1396 name_1396 36 96 +1397 name_1397 37 97 +1398 name_1398 38 98 +1399 name_1399 39 99 +1400 name_1400 40 50 +1401 name_1401 41 51 +1402 name_1402 42 52 +1403 name_1403 43 53 +1404 name_1404 44 54 +1405 name_1405 45 55 +1406 name_1406 46 56 +1407 name_1407 47 57 +1408 name_1408 48 58 +1409 name_1409 49 59 +1416 name_1416 26 66 +1417 name_1417 27 67 +1418 name_1418 28 68 +1419 name_1419 29 69 +1420 name_1420 30 70 +1421 name_1421 31 71 +1422 name_1422 32 72 +1423 name_1423 33 73 +1424 name_1424 34 74 +1425 name_1425 35 75 +1426 name_1426 36 76 +1427 name_1427 37 77 +1428 name_1428 38 78 +1429 name_1429 39 79 +1430 name_1430 40 80 +1431 name_1431 41 81 +1432 name_1432 42 82 +1433 name_1433 43 83 +1434 name_1434 44 84 +1435 name_1435 45 85 +1436 name_1436 46 86 +1437 name_1437 47 87 +1438 name_1438 48 88 +1439 name_1439 49 89 +1446 name_1446 26 96 +1447 name_1447 27 97 +1448 name_1448 28 98 +1449 name_1449 29 99 +1450 name_1450 30 50 +1451 name_1451 31 51 +1452 name_1452 32 52 +1453 name_1453 33 53 +1454 name_1454 34 54 +1455 name_1455 35 55 +1456 name_1456 36 56 +1457 name_1457 37 57 +1458 name_1458 38 58 +1459 name_1459 39 59 +1460 name_1460 40 60 +1461 name_1461 41 61 +1462 name_1462 42 62 +1463 name_1463 43 63 +1464 name_1464 44 64 +1465 name_1465 45 65 +1466 name_1466 46 66 +1467 name_1467 47 67 +1468 name_1468 48 68 +1469 name_1469 49 69 +1476 name_1476 26 76 +1477 name_1477 27 77 +1478 name_1478 28 78 +1479 name_1479 29 79 +1480 name_1480 30 80 +1481 name_1481 31 81 +1482 name_1482 32 82 +1483 name_1483 33 83 +1484 name_1484 34 84 +1485 name_1485 35 85 +1486 name_1486 36 86 +1487 name_1487 37 87 +1488 name_1488 38 88 +1489 name_1489 39 89 +1490 name_1490 40 90 +1491 name_1491 41 91 +1492 name_1492 42 92 +1493 name_1493 43 93 +1494 name_1494 44 94 +1495 name_1495 45 95 +1496 name_1496 46 96 +1497 name_1497 47 97 +1498 name_1498 48 98 +1499 name_1499 49 99 +1506 name_1506 26 56 +1507 name_1507 27 57 +1508 name_1508 28 58 +1509 name_1509 29 59 +1510 name_1510 30 60 +1511 name_1511 31 61 +1512 name_1512 32 62 +1513 name_1513 33 63 +1514 name_1514 34 64 +1515 name_1515 35 65 +1516 name_1516 36 66 +1517 name_1517 37 67 +1518 name_1518 38 68 +1519 name_1519 39 69 +1520 name_1520 40 70 +1521 name_1521 41 71 +1522 name_1522 42 72 +1523 name_1523 43 73 +1524 name_1524 44 74 +1525 name_1525 45 75 +1526 name_1526 46 76 +1527 name_1527 47 77 +1528 name_1528 48 78 +1529 name_1529 49 79 +1536 name_1536 26 86 +1537 name_1537 27 87 +1538 name_1538 28 88 +1539 name_1539 29 89 +1540 name_1540 30 90 +1541 name_1541 31 91 +1542 name_1542 32 92 +1543 name_1543 33 93 +1544 name_1544 34 94 +1545 name_1545 35 95 +1546 name_1546 36 96 +1547 name_1547 37 97 +1548 name_1548 38 98 +1549 name_1549 39 99 +1550 name_1550 40 50 +1551 name_1551 41 51 +1552 name_1552 42 52 +1553 name_1553 43 53 +1554 name_1554 44 54 +1555 name_1555 45 55 +1556 name_1556 46 56 +1557 name_1557 47 57 +1558 name_1558 48 58 +1559 name_1559 49 59 +1566 name_1566 26 66 +1567 name_1567 27 67 +1568 name_1568 28 68 +1569 name_1569 29 69 +1570 name_1570 30 70 +1571 name_1571 31 71 +1572 name_1572 32 72 +1573 name_1573 33 73 +1574 name_1574 34 74 +1575 name_1575 35 75 +1576 name_1576 36 76 +1577 name_1577 37 77 +1578 name_1578 38 78 +1579 name_1579 39 79 +1580 name_1580 40 80 +1581 name_1581 41 81 +1582 name_1582 42 82 +1583 name_1583 43 83 +1584 name_1584 44 84 +1585 name_1585 45 85 +1586 name_1586 46 86 +1587 name_1587 47 87 +1588 name_1588 48 88 +1589 name_1589 49 89 +1596 name_1596 26 96 +1597 name_1597 27 97 +1598 name_1598 28 98 +1599 name_1599 29 99 +1600 name_1600 30 50 +1601 name_1601 31 51 +1602 name_1602 32 52 +1603 name_1603 33 53 +1604 name_1604 34 54 +1605 name_1605 35 55 +1606 name_1606 36 56 +1607 name_1607 37 57 +1608 name_1608 38 58 +1609 name_1609 39 59 +1610 name_1610 40 60 +1611 name_1611 41 61 +1612 name_1612 42 62 +1613 name_1613 43 63 +1614 name_1614 44 64 +1615 name_1615 45 65 +1616 name_1616 46 66 +1617 name_1617 47 67 +1618 name_1618 48 68 +1619 name_1619 49 69 +1626 name_1626 26 76 +1627 name_1627 27 77 +1628 name_1628 28 78 +1629 name_1629 29 79 +1630 name_1630 30 80 +1631 name_1631 31 81 +1632 name_1632 32 82 +1633 name_1633 33 83 +1634 name_1634 34 84 +1635 name_1635 35 85 +1636 name_1636 36 86 +1637 name_1637 37 87 +1638 name_1638 38 88 +1639 name_1639 39 89 +1640 name_1640 40 90 +1641 name_1641 41 91 +1642 name_1642 42 92 +1643 name_1643 43 93 +1644 name_1644 44 94 +1645 name_1645 45 95 +1646 name_1646 46 96 +1647 name_1647 47 97 +1648 name_1648 48 98 +1649 name_1649 49 99 +1656 name_1656 26 56 +1657 name_1657 27 57 +1658 name_1658 28 58 +1659 name_1659 29 59 +1660 name_1660 30 60 +1661 name_1661 31 61 +1662 name_1662 32 62 +1663 name_1663 33 63 +1664 name_1664 34 64 +1665 name_1665 35 65 +1666 name_1666 36 66 +1667 name_1667 37 67 +1668 name_1668 38 68 +1669 name_1669 39 69 +1670 name_1670 40 70 +1671 name_1671 41 71 +1672 name_1672 42 72 +1673 name_1673 43 73 +1674 name_1674 44 74 +1675 name_1675 45 75 +1676 name_1676 46 76 +1677 name_1677 47 77 +1678 name_1678 48 78 +1679 name_1679 49 79 +1686 name_1686 26 86 +1687 name_1687 27 87 +1688 name_1688 28 88 +1689 name_1689 29 89 +1690 name_1690 30 90 +1691 name_1691 31 91 +1692 name_1692 32 92 +1693 name_1693 33 93 +1694 name_1694 34 94 +1695 name_1695 35 95 +1696 name_1696 36 96 +1697 name_1697 37 97 +1698 name_1698 38 98 +1699 name_1699 39 99 +1700 name_1700 40 50 +1701 name_1701 41 51 +1702 name_1702 42 52 +1703 name_1703 43 53 +1704 name_1704 44 54 +1705 name_1705 45 55 +1706 name_1706 46 56 +1707 name_1707 47 57 +1708 name_1708 48 58 +1709 name_1709 49 59 +1716 name_1716 26 66 +1717 name_1717 27 67 +1718 name_1718 28 68 +1719 name_1719 29 69 +1720 name_1720 30 70 +1721 name_1721 31 71 +1722 name_1722 32 72 +1723 name_1723 33 73 +1724 name_1724 34 74 +1725 name_1725 35 75 +1726 name_1726 36 76 +1727 name_1727 37 77 +1728 name_1728 38 78 +1729 name_1729 39 79 +1730 name_1730 40 80 +1731 name_1731 41 81 +1732 name_1732 42 82 +1733 name_1733 43 83 +1734 name_1734 44 84 +1735 name_1735 45 85 +1736 name_1736 46 86 +1737 name_1737 47 87 +1738 name_1738 48 88 +1739 name_1739 49 89 +1746 name_1746 26 96 +1747 name_1747 27 97 +1748 name_1748 28 98 +1749 name_1749 29 99 +1750 name_1750 30 50 +1751 name_1751 31 51 +1752 name_1752 32 52 +1753 name_1753 33 53 +1754 name_1754 34 54 +1755 name_1755 35 55 +1756 name_1756 36 56 +1757 name_1757 37 57 +1758 name_1758 38 58 +1759 name_1759 39 59 +1760 name_1760 40 60 +1761 name_1761 41 61 +1762 name_1762 42 62 +1763 name_1763 43 63 +1764 name_1764 44 64 +1765 name_1765 45 65 +1766 name_1766 46 66 +1767 name_1767 47 67 +1768 name_1768 48 68 +1769 name_1769 49 69 +1776 name_1776 26 76 +1777 name_1777 27 77 +1778 name_1778 28 78 +1779 name_1779 29 79 +1780 name_1780 30 80 +1781 name_1781 31 81 +1782 name_1782 32 82 +1783 name_1783 33 83 +1784 name_1784 34 84 +1785 name_1785 35 85 +1786 name_1786 36 86 +1787 name_1787 37 87 +1788 name_1788 38 88 +1789 name_1789 39 89 +1790 name_1790 40 90 +1791 name_1791 41 91 +1792 name_1792 42 92 +1793 name_1793 43 93 +1794 name_1794 44 94 +1795 name_1795 45 95 +1796 name_1796 46 96 +1797 name_1797 47 97 +1798 name_1798 48 98 +1799 name_1799 49 99 +1806 name_1806 26 56 +1807 name_1807 27 57 +1808 name_1808 28 58 +1809 name_1809 29 59 +1810 name_1810 30 60 +1811 name_1811 31 61 +1812 name_1812 32 62 +1813 name_1813 33 63 +1814 name_1814 34 64 +1815 name_1815 35 65 +1816 name_1816 36 66 +1817 name_1817 37 67 +1818 name_1818 38 68 +1819 name_1819 39 69 +1820 name_1820 40 70 +1821 name_1821 41 71 +1822 name_1822 42 72 +1823 name_1823 43 73 +1824 name_1824 44 74 +1825 name_1825 45 75 +1826 name_1826 46 76 +1827 name_1827 47 77 +1828 name_1828 48 78 +1829 name_1829 49 79 +1836 name_1836 26 86 +1837 name_1837 27 87 +1838 name_1838 28 88 +1839 name_1839 29 89 +1840 name_1840 30 90 +1841 name_1841 31 91 +1842 name_1842 32 92 +1843 name_1843 33 93 +1844 name_1844 34 94 +1845 name_1845 35 95 +1846 name_1846 36 96 +1847 name_1847 37 97 +1848 name_1848 38 98 +1849 name_1849 39 99 +1850 name_1850 40 50 +1851 name_1851 41 51 +1852 name_1852 42 52 +1853 name_1853 43 53 +1854 name_1854 44 54 +1855 name_1855 45 55 +1856 name_1856 46 56 +1857 name_1857 47 57 +1858 name_1858 48 58 +1859 name_1859 49 59 +1866 name_1866 26 66 +1867 name_1867 27 67 +1868 name_1868 28 68 +1869 name_1869 29 69 +1870 name_1870 30 70 +1871 name_1871 31 71 +1872 name_1872 32 72 +1873 name_1873 33 73 +1874 name_1874 34 74 +1875 name_1875 35 75 +1876 name_1876 36 76 +1877 name_1877 37 77 +1878 name_1878 38 78 +1879 name_1879 39 79 +1880 name_1880 40 80 +1881 name_1881 41 81 +1882 name_1882 42 82 +1883 name_1883 43 83 +1884 name_1884 44 84 +1885 name_1885 45 85 +1886 name_1886 46 86 +1887 name_1887 47 87 +1888 name_1888 48 88 +1889 name_1889 49 89 +1896 name_1896 26 96 +1897 name_1897 27 97 +1898 name_1898 28 98 +1899 name_1899 29 99 +1900 name_1900 30 50 +1901 name_1901 31 51 +1902 name_1902 32 52 +1903 name_1903 33 53 +1904 name_1904 34 54 +1905 name_1905 35 55 +1906 name_1906 36 56 +1907 name_1907 37 57 +1908 name_1908 38 58 +1909 name_1909 39 59 +1910 name_1910 40 60 +1911 name_1911 41 61 +1912 name_1912 42 62 +1913 name_1913 43 63 +1914 name_1914 44 64 +1915 name_1915 45 65 +1916 name_1916 46 66 +1917 name_1917 47 67 +1918 name_1918 48 68 +1919 name_1919 49 69 +1926 name_1926 26 76 +1927 name_1927 27 77 +1928 name_1928 28 78 +1929 name_1929 29 79 +1930 name_1930 30 80 +1931 name_1931 31 81 +1932 name_1932 32 82 +1933 name_1933 33 83 +1934 name_1934 34 84 +1935 name_1935 35 85 +1936 name_1936 36 86 +1937 name_1937 37 87 +1938 name_1938 38 88 +1939 name_1939 39 89 +1940 name_1940 40 90 +1941 name_1941 41 91 +1942 name_1942 42 92 +1943 name_1943 43 93 +1944 name_1944 44 94 +1945 name_1945 45 95 +1946 name_1946 46 96 +1947 name_1947 47 97 +1948 name_1948 48 98 +1949 name_1949 49 99 +1956 name_1956 26 56 +1957 name_1957 27 57 +1958 name_1958 28 58 +1959 name_1959 29 59 +1960 name_1960 30 60 +1961 name_1961 31 61 +1962 name_1962 32 62 +1963 name_1963 33 63 +1964 name_1964 34 64 +1965 name_1965 35 65 +1966 name_1966 36 66 +1967 name_1967 37 67 +1968 name_1968 38 68 +1969 name_1969 39 69 +1970 name_1970 40 70 +1971 name_1971 41 71 +1972 name_1972 42 72 +1973 name_1973 43 73 +1974 name_1974 44 74 +1975 name_1975 45 75 +1976 name_1976 46 76 +1977 name_1977 47 77 +1978 name_1978 48 78 +1979 name_1979 49 79 +1986 name_1986 26 86 +1987 name_1987 27 87 +1988 name_1988 28 88 +1989 name_1989 29 89 +1990 name_1990 30 90 +1991 name_1991 31 91 +1992 name_1992 32 92 +1993 name_1993 33 93 +1994 name_1994 34 94 +1995 name_1995 35 95 +1996 name_1996 36 96 +1997 name_1997 37 97 +1998 name_1998 38 98 +1999 name_1999 39 99 +2000 name_2000 40 50 +2001 name_2001 41 51 +2002 name_2002 42 52 +2003 name_2003 43 53 +2004 name_2004 44 54 +2005 name_2005 45 55 +2006 name_2006 46 56 +2007 name_2007 47 57 +2008 name_2008 48 58 +2009 name_2009 49 59 +2016 name_2016 26 66 +2017 name_2017 27 67 +2018 name_2018 28 68 +2019 name_2019 29 69 +2020 name_2020 30 70 +2021 name_2021 31 71 +2022 name_2022 32 72 +2023 name_2023 33 73 +2024 name_2024 34 74 +2025 name_2025 35 75 +2026 name_2026 36 76 +2027 name_2027 37 77 +2028 name_2028 38 78 +2029 name_2029 39 79 +2030 name_2030 40 80 +2031 name_2031 41 81 +2032 name_2032 42 82 +2033 name_2033 43 83 +2034 name_2034 44 84 +2035 name_2035 45 85 +2036 name_2036 46 86 +2037 name_2037 47 87 +2038 name_2038 48 88 +2039 name_2039 49 89 +2046 name_2046 26 96 +2047 name_2047 27 97 +2048 name_2048 28 98 +2049 name_2049 29 99 +2050 name_2050 30 50 +2051 name_2051 31 51 +2052 name_2052 32 52 +2053 name_2053 33 53 +2054 name_2054 34 54 +2055 name_2055 35 55 +2056 name_2056 36 56 +2057 name_2057 37 57 +2058 name_2058 38 58 +2059 name_2059 39 59 +2060 name_2060 40 60 +2061 name_2061 41 61 +2062 name_2062 42 62 +2063 name_2063 43 63 +2064 name_2064 44 64 +2065 name_2065 45 65 +2066 name_2066 46 66 +2067 name_2067 47 67 +2068 name_2068 48 68 +2069 name_2069 49 69 +2076 name_2076 26 76 +2077 name_2077 27 77 +2078 name_2078 28 78 +2079 name_2079 29 79 +2080 name_2080 30 80 +2081 name_2081 31 81 +2082 name_2082 32 82 +2083 name_2083 33 83 +2084 name_2084 34 84 +2085 name_2085 35 85 +2086 name_2086 36 86 +2087 name_2087 37 87 +2088 name_2088 38 88 +2089 name_2089 39 89 +2090 name_2090 40 90 +2091 name_2091 41 91 +2092 name_2092 42 92 +2093 name_2093 43 93 +2094 name_2094 44 94 +2095 name_2095 45 95 +2096 name_2096 46 96 +2097 name_2097 47 97 +2098 name_2098 48 98 +2099 name_2099 49 99 +2106 name_2106 26 56 +2107 name_2107 27 57 +2108 name_2108 28 58 +2109 name_2109 29 59 +2110 name_2110 30 60 +2111 name_2111 31 61 +2112 name_2112 32 62 +2113 name_2113 33 63 +2114 name_2114 34 64 +2115 name_2115 35 65 +2116 name_2116 36 66 +2117 name_2117 37 67 +2118 name_2118 38 68 +2119 name_2119 39 69 +2120 name_2120 40 70 +2121 name_2121 41 71 +2122 name_2122 42 72 +2123 name_2123 43 73 +2124 name_2124 44 74 +2125 name_2125 45 75 +2126 name_2126 46 76 +2127 name_2127 47 77 +2128 name_2128 48 78 +2129 name_2129 49 79 +2136 name_2136 26 86 +2137 name_2137 27 87 +2138 name_2138 28 88 +2139 name_2139 29 89 +2140 name_2140 30 90 +2141 name_2141 31 91 +2142 name_2142 32 92 +2143 name_2143 33 93 +2144 name_2144 34 94 +2145 name_2145 35 95 +2146 name_2146 36 96 +2147 name_2147 37 97 +2148 name_2148 38 98 +2149 name_2149 39 99 +2150 name_2150 40 50 +2151 name_2151 41 51 +2152 name_2152 42 52 +2153 name_2153 43 53 +2154 name_2154 44 54 +2155 name_2155 45 55 +2156 name_2156 46 56 +2157 name_2157 47 57 +2158 name_2158 48 58 +2159 name_2159 49 59 +2166 name_2166 26 66 +2167 name_2167 27 67 +2168 name_2168 28 68 +2169 name_2169 29 69 +2170 name_2170 30 70 +2171 name_2171 31 71 +2172 name_2172 32 72 +2173 name_2173 33 73 +2174 name_2174 34 74 +2175 name_2175 35 75 +2176 name_2176 36 76 +2177 name_2177 37 77 +2178 name_2178 38 78 +2179 name_2179 39 79 +2180 name_2180 40 80 +2181 name_2181 41 81 +2182 name_2182 42 82 +2183 name_2183 43 83 +2184 name_2184 44 84 +2185 name_2185 45 85 +2186 name_2186 46 86 +2187 name_2187 47 87 +2188 name_2188 48 88 +2189 name_2189 49 89 +2196 name_2196 26 96 +2197 name_2197 27 97 +2198 name_2198 28 98 +2199 name_2199 29 99 +2200 name_2200 30 50 +2201 name_2201 31 51 +2202 name_2202 32 52 +2203 name_2203 33 53 +2204 name_2204 34 54 +2205 name_2205 35 55 +2206 name_2206 36 56 +2207 name_2207 37 57 +2208 name_2208 38 58 +2209 name_2209 39 59 +2210 name_2210 40 60 +2211 name_2211 41 61 +2212 name_2212 42 62 +2213 name_2213 43 63 +2214 name_2214 44 64 +2215 name_2215 45 65 +2216 name_2216 46 66 +2217 name_2217 47 67 +2218 name_2218 48 68 +2219 name_2219 49 69 +2226 name_2226 26 76 +2227 name_2227 27 77 +2228 name_2228 28 78 +2229 name_2229 29 79 +2230 name_2230 30 80 +2231 name_2231 31 81 +2232 name_2232 32 82 +2233 name_2233 33 83 +2234 name_2234 34 84 +2235 name_2235 35 85 +2236 name_2236 36 86 +2237 name_2237 37 87 +2238 name_2238 38 88 +2239 name_2239 39 89 +2240 name_2240 40 90 +2241 name_2241 41 91 +2242 name_2242 42 92 +2243 name_2243 43 93 +2244 name_2244 44 94 +2245 name_2245 45 95 +2246 name_2246 46 96 +2247 name_2247 47 97 +2248 name_2248 48 98 +2249 name_2249 49 99 +2256 name_2256 26 56 +2257 name_2257 27 57 +2258 name_2258 28 58 +2259 name_2259 29 59 +2260 name_2260 30 60 +2261 name_2261 31 61 +2262 name_2262 32 62 +2263 name_2263 33 63 +2264 name_2264 34 64 +2265 name_2265 35 65 +2266 name_2266 36 66 +2267 name_2267 37 67 +2268 name_2268 38 68 +2269 name_2269 39 69 +2270 name_2270 40 70 +2271 name_2271 41 71 +2272 name_2272 42 72 +2273 name_2273 43 73 +2274 name_2274 44 74 +2275 name_2275 45 75 +2276 name_2276 46 76 +2277 name_2277 47 77 +2278 name_2278 48 78 +2279 name_2279 49 79 +2286 name_2286 26 86 +2287 name_2287 27 87 +2288 name_2288 28 88 +2289 name_2289 29 89 +2290 name_2290 30 90 +2291 name_2291 31 91 +2292 name_2292 32 92 +2293 name_2293 33 93 +2294 name_2294 34 94 +2295 name_2295 35 95 +2296 name_2296 36 96 +2297 name_2297 37 97 +2298 name_2298 38 98 +2299 name_2299 39 99 +2300 name_2300 40 50 +2301 name_2301 41 51 +2302 name_2302 42 52 +2303 name_2303 43 53 +2304 name_2304 44 54 +2305 name_2305 45 55 +2306 name_2306 46 56 +2307 name_2307 47 57 +2308 name_2308 48 58 +2309 name_2309 49 59 +2316 name_2316 26 66 +2317 name_2317 27 67 +2318 name_2318 28 68 +2319 name_2319 29 69 +2320 name_2320 30 70 +2321 name_2321 31 71 +2322 name_2322 32 72 +2323 name_2323 33 73 +2324 name_2324 34 74 +2325 name_2325 35 75 +2326 name_2326 36 76 +2327 name_2327 37 77 +2328 name_2328 38 78 +2329 name_2329 39 79 +2330 name_2330 40 80 +2331 name_2331 41 81 +2332 name_2332 42 82 +2333 name_2333 43 83 +2334 name_2334 44 84 +2335 name_2335 45 85 +2336 name_2336 46 86 +2337 name_2337 47 87 +2338 name_2338 48 88 +2339 name_2339 49 89 +2346 name_2346 26 96 +2347 name_2347 27 97 +2348 name_2348 28 98 +2349 name_2349 29 99 +2350 name_2350 30 50 +2351 name_2351 31 51 +2352 name_2352 32 52 +2353 name_2353 33 53 +2354 name_2354 34 54 +2355 name_2355 35 55 +2356 name_2356 36 56 +2357 name_2357 37 57 +2358 name_2358 38 58 +2359 name_2359 39 59 +2360 name_2360 40 60 +2361 name_2361 41 61 +2362 name_2362 42 62 +2363 name_2363 43 63 +2364 name_2364 44 64 +2365 name_2365 45 65 +2366 name_2366 46 66 +2367 name_2367 47 67 +2368 name_2368 48 68 +2369 name_2369 49 69 +2376 name_2376 26 76 +2377 name_2377 27 77 +2378 name_2378 28 78 +2379 name_2379 29 79 +2380 name_2380 30 80 +2381 name_2381 31 81 +2382 name_2382 32 82 +2383 name_2383 33 83 +2384 name_2384 34 84 +2385 name_2385 35 85 +2386 name_2386 36 86 +2387 name_2387 37 87 +2388 name_2388 38 88 +2389 name_2389 39 89 +2390 name_2390 40 90 +2391 name_2391 41 91 +2392 name_2392 42 92 +2393 name_2393 43 93 +2394 name_2394 44 94 +2395 name_2395 45 95 +2396 name_2396 46 96 +2397 name_2397 47 97 +2398 name_2398 48 98 +2399 name_2399 49 99 +2406 name_2406 26 56 +2407 name_2407 27 57 +2408 name_2408 28 58 +2409 name_2409 29 59 +2410 name_2410 30 60 +2411 name_2411 31 61 +2412 name_2412 32 62 +2413 name_2413 33 63 +2414 name_2414 34 64 +2415 name_2415 35 65 +2416 name_2416 36 66 +2417 name_2417 37 67 +2418 name_2418 38 68 +2419 name_2419 39 69 +2420 name_2420 40 70 +2421 name_2421 41 71 +2422 name_2422 42 72 +2423 name_2423 43 73 +2424 name_2424 44 74 +2425 name_2425 45 75 +2426 name_2426 46 76 +2427 name_2427 47 77 +2428 name_2428 48 78 +2429 name_2429 49 79 +2436 name_2436 26 86 +2437 name_2437 27 87 +2438 name_2438 28 88 +2439 name_2439 29 89 +2440 name_2440 30 90 +2441 name_2441 31 91 +2442 name_2442 32 92 +2443 name_2443 33 93 +2444 name_2444 34 94 +2445 name_2445 35 95 +2446 name_2446 36 96 +2447 name_2447 37 97 +2448 name_2448 38 98 +2449 name_2449 39 99 +2450 name_2450 40 50 +2451 name_2451 41 51 +2452 name_2452 42 52 +2453 name_2453 43 53 +2454 name_2454 44 54 +2455 name_2455 45 55 +2456 name_2456 46 56 +2457 name_2457 47 57 +2458 name_2458 48 58 +2459 name_2459 49 59 +2466 name_2466 26 66 +2467 name_2467 27 67 +2468 name_2468 28 68 +2469 name_2469 29 69 +2470 name_2470 30 70 +2471 name_2471 31 71 +2472 name_2472 32 72 +2473 name_2473 33 73 +2474 name_2474 34 74 +2475 name_2475 35 75 +2476 name_2476 36 76 +2477 name_2477 37 77 +2478 name_2478 38 78 +2479 name_2479 39 79 +2480 name_2480 40 80 +2481 name_2481 41 81 +2482 name_2482 42 82 +2483 name_2483 43 83 +2484 name_2484 44 84 +2485 name_2485 45 85 +2486 name_2486 46 86 +2487 name_2487 47 87 +2488 name_2488 48 88 +2489 name_2489 49 89 +2496 name_2496 26 96 +2497 name_2497 27 97 +2498 name_2498 28 98 +2499 name_2499 29 99 +2500 name_2500 30 50 +2501 name_2501 31 51 +2502 name_2502 32 52 +2503 name_2503 33 53 +2504 name_2504 34 54 +2505 name_2505 35 55 +2506 name_2506 36 56 +2507 name_2507 37 57 +2508 name_2508 38 58 +2509 name_2509 39 59 +2510 name_2510 40 60 +2511 name_2511 41 61 +2512 name_2512 42 62 +2513 name_2513 43 63 +2514 name_2514 44 64 +2515 name_2515 45 65 +2516 name_2516 46 66 +2517 name_2517 47 67 +2518 name_2518 48 68 +2519 name_2519 49 69 +2526 name_2526 26 76 +2527 name_2527 27 77 +2528 name_2528 28 78 +2529 name_2529 29 79 +2530 name_2530 30 80 +2531 name_2531 31 81 +2532 name_2532 32 82 +2533 name_2533 33 83 +2534 name_2534 34 84 +2535 name_2535 35 85 +2536 name_2536 36 86 +2537 name_2537 37 87 +2538 name_2538 38 88 +2539 name_2539 39 89 +2540 name_2540 40 90 +2541 name_2541 41 91 +2542 name_2542 42 92 +2543 name_2543 43 93 +2544 name_2544 44 94 +2545 name_2545 45 95 +2546 name_2546 46 96 +2547 name_2547 47 97 +2548 name_2548 48 98 +2549 name_2549 49 99 +2556 name_2556 26 56 +2557 name_2557 27 57 +2558 name_2558 28 58 +2559 name_2559 29 59 +2560 name_2560 30 60 +2561 name_2561 31 61 +2562 name_2562 32 62 +2563 name_2563 33 63 +2564 name_2564 34 64 +2565 name_2565 35 65 +2566 name_2566 36 66 +2567 name_2567 37 67 +2568 name_2568 38 68 +2569 name_2569 39 69 +2570 name_2570 40 70 +2571 name_2571 41 71 +2572 name_2572 42 72 +2573 name_2573 43 73 +2574 name_2574 44 74 +2575 name_2575 45 75 +2576 name_2576 46 76 +2577 name_2577 47 77 +2578 name_2578 48 78 +2579 name_2579 49 79 +2586 name_2586 26 86 +2587 name_2587 27 87 +2588 name_2588 28 88 +2589 name_2589 29 89 +2590 name_2590 30 90 +2591 name_2591 31 91 +2592 name_2592 32 92 +2593 name_2593 33 93 +2594 name_2594 34 94 +2595 name_2595 35 95 +2596 name_2596 36 96 +2597 name_2597 37 97 +2598 name_2598 38 98 +2599 name_2599 39 99 +2600 name_2600 40 50 +2601 name_2601 41 51 +2602 name_2602 42 52 +2603 name_2603 43 53 +2604 name_2604 44 54 +2605 name_2605 45 55 +2606 name_2606 46 56 +2607 name_2607 47 57 +2608 name_2608 48 58 +2609 name_2609 49 59 +2616 name_2616 26 66 +2617 name_2617 27 67 +2618 name_2618 28 68 +2619 name_2619 29 69 +2620 name_2620 30 70 +2621 name_2621 31 71 +2622 name_2622 32 72 +2623 name_2623 33 73 +2624 name_2624 34 74 +2625 name_2625 35 75 +2626 name_2626 36 76 +2627 name_2627 37 77 +2628 name_2628 38 78 +2629 name_2629 39 79 +2630 name_2630 40 80 +2631 name_2631 41 81 +2632 name_2632 42 82 +2633 name_2633 43 83 +2634 name_2634 44 84 +2635 name_2635 45 85 +2636 name_2636 46 86 +2637 name_2637 47 87 +2638 name_2638 48 88 +2639 name_2639 49 89 +2646 name_2646 26 96 +2647 name_2647 27 97 +2648 name_2648 28 98 +2649 name_2649 29 99 +2650 name_2650 30 50 +2651 name_2651 31 51 +2652 name_2652 32 52 +2653 name_2653 33 53 +2654 name_2654 34 54 +2655 name_2655 35 55 +2656 name_2656 36 56 +2657 name_2657 37 57 +2658 name_2658 38 58 +2659 name_2659 39 59 +2660 name_2660 40 60 +2661 name_2661 41 61 +2662 name_2662 42 62 +2663 name_2663 43 63 +2664 name_2664 44 64 +2665 name_2665 45 65 +2666 name_2666 46 66 +2667 name_2667 47 67 +2668 name_2668 48 68 +2669 name_2669 49 69 +2676 name_2676 26 76 +2677 name_2677 27 77 +2678 name_2678 28 78 +2679 name_2679 29 79 +2680 name_2680 30 80 +2681 name_2681 31 81 +2682 name_2682 32 82 +2683 name_2683 33 83 +2684 name_2684 34 84 +2685 name_2685 35 85 +2686 name_2686 36 86 +2687 name_2687 37 87 +2688 name_2688 38 88 +2689 name_2689 39 89 +2690 name_2690 40 90 +2691 name_2691 41 91 +2692 name_2692 42 92 +2693 name_2693 43 93 +2694 name_2694 44 94 +2695 name_2695 45 95 +2696 name_2696 46 96 +2697 name_2697 47 97 +2698 name_2698 48 98 +2699 name_2699 49 99 +2706 name_2706 26 56 +2707 name_2707 27 57 +2708 name_2708 28 58 +2709 name_2709 29 59 +2710 name_2710 30 60 +2711 name_2711 31 61 +2712 name_2712 32 62 +2713 name_2713 33 63 +2714 name_2714 34 64 +2715 name_2715 35 65 +2716 name_2716 36 66 +2717 name_2717 37 67 +2718 name_2718 38 68 +2719 name_2719 39 69 +2720 name_2720 40 70 +2721 name_2721 41 71 +2722 name_2722 42 72 +2723 name_2723 43 73 +2724 name_2724 44 74 +2725 name_2725 45 75 +2726 name_2726 46 76 +2727 name_2727 47 77 +2728 name_2728 48 78 +2729 name_2729 49 79 +2736 name_2736 26 86 +2737 name_2737 27 87 +2738 name_2738 28 88 +2739 name_2739 29 89 +2740 name_2740 30 90 +2741 name_2741 31 91 +2742 name_2742 32 92 +2743 name_2743 33 93 +2744 name_2744 34 94 +2745 name_2745 35 95 +2746 name_2746 36 96 +2747 name_2747 37 97 +2748 name_2748 38 98 +2749 name_2749 39 99 +2750 name_2750 40 50 +2751 name_2751 41 51 +2752 name_2752 42 52 +2753 name_2753 43 53 +2754 name_2754 44 54 +2755 name_2755 45 55 +2756 name_2756 46 56 +2757 name_2757 47 57 +2758 name_2758 48 58 +2759 name_2759 49 59 +2766 name_2766 26 66 +2767 name_2767 27 67 +2768 name_2768 28 68 +2769 name_2769 29 69 +2770 name_2770 30 70 +2771 name_2771 31 71 +2772 name_2772 32 72 +2773 name_2773 33 73 +2774 name_2774 34 74 +2775 name_2775 35 75 +2776 name_2776 36 76 +2777 name_2777 37 77 +2778 name_2778 38 78 +2779 name_2779 39 79 +2780 name_2780 40 80 +2781 name_2781 41 81 +2782 name_2782 42 82 +2783 name_2783 43 83 +2784 name_2784 44 84 +2785 name_2785 45 85 +2786 name_2786 46 86 +2787 name_2787 47 87 +2788 name_2788 48 88 +2789 name_2789 49 89 +2796 name_2796 26 96 +2797 name_2797 27 97 +2798 name_2798 28 98 +2799 name_2799 29 99 +2800 name_2800 30 50 +2801 name_2801 31 51 +2802 name_2802 32 52 +2803 name_2803 33 53 +2804 name_2804 34 54 +2805 name_2805 35 55 +2806 name_2806 36 56 +2807 name_2807 37 57 +2808 name_2808 38 58 +2809 name_2809 39 59 +2810 name_2810 40 60 +2811 name_2811 41 61 +2812 name_2812 42 62 +2813 name_2813 43 63 +2814 name_2814 44 64 +2815 name_2815 45 65 +2816 name_2816 46 66 +2817 name_2817 47 67 +2818 name_2818 48 68 +2819 name_2819 49 69 +2826 name_2826 26 76 +2827 name_2827 27 77 +2828 name_2828 28 78 +2829 name_2829 29 79 +2830 name_2830 30 80 +2831 name_2831 31 81 +2832 name_2832 32 82 +2833 name_2833 33 83 +2834 name_2834 34 84 +2835 name_2835 35 85 +2836 name_2836 36 86 +2837 name_2837 37 87 +2838 name_2838 38 88 +2839 name_2839 39 89 +2840 name_2840 40 90 +2841 name_2841 41 91 +2842 name_2842 42 92 +2843 name_2843 43 93 +2844 name_2844 44 94 +2845 name_2845 45 95 +2846 name_2846 46 96 +2847 name_2847 47 97 +2848 name_2848 48 98 +2849 name_2849 49 99 +2856 name_2856 26 56 +2857 name_2857 27 57 +2858 name_2858 28 58 +2859 name_2859 29 59 +2860 name_2860 30 60 +2861 name_2861 31 61 +2862 name_2862 32 62 +2863 name_2863 33 63 +2864 name_2864 34 64 +2865 name_2865 35 65 +2866 name_2866 36 66 +2867 name_2867 37 67 +2868 name_2868 38 68 +2869 name_2869 39 69 +2870 name_2870 40 70 +2871 name_2871 41 71 +2872 name_2872 42 72 +2873 name_2873 43 73 +2874 name_2874 44 74 +2875 name_2875 45 75 +2876 name_2876 46 76 +2877 name_2877 47 77 +2878 name_2878 48 78 +2879 name_2879 49 79 +2886 name_2886 26 86 +2887 name_2887 27 87 +2888 name_2888 28 88 +2889 name_2889 29 89 +2890 name_2890 30 90 +2891 name_2891 31 91 +2892 name_2892 32 92 +2893 name_2893 33 93 +2894 name_2894 34 94 +2895 name_2895 35 95 +2896 name_2896 36 96 +2897 name_2897 37 97 +2898 name_2898 38 98 +2899 name_2899 39 99 +2900 name_2900 40 50 +2901 name_2901 41 51 +2902 name_2902 42 52 +2903 name_2903 43 53 +2904 name_2904 44 54 +2905 name_2905 45 55 +2906 name_2906 46 56 +2907 name_2907 47 57 +2908 name_2908 48 58 +2909 name_2909 49 59 +2916 name_2916 26 66 +2917 name_2917 27 67 +2918 name_2918 28 68 +2919 name_2919 29 69 +2920 name_2920 30 70 +2921 name_2921 31 71 +2922 name_2922 32 72 +2923 name_2923 33 73 +2924 name_2924 34 74 +2925 name_2925 35 75 +2926 name_2926 36 76 +2927 name_2927 37 77 +2928 name_2928 38 78 +2929 name_2929 39 79 +2930 name_2930 40 80 +2931 name_2931 41 81 +2932 name_2932 42 82 +2933 name_2933 43 83 +2934 name_2934 44 84 +2935 name_2935 45 85 +2936 name_2936 46 86 +2937 name_2937 47 87 +2938 name_2938 48 88 +2939 name_2939 49 89 +2946 name_2946 26 96 +2947 name_2947 27 97 +2948 name_2948 28 98 +2949 name_2949 29 99 +2950 name_2950 30 50 +2951 name_2951 31 51 +2952 name_2952 32 52 +2953 name_2953 33 53 +2954 name_2954 34 54 +2955 name_2955 35 55 +2956 name_2956 36 56 +2957 name_2957 37 57 +2958 name_2958 38 58 +2959 name_2959 39 59 +2960 name_2960 40 60 +2961 name_2961 41 61 +2962 name_2962 42 62 +2963 name_2963 43 63 +2964 name_2964 44 64 +2965 name_2965 45 65 +2966 name_2966 46 66 +2967 name_2967 47 67 +2968 name_2968 48 68 +2969 name_2969 49 69 +2976 name_2976 26 76 +2977 name_2977 27 77 +2978 name_2978 28 78 +2979 name_2979 29 79 +2980 name_2980 30 80 +2981 name_2981 31 81 +2982 name_2982 32 82 +2983 name_2983 33 83 +2984 name_2984 34 84 +2985 name_2985 35 85 +2986 name_2986 36 86 +2987 name_2987 37 87 +2988 name_2988 38 88 +2989 name_2989 39 89 +2990 name_2990 40 90 +2991 name_2991 41 91 +2992 name_2992 42 92 +2993 name_2993 43 93 +2994 name_2994 44 94 +2995 name_2995 45 95 +2996 name_2996 46 96 +2997 name_2997 47 97 +2998 name_2998 48 98 +2999 name_2999 49 99 +3006 name_3006 26 56 +3007 name_3007 27 57 +3008 name_3008 28 58 +3009 name_3009 29 59 +3010 name_3010 30 60 +3011 name_3011 31 61 +3012 name_3012 32 62 +3013 name_3013 33 63 +3014 name_3014 34 64 +3015 name_3015 35 65 +3016 name_3016 36 66 +3017 name_3017 37 67 +3018 name_3018 38 68 +3019 name_3019 39 69 +3020 name_3020 40 70 +3021 name_3021 41 71 +3022 name_3022 42 72 +3023 name_3023 43 73 +3024 name_3024 44 74 +3025 name_3025 45 75 +3026 name_3026 46 76 +3027 name_3027 47 77 +3028 name_3028 48 78 +3029 name_3029 49 79 +3036 name_3036 26 86 +3037 name_3037 27 87 +3038 name_3038 28 88 +3039 name_3039 29 89 +3040 name_3040 30 90 +3041 name_3041 31 91 +3042 name_3042 32 92 +3043 name_3043 33 93 +3044 name_3044 34 94 +3045 name_3045 35 95 +3046 name_3046 36 96 +3047 name_3047 37 97 +3048 name_3048 38 98 +3049 name_3049 39 99 +3050 name_3050 40 50 +3051 name_3051 41 51 +3052 name_3052 42 52 +3053 name_3053 43 53 +3054 name_3054 44 54 +3055 name_3055 45 55 +3056 name_3056 46 56 +3057 name_3057 47 57 +3058 name_3058 48 58 +3059 name_3059 49 59 +3066 name_3066 26 66 +3067 name_3067 27 67 +3068 name_3068 28 68 +3069 name_3069 29 69 +3070 name_3070 30 70 +3071 name_3071 31 71 +3072 name_3072 32 72 +3073 name_3073 33 73 +3074 name_3074 34 74 +3075 name_3075 35 75 +3076 name_3076 36 76 +3077 name_3077 37 77 +3078 name_3078 38 78 +3079 name_3079 39 79 +3080 name_3080 40 80 +3081 name_3081 41 81 +3082 name_3082 42 82 +3083 name_3083 43 83 +3084 name_3084 44 84 +3085 name_3085 45 85 +3086 name_3086 46 86 +3087 name_3087 47 87 +3088 name_3088 48 88 +3089 name_3089 49 89 +3096 name_3096 26 96 +3097 name_3097 27 97 +3098 name_3098 28 98 +3099 name_3099 29 99 +3100 name_3100 30 50 +3101 name_3101 31 51 +3102 name_3102 32 52 +3103 name_3103 33 53 +3104 name_3104 34 54 +3105 name_3105 35 55 +3106 name_3106 36 56 +3107 name_3107 37 57 +3108 name_3108 38 58 +3109 name_3109 39 59 +3110 name_3110 40 60 +3111 name_3111 41 61 +3112 name_3112 42 62 +3113 name_3113 43 63 +3114 name_3114 44 64 +3115 name_3115 45 65 +3116 name_3116 46 66 +3117 name_3117 47 67 +3118 name_3118 48 68 +3119 name_3119 49 69 +3126 name_3126 26 76 +3127 name_3127 27 77 +3128 name_3128 28 78 +3129 name_3129 29 79 +3130 name_3130 30 80 +3131 name_3131 31 81 +3132 name_3132 32 82 +3133 name_3133 33 83 +3134 name_3134 34 84 +3135 name_3135 35 85 +3136 name_3136 36 86 +3137 name_3137 37 87 +3138 name_3138 38 88 +3139 name_3139 39 89 +3140 name_3140 40 90 +3141 name_3141 41 91 +3142 name_3142 42 92 +3143 name_3143 43 93 +3144 name_3144 44 94 +3145 name_3145 45 95 +3146 name_3146 46 96 +3147 name_3147 47 97 +3148 name_3148 48 98 +3149 name_3149 49 99 +3156 name_3156 26 56 +3157 name_3157 27 57 +3158 name_3158 28 58 +3159 name_3159 29 59 +3160 name_3160 30 60 +3161 name_3161 31 61 +3162 name_3162 32 62 +3163 name_3163 33 63 +3164 name_3164 34 64 +3165 name_3165 35 65 +3166 name_3166 36 66 +3167 name_3167 37 67 +3168 name_3168 38 68 +3169 name_3169 39 69 +3170 name_3170 40 70 +3171 name_3171 41 71 +3172 name_3172 42 72 +3173 name_3173 43 73 +3174 name_3174 44 74 +3175 name_3175 45 75 +3176 name_3176 46 76 +3177 name_3177 47 77 +3178 name_3178 48 78 +3179 name_3179 49 79 +3186 name_3186 26 86 +3187 name_3187 27 87 +3188 name_3188 28 88 +3189 name_3189 29 89 +3190 name_3190 30 90 +3191 name_3191 31 91 +3192 name_3192 32 92 +3193 name_3193 33 93 +3194 name_3194 34 94 +3195 name_3195 35 95 +3196 name_3196 36 96 +3197 name_3197 37 97 +3198 name_3198 38 98 +3199 name_3199 39 99 +3200 name_3200 40 50 +3201 name_3201 41 51 +3202 name_3202 42 52 +3203 name_3203 43 53 +3204 name_3204 44 54 +3205 name_3205 45 55 +3206 name_3206 46 56 +3207 name_3207 47 57 +3208 name_3208 48 58 +3209 name_3209 49 59 +3216 name_3216 26 66 +3217 name_3217 27 67 +3218 name_3218 28 68 +3219 name_3219 29 69 +3220 name_3220 30 70 +3221 name_3221 31 71 +3222 name_3222 32 72 +3223 name_3223 33 73 +3224 name_3224 34 74 +3225 name_3225 35 75 +3226 name_3226 36 76 +3227 name_3227 37 77 +3228 name_3228 38 78 +3229 name_3229 39 79 +3230 name_3230 40 80 +3231 name_3231 41 81 +3232 name_3232 42 82 +3233 name_3233 43 83 +3234 name_3234 44 84 +3235 name_3235 45 85 +3236 name_3236 46 86 +3237 name_3237 47 87 +3238 name_3238 48 88 +3239 name_3239 49 89 +3246 name_3246 26 96 +3247 name_3247 27 97 +3248 name_3248 28 98 +3249 name_3249 29 99 +3250 name_3250 30 50 +3251 name_3251 31 51 +3252 name_3252 32 52 +3253 name_3253 33 53 +3254 name_3254 34 54 +3255 name_3255 35 55 +3256 name_3256 36 56 +3257 name_3257 37 57 +3258 name_3258 38 58 +3259 name_3259 39 59 +3260 name_3260 40 60 +3261 name_3261 41 61 +3262 name_3262 42 62 +3263 name_3263 43 63 +3264 name_3264 44 64 +3265 name_3265 45 65 +3266 name_3266 46 66 +3267 name_3267 47 67 +3268 name_3268 48 68 +3269 name_3269 49 69 +3276 name_3276 26 76 +3277 name_3277 27 77 +3278 name_3278 28 78 +3279 name_3279 29 79 +3280 name_3280 30 80 +3281 name_3281 31 81 +3282 name_3282 32 82 +3283 name_3283 33 83 +3284 name_3284 34 84 +3285 name_3285 35 85 +3286 name_3286 36 86 +3287 name_3287 37 87 +3288 name_3288 38 88 +3289 name_3289 39 89 +3290 name_3290 40 90 +3291 name_3291 41 91 +3292 name_3292 42 92 +3293 name_3293 43 93 +3294 name_3294 44 94 +3295 name_3295 45 95 +3296 name_3296 46 96 +3297 name_3297 47 97 +3298 name_3298 48 98 +3299 name_3299 49 99 +3306 name_3306 26 56 +3307 name_3307 27 57 +3308 name_3308 28 58 +3309 name_3309 29 59 +3310 name_3310 30 60 +3311 name_3311 31 61 +3312 name_3312 32 62 +3313 name_3313 33 63 +3314 name_3314 34 64 +3315 name_3315 35 65 +3316 name_3316 36 66 +3317 name_3317 37 67 +3318 name_3318 38 68 +3319 name_3319 39 69 +3320 name_3320 40 70 +3321 name_3321 41 71 +3322 name_3322 42 72 +3323 name_3323 43 73 +3324 name_3324 44 74 +3325 name_3325 45 75 +3326 name_3326 46 76 +3327 name_3327 47 77 +3328 name_3328 48 78 +3329 name_3329 49 79 +3336 name_3336 26 86 +3337 name_3337 27 87 +3338 name_3338 28 88 +3339 name_3339 29 89 +3340 name_3340 30 90 +3341 name_3341 31 91 +3342 name_3342 32 92 +3343 name_3343 33 93 +3344 name_3344 34 94 +3345 name_3345 35 95 +3346 name_3346 36 96 +3347 name_3347 37 97 +3348 name_3348 38 98 +3349 name_3349 39 99 +3350 name_3350 40 50 +3351 name_3351 41 51 +3352 name_3352 42 52 +3353 name_3353 43 53 +3354 name_3354 44 54 +3355 name_3355 45 55 +3356 name_3356 46 56 +3357 name_3357 47 57 +3358 name_3358 48 58 +3359 name_3359 49 59 +3366 name_3366 26 66 +3367 name_3367 27 67 +3368 name_3368 28 68 +3369 name_3369 29 69 +3370 name_3370 30 70 +3371 name_3371 31 71 +3372 name_3372 32 72 +3373 name_3373 33 73 +3374 name_3374 34 74 +3375 name_3375 35 75 +3376 name_3376 36 76 +3377 name_3377 37 77 +3378 name_3378 38 78 +3379 name_3379 39 79 +3380 name_3380 40 80 +3381 name_3381 41 81 +3382 name_3382 42 82 +3383 name_3383 43 83 +3384 name_3384 44 84 +3385 name_3385 45 85 +3386 name_3386 46 86 +3387 name_3387 47 87 +3388 name_3388 48 88 +3389 name_3389 49 89 +3396 name_3396 26 96 +3397 name_3397 27 97 +3398 name_3398 28 98 +3399 name_3399 29 99 +3400 name_3400 30 50 +3401 name_3401 31 51 +3402 name_3402 32 52 +3403 name_3403 33 53 +3404 name_3404 34 54 +3405 name_3405 35 55 +3406 name_3406 36 56 +3407 name_3407 37 57 +3408 name_3408 38 58 +3409 name_3409 39 59 +3410 name_3410 40 60 +3411 name_3411 41 61 +3412 name_3412 42 62 +3413 name_3413 43 63 +3414 name_3414 44 64 +3415 name_3415 45 65 +3416 name_3416 46 66 +3417 name_3417 47 67 +3418 name_3418 48 68 +3419 name_3419 49 69 +3426 name_3426 26 76 +3427 name_3427 27 77 +3428 name_3428 28 78 +3429 name_3429 29 79 +3430 name_3430 30 80 +3431 name_3431 31 81 +3432 name_3432 32 82 +3433 name_3433 33 83 +3434 name_3434 34 84 +3435 name_3435 35 85 +3436 name_3436 36 86 +3437 name_3437 37 87 +3438 name_3438 38 88 +3439 name_3439 39 89 +3440 name_3440 40 90 +3441 name_3441 41 91 +3442 name_3442 42 92 +3443 name_3443 43 93 +3444 name_3444 44 94 +3445 name_3445 45 95 +3446 name_3446 46 96 +3447 name_3447 47 97 +3448 name_3448 48 98 +3449 name_3449 49 99 +3456 name_3456 26 56 +3457 name_3457 27 57 +3458 name_3458 28 58 +3459 name_3459 29 59 +3460 name_3460 30 60 +3461 name_3461 31 61 +3462 name_3462 32 62 +3463 name_3463 33 63 +3464 name_3464 34 64 +3465 name_3465 35 65 +3466 name_3466 36 66 +3467 name_3467 37 67 +3468 name_3468 38 68 +3469 name_3469 39 69 +3470 name_3470 40 70 +3471 name_3471 41 71 +3472 name_3472 42 72 +3473 name_3473 43 73 +3474 name_3474 44 74 +3475 name_3475 45 75 +3476 name_3476 46 76 +3477 name_3477 47 77 +3478 name_3478 48 78 +3479 name_3479 49 79 +3486 name_3486 26 86 +3487 name_3487 27 87 +3488 name_3488 28 88 +3489 name_3489 29 89 +3490 name_3490 30 90 +3491 name_3491 31 91 +3492 name_3492 32 92 +3493 name_3493 33 93 +3494 name_3494 34 94 +3495 name_3495 35 95 +3496 name_3496 36 96 +3497 name_3497 37 97 +3498 name_3498 38 98 +3499 name_3499 39 99 +3500 name_3500 40 50 +3501 name_3501 41 51 +3502 name_3502 42 52 +3503 name_3503 43 53 +3504 name_3504 44 54 +3505 name_3505 45 55 +3506 name_3506 46 56 +3507 name_3507 47 57 +3508 name_3508 48 58 +3509 name_3509 49 59 +3516 name_3516 26 66 +3517 name_3517 27 67 +3518 name_3518 28 68 +3519 name_3519 29 69 +3520 name_3520 30 70 +3521 name_3521 31 71 +3522 name_3522 32 72 +3523 name_3523 33 73 +3524 name_3524 34 74 +3525 name_3525 35 75 +3526 name_3526 36 76 +3527 name_3527 37 77 +3528 name_3528 38 78 +3529 name_3529 39 79 +3530 name_3530 40 80 +3531 name_3531 41 81 +3532 name_3532 42 82 +3533 name_3533 43 83 +3534 name_3534 44 84 +3535 name_3535 45 85 +3536 name_3536 46 86 +3537 name_3537 47 87 +3538 name_3538 48 88 +3539 name_3539 49 89 +3546 name_3546 26 96 +3547 name_3547 27 97 +3548 name_3548 28 98 +3549 name_3549 29 99 +3550 name_3550 30 50 +3551 name_3551 31 51 +3552 name_3552 32 52 +3553 name_3553 33 53 +3554 name_3554 34 54 +3555 name_3555 35 55 +3556 name_3556 36 56 +3557 name_3557 37 57 +3558 name_3558 38 58 +3559 name_3559 39 59 +3560 name_3560 40 60 +3561 name_3561 41 61 +3562 name_3562 42 62 +3563 name_3563 43 63 +3564 name_3564 44 64 +3565 name_3565 45 65 +3566 name_3566 46 66 +3567 name_3567 47 67 +3568 name_3568 48 68 +3569 name_3569 49 69 +3576 name_3576 26 76 +3577 name_3577 27 77 +3578 name_3578 28 78 +3579 name_3579 29 79 +3580 name_3580 30 80 +3581 name_3581 31 81 +3582 name_3582 32 82 +3583 name_3583 33 83 +3584 name_3584 34 84 +3585 name_3585 35 85 +3586 name_3586 36 86 +3587 name_3587 37 87 +3588 name_3588 38 88 +3589 name_3589 39 89 +3590 name_3590 40 90 +3591 name_3591 41 91 +3592 name_3592 42 92 +3593 name_3593 43 93 +3594 name_3594 44 94 +3595 name_3595 45 95 +3596 name_3596 46 96 +3597 name_3597 47 97 +3598 name_3598 48 98 +3599 name_3599 49 99 +3606 name_3606 26 56 +3607 name_3607 27 57 +3608 name_3608 28 58 +3609 name_3609 29 59 +3610 name_3610 30 60 +3611 name_3611 31 61 +3612 name_3612 32 62 +3613 name_3613 33 63 +3614 name_3614 34 64 +3615 name_3615 35 65 +3616 name_3616 36 66 +3617 name_3617 37 67 +3618 name_3618 38 68 +3619 name_3619 39 69 +3620 name_3620 40 70 +3621 name_3621 41 71 +3622 name_3622 42 72 +3623 name_3623 43 73 +3624 name_3624 44 74 +3625 name_3625 45 75 +3626 name_3626 46 76 +3627 name_3627 47 77 +3628 name_3628 48 78 +3629 name_3629 49 79 +3636 name_3636 26 86 +3637 name_3637 27 87 +3638 name_3638 28 88 +3639 name_3639 29 89 +3640 name_3640 30 90 +3641 name_3641 31 91 +3642 name_3642 32 92 +3643 name_3643 33 93 +3644 name_3644 34 94 +3645 name_3645 35 95 +3646 name_3646 36 96 +3647 name_3647 37 97 +3648 name_3648 38 98 +3649 name_3649 39 99 +3650 name_3650 40 50 +3651 name_3651 41 51 +3652 name_3652 42 52 +3653 name_3653 43 53 +3654 name_3654 44 54 +3655 name_3655 45 55 +3656 name_3656 46 56 +3657 name_3657 47 57 +3658 name_3658 48 58 +3659 name_3659 49 59 +3666 name_3666 26 66 +3667 name_3667 27 67 +3668 name_3668 28 68 +3669 name_3669 29 69 +3670 name_3670 30 70 +3671 name_3671 31 71 +3672 name_3672 32 72 +3673 name_3673 33 73 +3674 name_3674 34 74 +3675 name_3675 35 75 +3676 name_3676 36 76 +3677 name_3677 37 77 +3678 name_3678 38 78 +3679 name_3679 39 79 +3680 name_3680 40 80 +3681 name_3681 41 81 +3682 name_3682 42 82 +3683 name_3683 43 83 +3684 name_3684 44 84 +3685 name_3685 45 85 +3686 name_3686 46 86 +3687 name_3687 47 87 +3688 name_3688 48 88 +3689 name_3689 49 89 +3696 name_3696 26 96 +3697 name_3697 27 97 +3698 name_3698 28 98 +3699 name_3699 29 99 +3700 name_3700 30 50 +3701 name_3701 31 51 +3702 name_3702 32 52 +3703 name_3703 33 53 +3704 name_3704 34 54 +3705 name_3705 35 55 +3706 name_3706 36 56 +3707 name_3707 37 57 +3708 name_3708 38 58 +3709 name_3709 39 59 +3710 name_3710 40 60 +3711 name_3711 41 61 +3712 name_3712 42 62 +3713 name_3713 43 63 +3714 name_3714 44 64 +3715 name_3715 45 65 +3716 name_3716 46 66 +3717 name_3717 47 67 +3718 name_3718 48 68 +3719 name_3719 49 69 +3726 name_3726 26 76 +3727 name_3727 27 77 +3728 name_3728 28 78 +3729 name_3729 29 79 +3730 name_3730 30 80 +3731 name_3731 31 81 +3732 name_3732 32 82 +3733 name_3733 33 83 +3734 name_3734 34 84 +3735 name_3735 35 85 +3736 name_3736 36 86 +3737 name_3737 37 87 +3738 name_3738 38 88 +3739 name_3739 39 89 +3740 name_3740 40 90 +3741 name_3741 41 91 +3742 name_3742 42 92 +3743 name_3743 43 93 +3744 name_3744 44 94 +3745 name_3745 45 95 +3746 name_3746 46 96 +3747 name_3747 47 97 +3748 name_3748 48 98 +3749 name_3749 49 99 +3756 name_3756 26 56 +3757 name_3757 27 57 +3758 name_3758 28 58 +3759 name_3759 29 59 +3760 name_3760 30 60 +3761 name_3761 31 61 +3762 name_3762 32 62 +3763 name_3763 33 63 +3764 name_3764 34 64 +3765 name_3765 35 65 +3766 name_3766 36 66 +3767 name_3767 37 67 +3768 name_3768 38 68 +3769 name_3769 39 69 +3770 name_3770 40 70 +3771 name_3771 41 71 +3772 name_3772 42 72 +3773 name_3773 43 73 +3774 name_3774 44 74 +3775 name_3775 45 75 +3776 name_3776 46 76 +3777 name_3777 47 77 +3778 name_3778 48 78 +3779 name_3779 49 79 +3786 name_3786 26 86 +3787 name_3787 27 87 +3788 name_3788 28 88 +3789 name_3789 29 89 +3790 name_3790 30 90 +3791 name_3791 31 91 +3792 name_3792 32 92 +3793 name_3793 33 93 +3794 name_3794 34 94 +3795 name_3795 35 95 +3796 name_3796 36 96 +3797 name_3797 37 97 +3798 name_3798 38 98 +3799 name_3799 39 99 +3800 name_3800 40 50 +3801 name_3801 41 51 +3802 name_3802 42 52 +3803 name_3803 43 53 +3804 name_3804 44 54 +3805 name_3805 45 55 +3806 name_3806 46 56 +3807 name_3807 47 57 +3808 name_3808 48 58 +3809 name_3809 49 59 +3816 name_3816 26 66 +3817 name_3817 27 67 +3818 name_3818 28 68 +3819 name_3819 29 69 +3820 name_3820 30 70 +3821 name_3821 31 71 +3822 name_3822 32 72 +3823 name_3823 33 73 +3824 name_3824 34 74 +3825 name_3825 35 75 +3826 name_3826 36 76 +3827 name_3827 37 77 +3828 name_3828 38 78 +3829 name_3829 39 79 +3830 name_3830 40 80 +3831 name_3831 41 81 +3832 name_3832 42 82 +3833 name_3833 43 83 +3834 name_3834 44 84 +3835 name_3835 45 85 +3836 name_3836 46 86 +3837 name_3837 47 87 +3838 name_3838 48 88 +3839 name_3839 49 89 +3846 name_3846 26 96 +3847 name_3847 27 97 +3848 name_3848 28 98 +3849 name_3849 29 99 +3850 name_3850 30 50 +3851 name_3851 31 51 +3852 name_3852 32 52 +3853 name_3853 33 53 +3854 name_3854 34 54 +3855 name_3855 35 55 +3856 name_3856 36 56 +3857 name_3857 37 57 +3858 name_3858 38 58 +3859 name_3859 39 59 +3860 name_3860 40 60 +3861 name_3861 41 61 +3862 name_3862 42 62 +3863 name_3863 43 63 +3864 name_3864 44 64 +3865 name_3865 45 65 +3866 name_3866 46 66 +3867 name_3867 47 67 +3868 name_3868 48 68 +3869 name_3869 49 69 +3876 name_3876 26 76 +3877 name_3877 27 77 +3878 name_3878 28 78 +3879 name_3879 29 79 +3880 name_3880 30 80 +3881 name_3881 31 81 +3882 name_3882 32 82 +3883 name_3883 33 83 +3884 name_3884 34 84 +3885 name_3885 35 85 +3886 name_3886 36 86 +3887 name_3887 37 87 +3888 name_3888 38 88 +3889 name_3889 39 89 +3890 name_3890 40 90 +3891 name_3891 41 91 +3892 name_3892 42 92 +3893 name_3893 43 93 +3894 name_3894 44 94 +3895 name_3895 45 95 +3896 name_3896 46 96 +3897 name_3897 47 97 +3898 name_3898 48 98 +3899 name_3899 49 99 +3906 name_3906 26 56 +3907 name_3907 27 57 +3908 name_3908 28 58 +3909 name_3909 29 59 +3910 name_3910 30 60 +3911 name_3911 31 61 +3912 name_3912 32 62 +3913 name_3913 33 63 +3914 name_3914 34 64 +3915 name_3915 35 65 +3916 name_3916 36 66 +3917 name_3917 37 67 +3918 name_3918 38 68 +3919 name_3919 39 69 +3920 name_3920 40 70 +3921 name_3921 41 71 +3922 name_3922 42 72 +3923 name_3923 43 73 +3924 name_3924 44 74 +3925 name_3925 45 75 +3926 name_3926 46 76 +3927 name_3927 47 77 +3928 name_3928 48 78 +3929 name_3929 49 79 +3936 name_3936 26 86 +3937 name_3937 27 87 +3938 name_3938 28 88 +3939 name_3939 29 89 +3940 name_3940 30 90 +3941 name_3941 31 91 +3942 name_3942 32 92 +3943 name_3943 33 93 +3944 name_3944 34 94 +3945 name_3945 35 95 +3946 name_3946 36 96 +3947 name_3947 37 97 +3948 name_3948 38 98 +3949 name_3949 39 99 +3950 name_3950 40 50 +3951 name_3951 41 51 +3952 name_3952 42 52 +3953 name_3953 43 53 +3954 name_3954 44 54 +3955 name_3955 45 55 +3956 name_3956 46 56 +3957 name_3957 47 57 +3958 name_3958 48 58 +3959 name_3959 49 59 +3966 name_3966 26 66 +3967 name_3967 27 67 +3968 name_3968 28 68 +3969 name_3969 29 69 +3970 name_3970 30 70 +3971 name_3971 31 71 +3972 name_3972 32 72 +3973 name_3973 33 73 +3974 name_3974 34 74 +3975 name_3975 35 75 +3976 name_3976 36 76 +3977 name_3977 37 77 +3978 name_3978 38 78 +3979 name_3979 39 79 +3980 name_3980 40 80 +3981 name_3981 41 81 +3982 name_3982 42 82 +3983 name_3983 43 83 +3984 name_3984 44 84 +3985 name_3985 45 85 +3986 name_3986 46 86 +3987 name_3987 47 87 +3988 name_3988 48 88 +3989 name_3989 49 89 +3996 name_3996 26 96 +3997 name_3997 27 97 +3998 name_3998 28 98 +3999 name_3999 29 99 +4000 name_4000 30 50 +4001 name_4001 31 51 +4002 name_4002 32 52 +4003 name_4003 33 53 +4004 name_4004 34 54 +4005 name_4005 35 55 +4006 name_4006 36 56 +4007 name_4007 37 57 +4008 name_4008 38 58 +4009 name_4009 39 59 +4010 name_4010 40 60 +4011 name_4011 41 61 +4012 name_4012 42 62 +4013 name_4013 43 63 +4014 name_4014 44 64 +4015 name_4015 45 65 +4016 name_4016 46 66 +4017 name_4017 47 67 +4018 name_4018 48 68 +4019 name_4019 49 69 +4026 name_4026 26 76 +4027 name_4027 27 77 +4028 name_4028 28 78 +4029 name_4029 29 79 +4030 name_4030 30 80 +4031 name_4031 31 81 +4032 name_4032 32 82 +4033 name_4033 33 83 +4034 name_4034 34 84 +4035 name_4035 35 85 +4036 name_4036 36 86 +4037 name_4037 37 87 +4038 name_4038 38 88 +4039 name_4039 39 89 +4040 name_4040 40 90 +4041 name_4041 41 91 +4042 name_4042 42 92 +4043 name_4043 43 93 +4044 name_4044 44 94 +4045 name_4045 45 95 +4046 name_4046 46 96 +4047 name_4047 47 97 +4048 name_4048 48 98 +4049 name_4049 49 99 +4056 name_4056 26 56 +4057 name_4057 27 57 +4058 name_4058 28 58 +4059 name_4059 29 59 +4060 name_4060 30 60 +4061 name_4061 31 61 +4062 name_4062 32 62 +4063 name_4063 33 63 +4064 name_4064 34 64 +4065 name_4065 35 65 +4066 name_4066 36 66 +4067 name_4067 37 67 +4068 name_4068 38 68 +4069 name_4069 39 69 +4070 name_4070 40 70 +4071 name_4071 41 71 +4072 name_4072 42 72 +4073 name_4073 43 73 +4074 name_4074 44 74 +4075 name_4075 45 75 +4076 name_4076 46 76 +4077 name_4077 47 77 +4078 name_4078 48 78 +4079 name_4079 49 79 +4086 name_4086 26 86 +4087 name_4087 27 87 +4088 name_4088 28 88 +4089 name_4089 29 89 +4090 name_4090 30 90 +4091 name_4091 31 91 +4092 name_4092 32 92 +4093 name_4093 33 93 +4094 name_4094 34 94 +4095 name_4095 35 95 +4096 name_4096 36 96 +4097 name_4097 37 97 +4098 name_4098 38 98 +4099 name_4099 39 99 +4100 name_4100 40 50 +4101 name_4101 41 51 +4102 name_4102 42 52 +4103 name_4103 43 53 +4104 name_4104 44 54 +4105 name_4105 45 55 +4106 name_4106 46 56 +4107 name_4107 47 57 +4108 name_4108 48 58 +4109 name_4109 49 59 +4116 name_4116 26 66 +4117 name_4117 27 67 +4118 name_4118 28 68 +4119 name_4119 29 69 +4120 name_4120 30 70 +4121 name_4121 31 71 +4122 name_4122 32 72 +4123 name_4123 33 73 +4124 name_4124 34 74 +4125 name_4125 35 75 +4126 name_4126 36 76 +4127 name_4127 37 77 +4128 name_4128 38 78 +4129 name_4129 39 79 +4130 name_4130 40 80 +4131 name_4131 41 81 +4132 name_4132 42 82 +4133 name_4133 43 83 +4134 name_4134 44 84 +4135 name_4135 45 85 +4136 name_4136 46 86 +4137 name_4137 47 87 +4138 name_4138 48 88 +4139 name_4139 49 89 +4146 name_4146 26 96 +4147 name_4147 27 97 +4148 name_4148 28 98 +4149 name_4149 29 99 +4150 name_4150 30 50 +4151 name_4151 31 51 +4152 name_4152 32 52 +4153 name_4153 33 53 +4154 name_4154 34 54 +4155 name_4155 35 55 +4156 name_4156 36 56 +4157 name_4157 37 57 +4158 name_4158 38 58 +4159 name_4159 39 59 +4160 name_4160 40 60 +4161 name_4161 41 61 +4162 name_4162 42 62 +4163 name_4163 43 63 +4164 name_4164 44 64 +4165 name_4165 45 65 +4166 name_4166 46 66 +4167 name_4167 47 67 +4168 name_4168 48 68 +4169 name_4169 49 69 +4176 name_4176 26 76 +4177 name_4177 27 77 +4178 name_4178 28 78 +4179 name_4179 29 79 +4180 name_4180 30 80 +4181 name_4181 31 81 +4182 name_4182 32 82 +4183 name_4183 33 83 +4184 name_4184 34 84 +4185 name_4185 35 85 +4186 name_4186 36 86 +4187 name_4187 37 87 +4188 name_4188 38 88 +4189 name_4189 39 89 +4190 name_4190 40 90 +4191 name_4191 41 91 +4192 name_4192 42 92 +4193 name_4193 43 93 +4194 name_4194 44 94 +4195 name_4195 45 95 +4196 name_4196 46 96 +4197 name_4197 47 97 +4198 name_4198 48 98 +4199 name_4199 49 99 +4206 name_4206 26 56 +4207 name_4207 27 57 +4208 name_4208 28 58 +4209 name_4209 29 59 +4210 name_4210 30 60 +4211 name_4211 31 61 +4212 name_4212 32 62 +4213 name_4213 33 63 +4214 name_4214 34 64 +4215 name_4215 35 65 +4216 name_4216 36 66 +4217 name_4217 37 67 +4218 name_4218 38 68 +4219 name_4219 39 69 +4220 name_4220 40 70 +4221 name_4221 41 71 +4222 name_4222 42 72 +4223 name_4223 43 73 +4224 name_4224 44 74 +4225 name_4225 45 75 +4226 name_4226 46 76 +4227 name_4227 47 77 +4228 name_4228 48 78 +4229 name_4229 49 79 +4236 name_4236 26 86 +4237 name_4237 27 87 +4238 name_4238 28 88 +4239 name_4239 29 89 +4240 name_4240 30 90 +4241 name_4241 31 91 +4242 name_4242 32 92 +4243 name_4243 33 93 +4244 name_4244 34 94 +4245 name_4245 35 95 +4246 name_4246 36 96 +4247 name_4247 37 97 +4248 name_4248 38 98 +4249 name_4249 39 99 +4250 name_4250 40 50 +4251 name_4251 41 51 +4252 name_4252 42 52 +4253 name_4253 43 53 +4254 name_4254 44 54 +4255 name_4255 45 55 +4256 name_4256 46 56 +4257 name_4257 47 57 +4258 name_4258 48 58 +4259 name_4259 49 59 +4266 name_4266 26 66 +4267 name_4267 27 67 +4268 name_4268 28 68 +4269 name_4269 29 69 +4270 name_4270 30 70 +4271 name_4271 31 71 +4272 name_4272 32 72 +4273 name_4273 33 73 +4274 name_4274 34 74 +4275 name_4275 35 75 +4276 name_4276 36 76 +4277 name_4277 37 77 +4278 name_4278 38 78 +4279 name_4279 39 79 +4280 name_4280 40 80 +4281 name_4281 41 81 +4282 name_4282 42 82 +4283 name_4283 43 83 +4284 name_4284 44 84 +4285 name_4285 45 85 +4286 name_4286 46 86 +4287 name_4287 47 87 +4288 name_4288 48 88 +4289 name_4289 49 89 +4296 name_4296 26 96 +4297 name_4297 27 97 +4298 name_4298 28 98 +4299 name_4299 29 99 +4300 name_4300 30 50 +4301 name_4301 31 51 +4302 name_4302 32 52 +4303 name_4303 33 53 +4304 name_4304 34 54 +4305 name_4305 35 55 +4306 name_4306 36 56 +4307 name_4307 37 57 +4308 name_4308 38 58 +4309 name_4309 39 59 +4310 name_4310 40 60 +4311 name_4311 41 61 +4312 name_4312 42 62 +4313 name_4313 43 63 +4314 name_4314 44 64 +4315 name_4315 45 65 +4316 name_4316 46 66 +4317 name_4317 47 67 +4318 name_4318 48 68 +4319 name_4319 49 69 +4326 name_4326 26 76 +4327 name_4327 27 77 +4328 name_4328 28 78 +4329 name_4329 29 79 +4330 name_4330 30 80 +4331 name_4331 31 81 +4332 name_4332 32 82 +4333 name_4333 33 83 +4334 name_4334 34 84 +4335 name_4335 35 85 +4336 name_4336 36 86 +4337 name_4337 37 87 +4338 name_4338 38 88 +4339 name_4339 39 89 +4340 name_4340 40 90 +4341 name_4341 41 91 +4342 name_4342 42 92 +4343 name_4343 43 93 +4344 name_4344 44 94 +4345 name_4345 45 95 +4346 name_4346 46 96 +4347 name_4347 47 97 +4348 name_4348 48 98 +4349 name_4349 49 99 +4356 name_4356 26 56 +4357 name_4357 27 57 +4358 name_4358 28 58 +4359 name_4359 29 59 +4360 name_4360 30 60 +4361 name_4361 31 61 +4362 name_4362 32 62 +4363 name_4363 33 63 +4364 name_4364 34 64 +4365 name_4365 35 65 +4366 name_4366 36 66 +4367 name_4367 37 67 +4368 name_4368 38 68 +4369 name_4369 39 69 +4370 name_4370 40 70 +4371 name_4371 41 71 +4372 name_4372 42 72 +4373 name_4373 43 73 +4374 name_4374 44 74 +4375 name_4375 45 75 +4376 name_4376 46 76 +4377 name_4377 47 77 +4378 name_4378 48 78 +4379 name_4379 49 79 +4386 name_4386 26 86 +4387 name_4387 27 87 +4388 name_4388 28 88 +4389 name_4389 29 89 +4390 name_4390 30 90 +4391 name_4391 31 91 +4392 name_4392 32 92 +4393 name_4393 33 93 +4394 name_4394 34 94 +4395 name_4395 35 95 +4396 name_4396 36 96 +4397 name_4397 37 97 +4398 name_4398 38 98 +4399 name_4399 39 99 +4400 name_4400 40 50 +4401 name_4401 41 51 +4402 name_4402 42 52 +4403 name_4403 43 53 +4404 name_4404 44 54 +4405 name_4405 45 55 +4406 name_4406 46 56 +4407 name_4407 47 57 +4408 name_4408 48 58 +4409 name_4409 49 59 +4416 name_4416 26 66 +4417 name_4417 27 67 +4418 name_4418 28 68 +4419 name_4419 29 69 +4420 name_4420 30 70 +4421 name_4421 31 71 +4422 name_4422 32 72 +4423 name_4423 33 73 +4424 name_4424 34 74 +4425 name_4425 35 75 +4426 name_4426 36 76 +4427 name_4427 37 77 +4428 name_4428 38 78 +4429 name_4429 39 79 +4430 name_4430 40 80 +4431 name_4431 41 81 +4432 name_4432 42 82 +4433 name_4433 43 83 +4434 name_4434 44 84 +4435 name_4435 45 85 +4436 name_4436 46 86 +4437 name_4437 47 87 +4438 name_4438 48 88 +4439 name_4439 49 89 +4446 name_4446 26 96 +4447 name_4447 27 97 +4448 name_4448 28 98 +4449 name_4449 29 99 +4450 name_4450 30 50 +4451 name_4451 31 51 +4452 name_4452 32 52 +4453 name_4453 33 53 +4454 name_4454 34 54 +4455 name_4455 35 55 +4456 name_4456 36 56 +4457 name_4457 37 57 +4458 name_4458 38 58 +4459 name_4459 39 59 +4460 name_4460 40 60 +4461 name_4461 41 61 +4462 name_4462 42 62 +4463 name_4463 43 63 +4464 name_4464 44 64 +4465 name_4465 45 65 +4466 name_4466 46 66 +4467 name_4467 47 67 +4468 name_4468 48 68 +4469 name_4469 49 69 +4476 name_4476 26 76 +4477 name_4477 27 77 +4478 name_4478 28 78 +4479 name_4479 29 79 +4480 name_4480 30 80 +4481 name_4481 31 81 +4482 name_4482 32 82 +4483 name_4483 33 83 +4484 name_4484 34 84 +4485 name_4485 35 85 +4486 name_4486 36 86 +4487 name_4487 37 87 +4488 name_4488 38 88 +4489 name_4489 39 89 +4490 name_4490 40 90 +4491 name_4491 41 91 +4492 name_4492 42 92 +4493 name_4493 43 93 +4494 name_4494 44 94 +4495 name_4495 45 95 +4496 name_4496 46 96 +4497 name_4497 47 97 +4498 name_4498 48 98 +4499 name_4499 49 99 +4506 name_4506 26 56 +4507 name_4507 27 57 +4508 name_4508 28 58 +4509 name_4509 29 59 +4510 name_4510 30 60 +4511 name_4511 31 61 +4512 name_4512 32 62 +4513 name_4513 33 63 +4514 name_4514 34 64 +4515 name_4515 35 65 +4516 name_4516 36 66 +4517 name_4517 37 67 +4518 name_4518 38 68 +4519 name_4519 39 69 +4520 name_4520 40 70 +4521 name_4521 41 71 +4522 name_4522 42 72 +4523 name_4523 43 73 +4524 name_4524 44 74 +4525 name_4525 45 75 +4526 name_4526 46 76 +4527 name_4527 47 77 +4528 name_4528 48 78 +4529 name_4529 49 79 +4536 name_4536 26 86 +4537 name_4537 27 87 +4538 name_4538 28 88 +4539 name_4539 29 89 +4540 name_4540 30 90 +4541 name_4541 31 91 +4542 name_4542 32 92 +4543 name_4543 33 93 +4544 name_4544 34 94 +4545 name_4545 35 95 +4546 name_4546 36 96 +4547 name_4547 37 97 +4548 name_4548 38 98 +4549 name_4549 39 99 +4550 name_4550 40 50 +4551 name_4551 41 51 +4552 name_4552 42 52 +4553 name_4553 43 53 +4554 name_4554 44 54 +4555 name_4555 45 55 +4556 name_4556 46 56 +4557 name_4557 47 57 +4558 name_4558 48 58 +4559 name_4559 49 59 +4566 name_4566 26 66 +4567 name_4567 27 67 +4568 name_4568 28 68 +4569 name_4569 29 69 +4570 name_4570 30 70 +4571 name_4571 31 71 +4572 name_4572 32 72 +4573 name_4573 33 73 +4574 name_4574 34 74 +4575 name_4575 35 75 +4576 name_4576 36 76 +4577 name_4577 37 77 +4578 name_4578 38 78 +4579 name_4579 39 79 +4580 name_4580 40 80 +4581 name_4581 41 81 +4582 name_4582 42 82 +4583 name_4583 43 83 +4584 name_4584 44 84 +4585 name_4585 45 85 +4586 name_4586 46 86 +4587 name_4587 47 87 +4588 name_4588 48 88 +4589 name_4589 49 89 +4596 name_4596 26 96 +4597 name_4597 27 97 +4598 name_4598 28 98 +4599 name_4599 29 99 +4600 name_4600 30 50 +4601 name_4601 31 51 +4602 name_4602 32 52 +4603 name_4603 33 53 +4604 name_4604 34 54 +4605 name_4605 35 55 +4606 name_4606 36 56 +4607 name_4607 37 57 +4608 name_4608 38 58 +4609 name_4609 39 59 +4610 name_4610 40 60 +4611 name_4611 41 61 +4612 name_4612 42 62 +4613 name_4613 43 63 +4614 name_4614 44 64 +4615 name_4615 45 65 +4616 name_4616 46 66 +4617 name_4617 47 67 +4618 name_4618 48 68 +4619 name_4619 49 69 +4626 name_4626 26 76 +4627 name_4627 27 77 +4628 name_4628 28 78 +4629 name_4629 29 79 +4630 name_4630 30 80 +4631 name_4631 31 81 +4632 name_4632 32 82 +4633 name_4633 33 83 +4634 name_4634 34 84 +4635 name_4635 35 85 +4636 name_4636 36 86 +4637 name_4637 37 87 +4638 name_4638 38 88 +4639 name_4639 39 89 +4640 name_4640 40 90 +4641 name_4641 41 91 +4642 name_4642 42 92 +4643 name_4643 43 93 +4644 name_4644 44 94 +4645 name_4645 45 95 +4646 name_4646 46 96 +4647 name_4647 47 97 +4648 name_4648 48 98 +4649 name_4649 49 99 +4656 name_4656 26 56 +4657 name_4657 27 57 +4658 name_4658 28 58 +4659 name_4659 29 59 +4660 name_4660 30 60 +4661 name_4661 31 61 +4662 name_4662 32 62 +4663 name_4663 33 63 +4664 name_4664 34 64 +4665 name_4665 35 65 +4666 name_4666 36 66 +4667 name_4667 37 67 +4668 name_4668 38 68 +4669 name_4669 39 69 +4670 name_4670 40 70 +4671 name_4671 41 71 +4672 name_4672 42 72 +4673 name_4673 43 73 +4674 name_4674 44 74 +4675 name_4675 45 75 +4676 name_4676 46 76 +4677 name_4677 47 77 +4678 name_4678 48 78 +4679 name_4679 49 79 +4686 name_4686 26 86 +4687 name_4687 27 87 +4688 name_4688 28 88 +4689 name_4689 29 89 +4690 name_4690 30 90 +4691 name_4691 31 91 +4692 name_4692 32 92 +4693 name_4693 33 93 +4694 name_4694 34 94 +4695 name_4695 35 95 +4696 name_4696 36 96 +4697 name_4697 37 97 +4698 name_4698 38 98 +4699 name_4699 39 99 +4700 name_4700 40 50 +4701 name_4701 41 51 +4702 name_4702 42 52 +4703 name_4703 43 53 +4704 name_4704 44 54 +4705 name_4705 45 55 +4706 name_4706 46 56 +4707 name_4707 47 57 +4708 name_4708 48 58 +4709 name_4709 49 59 +4716 name_4716 26 66 +4717 name_4717 27 67 +4718 name_4718 28 68 +4719 name_4719 29 69 +4720 name_4720 30 70 +4721 name_4721 31 71 +4722 name_4722 32 72 +4723 name_4723 33 73 +4724 name_4724 34 74 +4725 name_4725 35 75 +4726 name_4726 36 76 +4727 name_4727 37 77 +4728 name_4728 38 78 +4729 name_4729 39 79 +4730 name_4730 40 80 +4731 name_4731 41 81 +4732 name_4732 42 82 +4733 name_4733 43 83 +4734 name_4734 44 84 +4735 name_4735 45 85 +4736 name_4736 46 86 +4737 name_4737 47 87 +4738 name_4738 48 88 +4739 name_4739 49 89 +4746 name_4746 26 96 +4747 name_4747 27 97 +4748 name_4748 28 98 +4749 name_4749 29 99 +4750 name_4750 30 50 +4751 name_4751 31 51 +4752 name_4752 32 52 +4753 name_4753 33 53 +4754 name_4754 34 54 +4755 name_4755 35 55 +4756 name_4756 36 56 +4757 name_4757 37 57 +4758 name_4758 38 58 +4759 name_4759 39 59 +4760 name_4760 40 60 +4761 name_4761 41 61 +4762 name_4762 42 62 +4763 name_4763 43 63 +4764 name_4764 44 64 +4765 name_4765 45 65 +4766 name_4766 46 66 +4767 name_4767 47 67 +4768 name_4768 48 68 +4769 name_4769 49 69 +4776 name_4776 26 76 +4777 name_4777 27 77 +4778 name_4778 28 78 +4779 name_4779 29 79 +4780 name_4780 30 80 +4781 name_4781 31 81 +4782 name_4782 32 82 +4783 name_4783 33 83 +4784 name_4784 34 84 +4785 name_4785 35 85 +4786 name_4786 36 86 +4787 name_4787 37 87 +4788 name_4788 38 88 +4789 name_4789 39 89 +4790 name_4790 40 90 +4791 name_4791 41 91 +4792 name_4792 42 92 +4793 name_4793 43 93 +4794 name_4794 44 94 +4795 name_4795 45 95 +4796 name_4796 46 96 +4797 name_4797 47 97 +4798 name_4798 48 98 +4799 name_4799 49 99 +4806 name_4806 26 56 +4807 name_4807 27 57 +4808 name_4808 28 58 +4809 name_4809 29 59 +4810 name_4810 30 60 +4811 name_4811 31 61 +4812 name_4812 32 62 +4813 name_4813 33 63 +4814 name_4814 34 64 +4815 name_4815 35 65 +4816 name_4816 36 66 +4817 name_4817 37 67 +4818 name_4818 38 68 +4819 name_4819 39 69 +4820 name_4820 40 70 +4821 name_4821 41 71 +4822 name_4822 42 72 +4823 name_4823 43 73 +4824 name_4824 44 74 +4825 name_4825 45 75 +4826 name_4826 46 76 +4827 name_4827 47 77 +4828 name_4828 48 78 +4829 name_4829 49 79 +4836 name_4836 26 86 +4837 name_4837 27 87 +4838 name_4838 28 88 +4839 name_4839 29 89 +4840 name_4840 30 90 +4841 name_4841 31 91 +4842 name_4842 32 92 +4843 name_4843 33 93 +4844 name_4844 34 94 +4845 name_4845 35 95 +4846 name_4846 36 96 +4847 name_4847 37 97 +4848 name_4848 38 98 +4849 name_4849 39 99 +4850 name_4850 40 50 +4851 name_4851 41 51 +4852 name_4852 42 52 +4853 name_4853 43 53 +4854 name_4854 44 54 +4855 name_4855 45 55 +4856 name_4856 46 56 +4857 name_4857 47 57 +4858 name_4858 48 58 +4859 name_4859 49 59 +4866 name_4866 26 66 +4867 name_4867 27 67 +4868 name_4868 28 68 +4869 name_4869 29 69 +4870 name_4870 30 70 +4871 name_4871 31 71 +4872 name_4872 32 72 +4873 name_4873 33 73 +4874 name_4874 34 74 +4875 name_4875 35 75 +4876 name_4876 36 76 +4877 name_4877 37 77 +4878 name_4878 38 78 +4879 name_4879 39 79 +4880 name_4880 40 80 +4881 name_4881 41 81 +4882 name_4882 42 82 +4883 name_4883 43 83 +4884 name_4884 44 84 +4885 name_4885 45 85 +4886 name_4886 46 86 +4887 name_4887 47 87 +4888 name_4888 48 88 +4889 name_4889 49 89 +4896 name_4896 26 96 +4897 name_4897 27 97 +4898 name_4898 28 98 +4899 name_4899 29 99 +4900 name_4900 30 50 +4901 name_4901 31 51 +4902 name_4902 32 52 +4903 name_4903 33 53 +4904 name_4904 34 54 +4905 name_4905 35 55 +4906 name_4906 36 56 +4907 name_4907 37 57 +4908 name_4908 38 58 +4909 name_4909 39 59 +4910 name_4910 40 60 +4911 name_4911 41 61 +4912 name_4912 42 62 +4913 name_4913 43 63 +4914 name_4914 44 64 +4915 name_4915 45 65 +4916 name_4916 46 66 +4917 name_4917 47 67 +4918 name_4918 48 68 +4919 name_4919 49 69 +4926 name_4926 26 76 +4927 name_4927 27 77 +4928 name_4928 28 78 +4929 name_4929 29 79 +4930 name_4930 30 80 +4931 name_4931 31 81 +4932 name_4932 32 82 +4933 name_4933 33 83 +4934 name_4934 34 84 +4935 name_4935 35 85 +4936 name_4936 36 86 +4937 name_4937 37 87 +4938 name_4938 38 88 +4939 name_4939 39 89 +4940 name_4940 40 90 +4941 name_4941 41 91 +4942 name_4942 42 92 +4943 name_4943 43 93 +4944 name_4944 44 94 +4945 name_4945 45 95 +4946 name_4946 46 96 +4947 name_4947 47 97 +4948 name_4948 48 98 +4949 name_4949 49 99 +4956 name_4956 26 56 +4957 name_4957 27 57 +4958 name_4958 28 58 +4959 name_4959 29 59 +4960 name_4960 30 60 +4961 name_4961 31 61 +4962 name_4962 32 62 +4963 name_4963 33 63 +4964 name_4964 34 64 +4965 name_4965 35 65 +4966 name_4966 36 66 +4967 name_4967 37 67 +4968 name_4968 38 68 +4969 name_4969 39 69 +4970 name_4970 40 70 +4971 name_4971 41 71 +4972 name_4972 42 72 +4973 name_4973 43 73 +4974 name_4974 44 74 +4975 name_4975 45 75 +4976 name_4976 46 76 +4977 name_4977 47 77 +4978 name_4978 48 78 +4979 name_4979 49 79 +4986 name_4986 26 86 +4987 name_4987 27 87 +4988 name_4988 28 88 +4989 name_4989 29 89 +4990 name_4990 30 90 +4991 name_4991 31 91 +4992 name_4992 32 92 +4993 name_4993 33 93 +4994 name_4994 34 94 +4995 name_4995 35 95 +4996 name_4996 36 96 +4997 name_4997 37 97 +4998 name_4998 38 98 +4999 name_4999 39 99 + diff --git a/regression-test/suites/external_table_p0/cache/condition_cache_orc.groovy b/regression-test/suites/external_table_p0/cache/condition_cache_orc.groovy new file mode 100644 index 00000000000000..92720096eccf6c --- /dev/null +++ b/regression-test/suites/external_table_p0/cache/condition_cache_orc.groovy @@ -0,0 +1,297 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you 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. + +suite("condition_cache_orc", "tvf,external,external_docker") { + + List> backends = sql """ show backends """ + assertTrue(backends.size() > 0) + def be_id = backends[0][0] + def be_host = backends[0][1] + def basePath = "/tmp/test_condition_cache_orc" + + sshExec("root", be_host, "rm -rf ${basePath}", false) + sshExec("root", be_host, "mkdir -p ${basePath}") + sshExec("root", be_host, "chmod 777 ${basePath}") + + // ============ Source tables ============ + + def srcTable = "cc_ext_src" + def joinSrcTable = "cc_ext_join_src" + def largeSrcTable = "cc_ext_large_src" + + sql """ DROP TABLE IF EXISTS ${srcTable} """ + sql """ + CREATE TABLE ${srcTable} ( + `id` int NULL, + `name` varchar(50) NULL, + `age` int NULL, + `score` double NULL + ) DISTRIBUTED BY HASH(`id`) BUCKETS 1 + PROPERTIES ("replication_num" = "1") + """ + + sql """ + INSERT INTO ${srcTable}(id, name, age, score) VALUES + (1, 'Alice', 25, 85.5), + (2, 'Bob', 30, 90.0), + (3, 'Charlie', 22, 75.5), + (4, 'David', 28, 92.0), + (5, 'Eve', 26, 88.0) + """ + + sql """ DROP TABLE IF EXISTS ${joinSrcTable} """ + sql """ + CREATE TABLE ${joinSrcTable} ( + `id` int NULL, + `department` varchar(50) NULL, + `position` varchar(50) NULL, + `salary` double NULL + ) DISTRIBUTED BY HASH(`id`) BUCKETS 1 + PROPERTIES ("replication_num" = "1") + """ + + sql """ + INSERT INTO ${joinSrcTable}(id, department, position, salary) VALUES + (1, 'Engineering', 'Developer', 100000), + (2, 'Marketing', 'Manager', 120000), + (3, 'HR', 'Specialist', 80000), + (4, 'Engineering', 'Senior Developer', 140000), + (5, 'Finance', 'Analyst', 95000) + """ + + // Large table for LIMIT test: 5000 rows spanning multiple granules (GRANULE_SIZE=2048) + sql """ DROP TABLE IF EXISTS ${largeSrcTable} """ + sql """ + CREATE TABLE ${largeSrcTable} ( + `id` int NULL, + `name` varchar(50) NULL, + `age` int NULL, + `score` double NULL + ) DISTRIBUTED BY HASH(`id`) BUCKETS 1 + PROPERTIES ("replication_num" = "1") + """ + + sql """ + INSERT INTO ${largeSrcTable} + SELECT + cast(number AS INT), + concat('name_', cast(number AS VARCHAR(20))), + cast(20 + (number % 30) AS INT), + cast(50.0 + (number % 50) AS DOUBLE) + FROM numbers("number" = "5000") + """ + + def fmt = "orc" + // Export data to format + sshExec("root", be_host, "rm -f ${basePath}/${fmt}_main_*") + sql """ + INSERT INTO local( + "file_path" = "${basePath}/${fmt}_main_", + "backend_id" = "${be_id}", + "format" = "${fmt}" + ) SELECT id, name, age, score FROM ${srcTable} ORDER BY id + """ + + sshExec("root", be_host, "rm -f ${basePath}/${fmt}_join_*") + sql """ + INSERT INTO local( + "file_path" = "${basePath}/${fmt}_join_", + "backend_id" = "${be_id}", + "format" = "${fmt}" + ) SELECT id, department, position, salary FROM ${joinSrcTable} ORDER BY id + """ + + sshExec("root", be_host, "rm -f ${basePath}/${fmt}_large_*") + sql """ + INSERT INTO local( + "file_path" = "${basePath}/${fmt}_large_", + "backend_id" = "${be_id}", + "format" = "${fmt}" + ) SELECT id, name, age, score FROM ${largeSrcTable} ORDER BY id + """ + + def mainTvf = """local( + "file_path" = "${basePath}/${fmt}_main_*", + "backend_id" = "${be_id}", + "format" = "${fmt}")""" + + def joinTvf = """local( + "file_path" = "${basePath}/${fmt}_join_*", + "backend_id" = "${be_id}", + "format" = "${fmt}")""" + + def largeTvf = """local( + "file_path" = "${basePath}/${fmt}_large_*", + "backend_id" = "${be_id}", + "format" = "${fmt}")""" + + // ---- Test 1: Basic predicate, no cache (baseline) ---- + sql "set enable_condition_cache=false" + sql "set runtime_filter_type=0" + + qt_condition_cache0 """ + SELECT id, name, age, score FROM ${mainTvf} + WHERE age > 25 AND score > 85 ORDER BY 1, 2, 3, 4; + """ + + qt_condition_cache1 """ + SELECT id, name, age, score FROM ${mainTvf} + WHERE name LIKE 'A%' OR score < 80 ORDER BY 1, 2, 3, 4; + """ + + // ---- Test 2: Enable cache, same queries (MISS → populate) ---- + sql "set enable_condition_cache=true" + + qt_condition_cache2 """ + SELECT id, name, age, score FROM ${mainTvf} + WHERE age > 25 AND score > 85 ORDER BY 1, 2, 3, 4; + """ + + qt_condition_cache3 """ + SELECT id, name, age, score FROM ${mainTvf} + WHERE name LIKE 'A%' OR score < 80 ORDER BY 1, 2, 3, 4; + """ + + // ---- Test 3: Same queries again (HIT → verify) ---- + qt_condition_cache4 """ + SELECT id, name, age, score FROM ${mainTvf} + WHERE age > 25 AND score > 85 ORDER BY 1, 2, 3, 4; + """ + + qt_condition_cache5 """ + SELECT id, name, age, score FROM ${mainTvf} + WHERE name LIKE 'A%' OR score < 80 ORDER BY 1, 2, 3, 4; + """ + + // ---- Test 4: Join with bloom filter runtime filter ---- + // First, disable condition cache and reset runtime_filter + sql "set enable_condition_cache=false" + sql "set runtime_filter_type=2" + + // Run join query without condition cache + qt_condition_cache_join0 """ + SELECT t1.id, t1.name, t1.age, t2.department, t2.position + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + WHERE t1.age > 25 AND t2.salary > 90000 + ORDER BY 1, 2, 3, 4, 5 + """ + // Bob(30,Marketing,120000), David(28,Engineering,140000), Eve(26,Finance,95000) + + // Enable condition cache with bloom filter runtime_filter + sql "set enable_condition_cache=true" + qt_condition_cache_join1 """ + SELECT t1.id, t1.name, t1.age, t2.department, t2.position + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + WHERE t1.age > 25 AND t2.salary > 90000 + ORDER BY 1, 2, 3, 4, 5 + """ + + // Run again for cache hit + qt_condition_cache_join2 """ + SELECT t1.id, t1.name, t1.age, t2.department, t2.position + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + WHERE t1.age > 25 AND t2.salary > 90000 + ORDER BY 1, 2, 3, 4, 5 + """ + + // Run the same join query with condition cache enabled and expr in bloom filter + qt_condition_cache_join3 """ + SELECT t1.id, t1.name, t1.age, t2.department, t2.position + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + 1 + ORDER BY 1, 2, 3, 4, 5 + """ + // Run the same join query with condition cache enabled and expr different in bloom filter + qt_condition_cache_join4 """ + SELECT t1.id, t1.name, t1.age, t2.department, t2.position + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + 1 + ORDER BY 1, 2, 3, 4, 5 + """ + + // ---- Test 5: Join with different runtime_filter_type ---- + sql "set runtime_filter_type=12" + + // Run the same join query again after changing runtime_filter_type + qt_condition_cache_join5 """ + SELECT t1.id, t1.name, t1.age, t2.department, t2.position + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + WHERE t1.age > 25 AND t2.salary > 90000 + ORDER BY 1, 2, 3, 4, 5 + """ + + // ---- Test 6: Different join condition ---- + qt_condition_cache_join6 """ + SELECT t1.id, t1.name, t2.department, t2.salary + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + WHERE t1.score > 85 AND t2.department = 'Engineering' + ORDER BY 1, 2, 3, 4 + """ + // id=1: Alice(85.5)+Engineering(100000), id=4: David(92)+Engineering(140000) + + // ---- Test 7: LIMIT with large file (verify incomplete cache not stored) ---- + // Large table has 5000 rows spanning multiple granules. + // age > 25 matches ~4000 rows. LIMIT 10 causes early termination. + // The incomplete cache must NOT be stored; otherwise the subsequent + // full query would skip unread granules and return fewer rows. + sql "set runtime_filter_type=0" + + qt_condition_cache_limit0 """ + SELECT id, name, age, score FROM ${largeTvf} + WHERE age > 25 + ORDER BY 1, 2, 3, 4 LIMIT 10 + """ + // assertTrue("${fmt}: limit query should return exactly 10 rows", limitResult.size() == 10) + + // Run LIMIT again — result must be identical + qt_condition_cache_limit1 """ + SELECT id, name, age, score FROM ${largeTvf} + WHERE age > 25 + ORDER BY 1, 2, 3, 4 LIMIT 10 + """ + + // Full query without LIMIT — must return ALL matching rows, not just + // the granules that happened to be read during the LIMIT scan + qt_condition_cache_limit2 """ + SELECT id, name, age, score FROM ${largeTvf} + WHERE age > 25 + ORDER BY 1, 2, 3, 4 + """ + // age = 20 + (number % 30), age > 25 means number % 30 in [6..29] → 24/30 of rows + // assertTrue("${fmt}: full query should return ~4000 rows, got ${fullResult.size()}", + // fullResult.size() > 3900) + + // Run full query again (cache HIT from the full scan above) + qt_condition_cache_limit3 """ + SELECT id, name, age, score FROM ${largeTvf} + WHERE age > 25 + ORDER BY 1, 2, 3, 4 + """ + // assertEquals(fullResult, fullHit) + + // ============ Cleanup ============ + + // sql """ DROP TABLE IF EXISTS ${srcTable} """ + // sql """ DROP TABLE IF EXISTS ${joinSrcTable} """ + // sql """ DROP TABLE IF EXISTS ${largeSrcTable} """ + // sshExec("root", be_host, "rm -rf ${basePath}", false) +} diff --git a/regression-test/suites/external_table_p0/cache/condition_cache_parquet.groovy b/regression-test/suites/external_table_p0/cache/condition_cache_parquet.groovy new file mode 100644 index 00000000000000..fbd58e15dc7fb1 --- /dev/null +++ b/regression-test/suites/external_table_p0/cache/condition_cache_parquet.groovy @@ -0,0 +1,297 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you 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. + +suite("condition_cache_parquet", "tvf,external,external_docker") { + + List> backends = sql """ show backends """ + assertTrue(backends.size() > 0) + def be_id = backends[0][0] + def be_host = backends[0][1] + def basePath = "/tmp/test_condition_cache_parquet" + + sshExec("root", be_host, "rm -rf ${basePath}", false) + sshExec("root", be_host, "mkdir -p ${basePath}") + sshExec("root", be_host, "chmod 777 ${basePath}") + + // ============ Source tables ============ + + def srcTable = "cc_ext_src" + def joinSrcTable = "cc_ext_join_src" + def largeSrcTable = "cc_ext_large_src" + + sql """ DROP TABLE IF EXISTS ${srcTable} """ + sql """ + CREATE TABLE ${srcTable} ( + `id` int NULL, + `name` varchar(50) NULL, + `age` int NULL, + `score` double NULL + ) DISTRIBUTED BY HASH(`id`) BUCKETS 1 + PROPERTIES ("replication_num" = "1") + """ + + sql """ + INSERT INTO ${srcTable}(id, name, age, score) VALUES + (1, 'Alice', 25, 85.5), + (2, 'Bob', 30, 90.0), + (3, 'Charlie', 22, 75.5), + (4, 'David', 28, 92.0), + (5, 'Eve', 26, 88.0) + """ + + sql """ DROP TABLE IF EXISTS ${joinSrcTable} """ + sql """ + CREATE TABLE ${joinSrcTable} ( + `id` int NULL, + `department` varchar(50) NULL, + `position` varchar(50) NULL, + `salary` double NULL + ) DISTRIBUTED BY HASH(`id`) BUCKETS 1 + PROPERTIES ("replication_num" = "1") + """ + + sql """ + INSERT INTO ${joinSrcTable}(id, department, position, salary) VALUES + (1, 'Engineering', 'Developer', 100000), + (2, 'Marketing', 'Manager', 120000), + (3, 'HR', 'Specialist', 80000), + (4, 'Engineering', 'Senior Developer', 140000), + (5, 'Finance', 'Analyst', 95000) + """ + + // Large table for LIMIT test: 5000 rows spanning multiple granules (GRANULE_SIZE=2048) + sql """ DROP TABLE IF EXISTS ${largeSrcTable} """ + sql """ + CREATE TABLE ${largeSrcTable} ( + `id` int NULL, + `name` varchar(50) NULL, + `age` int NULL, + `score` double NULL + ) DISTRIBUTED BY HASH(`id`) BUCKETS 1 + PROPERTIES ("replication_num" = "1") + """ + + sql """ + INSERT INTO ${largeSrcTable} + SELECT + cast(number AS INT), + concat('name_', cast(number AS VARCHAR(20))), + cast(20 + (number % 30) AS INT), + cast(50.0 + (number % 50) AS DOUBLE) + FROM numbers("number" = "5000") + """ + + def fmt = "parquet" + // Export data to format + sshExec("root", be_host, "rm -f ${basePath}/${fmt}_main_*") + sql """ + INSERT INTO local( + "file_path" = "${basePath}/${fmt}_main_", + "backend_id" = "${be_id}", + "format" = "${fmt}" + ) SELECT id, name, age, score FROM ${srcTable} ORDER BY id + """ + + sshExec("root", be_host, "rm -f ${basePath}/${fmt}_join_*") + sql """ + INSERT INTO local( + "file_path" = "${basePath}/${fmt}_join_", + "backend_id" = "${be_id}", + "format" = "${fmt}" + ) SELECT id, department, position, salary FROM ${joinSrcTable} ORDER BY id + """ + + sshExec("root", be_host, "rm -f ${basePath}/${fmt}_large_*") + sql """ + INSERT INTO local( + "file_path" = "${basePath}/${fmt}_large_", + "backend_id" = "${be_id}", + "format" = "${fmt}" + ) SELECT id, name, age, score FROM ${largeSrcTable} ORDER BY id + """ + + def mainTvf = """local( + "file_path" = "${basePath}/${fmt}_main_*", + "backend_id" = "${be_id}", + "format" = "${fmt}")""" + + def joinTvf = """local( + "file_path" = "${basePath}/${fmt}_join_*", + "backend_id" = "${be_id}", + "format" = "${fmt}")""" + + def largeTvf = """local( + "file_path" = "${basePath}/${fmt}_large_*", + "backend_id" = "${be_id}", + "format" = "${fmt}")""" + + // ---- Test 1: Basic predicate, no cache (baseline) ---- + sql "set enable_condition_cache=false" + sql "set runtime_filter_type=0" + + qt_condition_cache0 """ + SELECT id, name, age, score FROM ${mainTvf} + WHERE age > 25 AND score > 85 ORDER BY 1, 2, 3, 4; + """ + + qt_condition_cache1 """ + SELECT id, name, age, score FROM ${mainTvf} + WHERE name LIKE 'A%' OR score < 80 ORDER BY 1, 2, 3, 4; + """ + + // ---- Test 2: Enable cache, same queries (MISS → populate) ---- + sql "set enable_condition_cache=true" + + qt_condition_cache2 """ + SELECT id, name, age, score FROM ${mainTvf} + WHERE age > 25 AND score > 85 ORDER BY 1, 2, 3, 4; + """ + + qt_condition_cache3 """ + SELECT id, name, age, score FROM ${mainTvf} + WHERE name LIKE 'A%' OR score < 80 ORDER BY 1, 2, 3, 4; + """ + + // ---- Test 3: Same queries again (HIT → verify) ---- + qt_condition_cache4 """ + SELECT id, name, age, score FROM ${mainTvf} + WHERE age > 25 AND score > 85 ORDER BY 1, 2, 3, 4; + """ + + qt_condition_cache5 """ + SELECT id, name, age, score FROM ${mainTvf} + WHERE name LIKE 'A%' OR score < 80 ORDER BY 1, 2, 3, 4; + """ + + // ---- Test 4: Join with bloom filter runtime filter ---- + // First, disable condition cache and reset runtime_filter + sql "set enable_condition_cache=false" + sql "set runtime_filter_type=2" + + // Run join query without condition cache + qt_condition_cache_join0 """ + SELECT t1.id, t1.name, t1.age, t2.department, t2.position + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + WHERE t1.age > 25 AND t2.salary > 90000 + ORDER BY 1, 2, 3, 4, 5 + """ + // Bob(30,Marketing,120000), David(28,Engineering,140000), Eve(26,Finance,95000) + + // Enable condition cache with bloom filter runtime_filter + sql "set enable_condition_cache=true" + qt_condition_cache_join1 """ + SELECT t1.id, t1.name, t1.age, t2.department, t2.position + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + WHERE t1.age > 25 AND t2.salary > 90000 + ORDER BY 1, 2, 3, 4, 5 + """ + + // Run again for cache hit + qt_condition_cache_join2 """ + SELECT t1.id, t1.name, t1.age, t2.department, t2.position + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + WHERE t1.age > 25 AND t2.salary > 90000 + ORDER BY 1, 2, 3, 4, 5 + """ + + // Run the same join query with condition cache enabled and expr in bloom filter + qt_condition_cache_join3 """ + SELECT t1.id, t1.name, t1.age, t2.department, t2.position + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + 1 + ORDER BY 1, 2, 3, 4, 5 + """ + // Run the same join query with condition cache enabled and expr different in bloom filter + qt_condition_cache_join4 """ + SELECT t1.id, t1.name, t1.age, t2.department, t2.position + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + 1 + ORDER BY 1, 2, 3, 4, 5 + """ + + // ---- Test 5: Join with different runtime_filter_type ---- + sql "set runtime_filter_type=12" + + // Run the same join query again after changing runtime_filter_type + qt_condition_cache_join5 """ + SELECT t1.id, t1.name, t1.age, t2.department, t2.position + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + WHERE t1.age > 25 AND t2.salary > 90000 + ORDER BY 1, 2, 3, 4, 5 + """ + + // ---- Test 6: Different join condition ---- + qt_condition_cache_join6 """ + SELECT t1.id, t1.name, t2.department, t2.salary + FROM ${mainTvf} t1 + JOIN ${joinTvf} t2 ON t1.id = t2.id + WHERE t1.score > 85 AND t2.department = 'Engineering' + ORDER BY 1, 2, 3, 4 + """ + // id=1: Alice(85.5)+Engineering(100000), id=4: David(92)+Engineering(140000) + + // ---- Test 7: LIMIT with large file (verify incomplete cache not stored) ---- + // Large table has 5000 rows spanning multiple granules. + // age > 25 matches ~4000 rows. LIMIT 10 causes early termination. + // The incomplete cache must NOT be stored; otherwise the subsequent + // full query would skip unread granules and return fewer rows. + sql "set runtime_filter_type=0" + + qt_condition_cache_limit0 """ + SELECT id, name, age, score FROM ${largeTvf} + WHERE age > 25 + ORDER BY 1, 2, 3, 4 LIMIT 10 + """ + // assertTrue("${fmt}: limit query should return exactly 10 rows", limitResult.size() == 10) + + // Run LIMIT again — result must be identical + qt_condition_cache_limit1 """ + SELECT id, name, age, score FROM ${largeTvf} + WHERE age > 25 + ORDER BY 1, 2, 3, 4 LIMIT 10 + """ + + // Full query without LIMIT — must return ALL matching rows, not just + // the granules that happened to be read during the LIMIT scan + qt_condition_cache_limit2 """ + SELECT id, name, age, score FROM ${largeTvf} + WHERE age > 25 + ORDER BY 1, 2, 3, 4 + """ + // age = 20 + (number % 30), age > 25 means number % 30 in [6..29] → 24/30 of rows + // assertTrue("${fmt}: full query should return ~4000 rows, got ${fullResult.size()}", + // fullResult.size() > 3900) + + // Run full query again (cache HIT from the full scan above) + qt_condition_cache_limit3 """ + SELECT id, name, age, score FROM ${largeTvf} + WHERE age > 25 + ORDER BY 1, 2, 3, 4 + """ + // assertEquals(fullResult, fullHit) + + // ============ Cleanup ============ + + // sql """ DROP TABLE IF EXISTS ${srcTable} """ + // sql """ DROP TABLE IF EXISTS ${joinSrcTable} """ + // sql """ DROP TABLE IF EXISTS ${largeSrcTable} """ + // sshExec("root", be_host, "rm -rf ${basePath}", false) +} From eff7c22b75a4c85823c53e3b9453fae561ae2ad3 Mon Sep 17 00:00:00 2001 From: jacktengg Date: Wed, 4 Mar 2026 00:55:42 +0800 Subject: [PATCH 07/13] improve --- be/src/vec/exec/scan/file_scanner.cpp | 160 ++++++++++++++++++++++++-- be/src/vec/exec/scan/file_scanner.h | 14 +++ 2 files changed, 167 insertions(+), 7 deletions(-) diff --git a/be/src/vec/exec/scan/file_scanner.cpp b/be/src/vec/exec/scan/file_scanner.cpp index eb925925563bbb..acacf2ee75fd8d 100644 --- a/be/src/vec/exec/scan/file_scanner.cpp +++ b/be/src/vec/exec/scan/file_scanner.cpp @@ -476,6 +476,17 @@ Status FileScanner::_get_block_wrapped(RuntimeState* state, Block* block, bool* // use read_rows instead of _src_block_ptr->rows(), because the first column of _src_block_ptr // may not be filled after calling `get_next_block()`, so _src_block_ptr->rows() may return wrong result. if (read_rows > 0) { + // Condition cache HIT (non-native readers): filter out rows in false granules. + // Must be done before _fill_columns_from_path/_fill_missing_columns which use read_rows. + size_t cache_filtered = _condition_cache_filter_block_on_hit(_src_block_ptr, read_rows); + if (cache_filtered > 0) { + read_rows -= cache_filtered; + if (read_rows == 0) { + // All rows in this batch were in false granules — skip to next batch. + continue; + } + } + if ((!_cur_reader->count_read_rows()) && _io_ctx) { _io_ctx->file_reader_stats->read_rows += read_rows; } @@ -493,6 +504,14 @@ Status FileScanner::_get_block_wrapped(RuntimeState* state, Block* block, bool* } // Apply _pre_conjunct_ctxs to filter src block. RETURN_IF_ERROR(_pre_filter_src_block()); + + // Condition cache MISS (non-native readers): evaluate conjuncts to mark + // which granules have surviving rows. The block is NOT modified here — + // Scanner::_filter_output_block will apply the actual filter later. + // This must be done after partition/missing columns are filled so + // conjuncts referencing those columns can be evaluated. + _condition_cache_mark_granules_on_miss(_src_block_ptr, read_rows); + // Convert src block to output block (dest block), string to dest data type and apply filters. RETURN_IF_ERROR(_convert_to_output_block(block)); // Truncate char columns or varchar columns if size is smaller than file columns @@ -1768,6 +1787,8 @@ void FileScanner::_init_reader_condition_cache() { _condition_cache_hit = false; _condition_cache = nullptr; _condition_cache_ctx = nullptr; + _file_rows_read = 0; + _reader_handles_condition_cache = false; if (_condition_cache_digest == 0 || _is_load || _conjuncts.empty() || !_cur_reader) { return; @@ -1782,8 +1803,9 @@ void FileScanner::_init_reader_condition_cache() { auto* cache = segment_v2::ConditionCache::instance(); segment_v2::ConditionCache::ExternalCacheKey cache_key( - _current_range.path, _current_range.__isset.file_size ? _current_range.file_size : -1, + _current_range.path, _current_range.__isset.modification_time ? _current_range.modification_time : 0, + _current_range.__isset.file_size ? _current_range.file_size : -1, _condition_cache_digest); segment_v2::ConditionCacheHandle handle; @@ -1800,13 +1822,136 @@ void FileScanner::_init_reader_condition_cache() { ConditionCacheContext::GRANULE_SIZE; _condition_cache->resize(num_granules, false); } + // For readers that don't know total_rows (CSV, JSON, etc.), the cache + // starts empty and will be grown dynamically in _condition_cache_mark_granules_on_miss(). + } + + // Check if the reader handles condition cache natively (Parquet, ORC, and table format readers + // wrapping them). Native readers implement their own seeking/skipping logic with finer + // granularity. For non-native readers, FileScanner handles cache at the block level. + _reader_handles_condition_cache = (_cur_reader->get_total_rows() > 0); + + // Create context to pass to readers (native readers use it; non-native readers ignore it) + if (!_condition_cache->empty()) { + _condition_cache_ctx = std::make_shared(); + _condition_cache_ctx->is_hit = _condition_cache_hit; + _condition_cache_ctx->filter_result = _condition_cache; + _cur_reader->set_condition_cache_context(_condition_cache_ctx); + } +} + +size_t FileScanner::_condition_cache_filter_block_on_hit(Block* block, size_t read_rows) { + // For non-native readers on HIT: filter out rows belonging to false granules. + // We cannot skip I/O for sequential readers (CSV, JSON, etc.), but we CAN + // skip the downstream conjunct evaluation for these rows. By removing them + // from the block here, Scanner::_filter_output_block never sees them. + if (!_condition_cache || !_condition_cache_hit || _reader_handles_condition_cache || + read_rows == 0) { + _file_rows_read += read_rows; + return 0; + } + + auto& cache = *_condition_cache; + if (cache.empty()) { + _file_rows_read += read_rows; + return 0; + } + + // Build a filter: true = keep the row, false = discard it. + IColumn::Filter filter(read_rows, 1); + size_t filtered_count = 0; + for (size_t i = 0; i < read_rows; i++) { + size_t granule = (_file_rows_read + i) / ConditionCacheContext::GRANULE_SIZE; + if (granule < cache.size() && !cache[granule]) { + filter[i] = 0; + filtered_count++; + } + // Granules beyond cache.size() are kept conservatively (assumed true). + } + + _file_rows_read += read_rows; + + if (filtered_count == 0) { + return 0; + } + + if (filtered_count == read_rows) { + // All rows filtered — clear all columns in the block. + for (size_t col = 0; col < block->columns(); col++) { + block->get_by_position(col).column->assume_mutable()->clear(); + } + return filtered_count; } - // Create context to pass to readers - _condition_cache_ctx = std::make_shared(); - _condition_cache_ctx->is_hit = _condition_cache_hit; - _condition_cache_ctx->filter_result = _condition_cache; - _cur_reader->set_condition_cache_context(_condition_cache_ctx); + // Apply the filter to shrink the block. + Block::filter_block_internal(block, filter, block->columns()); + return filtered_count; +} + +void FileScanner::_condition_cache_mark_granules_on_miss(Block* block, size_t read_rows) { + // For non-native readers on MISS: evaluate conjuncts to determine which rows + // would survive filtering, then mark the corresponding cache granules as true. + // The block is NOT modified — Scanner::_filter_output_block will apply the actual filter. + if (!_condition_cache || _condition_cache_hit || _reader_handles_condition_cache || + read_rows == 0 || _is_load) { + return; + } + + auto& cache = *_condition_cache; + int64_t base_row = _file_rows_read - read_rows; // _file_rows_read already advanced + + // Dynamically grow the cache if needed (for readers with unknown total rows). + size_t max_granule_needed = (_file_rows_read + ConditionCacheContext::GRANULE_SIZE - 1) / + ConditionCacheContext::GRANULE_SIZE; + if (cache.size() < max_granule_needed) { + cache.resize(max_granule_needed, false); + } + + // Evaluate conjuncts to build a result filter (without modifying the block). + // We use _conjuncts from Scanner base class — these are the same conjuncts that + // Scanner::_filter_output_block will apply later. + if (_conjuncts.empty()) { + // No conjuncts to evaluate — mark all granules as true (all rows survive). + for (size_t i = 0; i < read_rows; i++) { + size_t granule = (base_row + i) / ConditionCacheContext::GRANULE_SIZE; + if (granule < cache.size()) { + cache[granule] = true; + } + } + return; + } + + // Execute conjuncts on a shallow copy to get the filter without modifying the block. + IColumn::Filter result_filter(read_rows, 1); + bool can_filter_all = false; + // Use execute_conjuncts to evaluate, but on the original block columns. + auto st = VExprContext::execute_conjuncts(_conjuncts, nullptr, block, &result_filter, + &can_filter_all); + if (!st.ok()) { + // If evaluation fails, conservatively mark all granules as true. + for (size_t i = 0; i < read_rows; i++) { + size_t granule = (base_row + i) / ConditionCacheContext::GRANULE_SIZE; + if (granule < cache.size()) { + cache[granule] = true; + } + } + return; + } + + if (can_filter_all) { + // All rows filtered — no granules to mark (they stay false). + return; + } + + auto* filter_data = result_filter.data(); + for (size_t i = 0; i < read_rows; i++) { + if (filter_data[i]) { + size_t granule = (base_row + i) / ConditionCacheContext::GRANULE_SIZE; + if (granule < cache.size()) { + cache[granule] = true; + } + } + } } void FileScanner::_finalize_reader_condition_cache() { @@ -1829,8 +1974,9 @@ void FileScanner::_finalize_reader_condition_cache() { auto* cache = segment_v2::ConditionCache::instance(); segment_v2::ConditionCache::ExternalCacheKey cache_key( - _current_range.path, _current_range.__isset.file_size ? _current_range.file_size : -1, + _current_range.path, _current_range.__isset.modification_time ? _current_range.modification_time : 0, + _current_range.__isset.file_size ? _current_range.file_size : -1, _condition_cache_digest); cache->insert(cache_key, std::move(_condition_cache)); diff --git a/be/src/vec/exec/scan/file_scanner.h b/be/src/vec/exec/scan/file_scanner.h index 7150753985d82c..c679cec8f1161b 100644 --- a/be/src/vec/exec/scan/file_scanner.h +++ b/be/src/vec/exec/scan/file_scanner.h @@ -241,6 +241,13 @@ class FileScanner : public Scanner { std::shared_ptr> _condition_cache; std::shared_ptr _condition_cache_ctx; RuntimeProfile::Counter* _condition_cache_hit_counter = nullptr; + // Tracks the cumulative number of rows read from the current file. + // Used for non-native condition cache readers (CSV, JSON, Text, etc.) + // to map batch rows to global file-level granule indices. + int64_t _file_rows_read = 0; + // True if the current reader handles condition cache natively (Parquet, ORC). + // When true, FileScanner skips its own generic condition cache logic. + bool _reader_handles_condition_cache = false; private: Status _init_expr_ctxes(); @@ -290,6 +297,13 @@ class FileScanner : public Scanner { void _init_reader_condition_cache(); void _finalize_reader_condition_cache(); + // Generic condition cache methods for non-native readers (CSV, JSON, Text, etc.) + // On HIT: filter out rows in false granules from the block after reading. + // Returns the number of rows filtered out. + size_t _condition_cache_filter_block_on_hit(Block* block, size_t read_rows); + // On MISS: evaluate conjuncts to determine surviving rows and mark cache granules. + void _condition_cache_mark_granules_on_miss(Block* block, size_t read_rows); + TPushAggOp::type _get_push_down_agg_type() { return _local_state == nullptr ? TPushAggOp::type::NONE : _local_state->get_push_down_agg_type(); From ee8376b9e9185fce377babc27ec44383a5e4864f Mon Sep 17 00:00:00 2001 From: jacktengg Date: Wed, 4 Mar 2026 11:14:48 +0800 Subject: [PATCH 08/13] fix --- be/src/vec/exec/scan/file_scanner.cpp | 26 +++++++++++++------ .../cache/condition_cache_orc.groovy | 6 ++--- .../cache/condition_cache_parquet.groovy | 6 ++--- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/be/src/vec/exec/scan/file_scanner.cpp b/be/src/vec/exec/scan/file_scanner.cpp index acacf2ee75fd8d..676ae1019f5577 100644 --- a/be/src/vec/exec/scan/file_scanner.cpp +++ b/be/src/vec/exec/scan/file_scanner.cpp @@ -1832,12 +1832,10 @@ void FileScanner::_init_reader_condition_cache() { _reader_handles_condition_cache = (_cur_reader->get_total_rows() > 0); // Create context to pass to readers (native readers use it; non-native readers ignore it) - if (!_condition_cache->empty()) { - _condition_cache_ctx = std::make_shared(); - _condition_cache_ctx->is_hit = _condition_cache_hit; - _condition_cache_ctx->filter_result = _condition_cache; - _cur_reader->set_condition_cache_context(_condition_cache_ctx); - } + _condition_cache_ctx = std::make_shared(); + _condition_cache_ctx->is_hit = _condition_cache_hit; + _condition_cache_ctx->filter_result = _condition_cache; + _cur_reader->set_condition_cache_context(_condition_cache_ctx); } size_t FileScanner::_condition_cache_filter_block_on_hit(Block* block, size_t read_rows) { @@ -1883,8 +1881,20 @@ size_t FileScanner::_condition_cache_filter_block_on_hit(Block* block, size_t re return filtered_count; } - // Apply the filter to shrink the block. - Block::filter_block_internal(block, filter, block->columns()); + // Apply the filter only to columns that are already populated (have read_rows rows). + // After get_next_block(), missing columns and partition columns may still have 0 rows; + // they will be filled later by _fill_columns_from_path / _fill_missing_columns using the + // adjusted read_rows. Filtering a 0-row column with a non-empty filter would crash + // (e.g. CHECK failed: filter.size() == offsets.size()). + std::vector populated_columns; + for (uint32_t i = 0; i < block->columns(); i++) { + if (block->get_by_position(i).column->size() == read_rows) { + populated_columns.push_back(i); + } + } + if (!populated_columns.empty()) { + Block::filter_block_internal(block, populated_columns, filter); + } return filtered_count; } diff --git a/regression-test/suites/external_table_p0/cache/condition_cache_orc.groovy b/regression-test/suites/external_table_p0/cache/condition_cache_orc.groovy index 92720096eccf6c..eadc15f6a70d74 100644 --- a/regression-test/suites/external_table_p0/cache/condition_cache_orc.groovy +++ b/regression-test/suites/external_table_p0/cache/condition_cache_orc.groovy @@ -29,9 +29,9 @@ suite("condition_cache_orc", "tvf,external,external_docker") { // ============ Source tables ============ - def srcTable = "cc_ext_src" - def joinSrcTable = "cc_ext_join_src" - def largeSrcTable = "cc_ext_large_src" + def srcTable = "cc_ext_src_orc" + def joinSrcTable = "cc_ext_join_src_orc" + def largeSrcTable = "cc_ext_large_src_orc" sql """ DROP TABLE IF EXISTS ${srcTable} """ sql """ diff --git a/regression-test/suites/external_table_p0/cache/condition_cache_parquet.groovy b/regression-test/suites/external_table_p0/cache/condition_cache_parquet.groovy index fbd58e15dc7fb1..1f583d6b0ce8d7 100644 --- a/regression-test/suites/external_table_p0/cache/condition_cache_parquet.groovy +++ b/regression-test/suites/external_table_p0/cache/condition_cache_parquet.groovy @@ -29,9 +29,9 @@ suite("condition_cache_parquet", "tvf,external,external_docker") { // ============ Source tables ============ - def srcTable = "cc_ext_src" - def joinSrcTable = "cc_ext_join_src" - def largeSrcTable = "cc_ext_large_src" + def srcTable = "cc_ext_src_parquet" + def joinSrcTable = "cc_ext_join_src_parquet" + def largeSrcTable = "cc_ext_large_src_parquet" sql """ DROP TABLE IF EXISTS ${srcTable} """ sql """ From 14748e29bd3d1bee5a7a91eb727139182899b416 Mon Sep 17 00:00:00 2001 From: jacktengg Date: Wed, 4 Mar 2026 23:33:18 +0800 Subject: [PATCH 09/13] fix --- .../format/parquet/vparquet_group_reader.cpp | 1 - be/src/vec/exec/scan/file_scanner.cpp | 163 +----------------- be/src/vec/exec/scan/file_scanner.h | 14 -- 3 files changed, 6 insertions(+), 172 deletions(-) diff --git a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp index eda35581a49aec..171fcbff835205 100644 --- a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp @@ -609,7 +609,6 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re pre_eof = false; FilterMap filter_map; int64_t batch_base_row = _total_read_rows; - ; RETURN_IF_ERROR(_read_column_data(block, _lazy_read_ctx.predicate_columns.first, batch_size, &pre_read_rows, &pre_eof, filter_map)); if (pre_read_rows == 0) { diff --git a/be/src/vec/exec/scan/file_scanner.cpp b/be/src/vec/exec/scan/file_scanner.cpp index 676ae1019f5577..62d6a67e64ab4a 100644 --- a/be/src/vec/exec/scan/file_scanner.cpp +++ b/be/src/vec/exec/scan/file_scanner.cpp @@ -476,17 +476,6 @@ Status FileScanner::_get_block_wrapped(RuntimeState* state, Block* block, bool* // use read_rows instead of _src_block_ptr->rows(), because the first column of _src_block_ptr // may not be filled after calling `get_next_block()`, so _src_block_ptr->rows() may return wrong result. if (read_rows > 0) { - // Condition cache HIT (non-native readers): filter out rows in false granules. - // Must be done before _fill_columns_from_path/_fill_missing_columns which use read_rows. - size_t cache_filtered = _condition_cache_filter_block_on_hit(_src_block_ptr, read_rows); - if (cache_filtered > 0) { - read_rows -= cache_filtered; - if (read_rows == 0) { - // All rows in this batch were in false granules — skip to next batch. - continue; - } - } - if ((!_cur_reader->count_read_rows()) && _io_ctx) { _io_ctx->file_reader_stats->read_rows += read_rows; } @@ -505,13 +494,6 @@ Status FileScanner::_get_block_wrapped(RuntimeState* state, Block* block, bool* // Apply _pre_conjunct_ctxs to filter src block. RETURN_IF_ERROR(_pre_filter_src_block()); - // Condition cache MISS (non-native readers): evaluate conjuncts to mark - // which granules have surviving rows. The block is NOT modified here — - // Scanner::_filter_output_block will apply the actual filter later. - // This must be done after partition/missing columns are filled so - // conjuncts referencing those columns can be evaluated. - _condition_cache_mark_granules_on_miss(_src_block_ptr, read_rows); - // Convert src block to output block (dest block), string to dest data type and apply filters. RETURN_IF_ERROR(_convert_to_output_block(block)); // Truncate char columns or varchar columns if size is smaller than file columns @@ -1787,8 +1769,6 @@ void FileScanner::_init_reader_condition_cache() { _condition_cache_hit = false; _condition_cache = nullptr; _condition_cache_ctx = nullptr; - _file_rows_read = 0; - _reader_handles_condition_cache = false; if (_condition_cache_digest == 0 || _is_load || _conjuncts.empty() || !_cur_reader) { return; @@ -1822,145 +1802,14 @@ void FileScanner::_init_reader_condition_cache() { ConditionCacheContext::GRANULE_SIZE; _condition_cache->resize(num_granules, false); } - // For readers that don't know total_rows (CSV, JSON, etc.), the cache - // starts empty and will be grown dynamically in _condition_cache_mark_granules_on_miss(). - } - - // Check if the reader handles condition cache natively (Parquet, ORC, and table format readers - // wrapping them). Native readers implement their own seeking/skipping logic with finer - // granularity. For non-native readers, FileScanner handles cache at the block level. - _reader_handles_condition_cache = (_cur_reader->get_total_rows() > 0); - - // Create context to pass to readers (native readers use it; non-native readers ignore it) - _condition_cache_ctx = std::make_shared(); - _condition_cache_ctx->is_hit = _condition_cache_hit; - _condition_cache_ctx->filter_result = _condition_cache; - _cur_reader->set_condition_cache_context(_condition_cache_ctx); -} - -size_t FileScanner::_condition_cache_filter_block_on_hit(Block* block, size_t read_rows) { - // For non-native readers on HIT: filter out rows belonging to false granules. - // We cannot skip I/O for sequential readers (CSV, JSON, etc.), but we CAN - // skip the downstream conjunct evaluation for these rows. By removing them - // from the block here, Scanner::_filter_output_block never sees them. - if (!_condition_cache || !_condition_cache_hit || _reader_handles_condition_cache || - read_rows == 0) { - _file_rows_read += read_rows; - return 0; - } - - auto& cache = *_condition_cache; - if (cache.empty()) { - _file_rows_read += read_rows; - return 0; - } - - // Build a filter: true = keep the row, false = discard it. - IColumn::Filter filter(read_rows, 1); - size_t filtered_count = 0; - for (size_t i = 0; i < read_rows; i++) { - size_t granule = (_file_rows_read + i) / ConditionCacheContext::GRANULE_SIZE; - if (granule < cache.size() && !cache[granule]) { - filter[i] = 0; - filtered_count++; - } - // Granules beyond cache.size() are kept conservatively (assumed true). - } - - _file_rows_read += read_rows; - - if (filtered_count == 0) { - return 0; - } - - if (filtered_count == read_rows) { - // All rows filtered — clear all columns in the block. - for (size_t col = 0; col < block->columns(); col++) { - block->get_by_position(col).column->assume_mutable()->clear(); - } - return filtered_count; - } - - // Apply the filter only to columns that are already populated (have read_rows rows). - // After get_next_block(), missing columns and partition columns may still have 0 rows; - // they will be filled later by _fill_columns_from_path / _fill_missing_columns using the - // adjusted read_rows. Filtering a 0-row column with a non-empty filter would crash - // (e.g. CHECK failed: filter.size() == offsets.size()). - std::vector populated_columns; - for (uint32_t i = 0; i < block->columns(); i++) { - if (block->get_by_position(i).column->size() == read_rows) { - populated_columns.push_back(i); - } - } - if (!populated_columns.empty()) { - Block::filter_block_internal(block, populated_columns, filter); - } - return filtered_count; -} - -void FileScanner::_condition_cache_mark_granules_on_miss(Block* block, size_t read_rows) { - // For non-native readers on MISS: evaluate conjuncts to determine which rows - // would survive filtering, then mark the corresponding cache granules as true. - // The block is NOT modified — Scanner::_filter_output_block will apply the actual filter. - if (!_condition_cache || _condition_cache_hit || _reader_handles_condition_cache || - read_rows == 0 || _is_load) { - return; - } - - auto& cache = *_condition_cache; - int64_t base_row = _file_rows_read - read_rows; // _file_rows_read already advanced - - // Dynamically grow the cache if needed (for readers with unknown total rows). - size_t max_granule_needed = (_file_rows_read + ConditionCacheContext::GRANULE_SIZE - 1) / - ConditionCacheContext::GRANULE_SIZE; - if (cache.size() < max_granule_needed) { - cache.resize(max_granule_needed, false); - } - - // Evaluate conjuncts to build a result filter (without modifying the block). - // We use _conjuncts from Scanner base class — these are the same conjuncts that - // Scanner::_filter_output_block will apply later. - if (_conjuncts.empty()) { - // No conjuncts to evaluate — mark all granules as true (all rows survive). - for (size_t i = 0; i < read_rows; i++) { - size_t granule = (base_row + i) / ConditionCacheContext::GRANULE_SIZE; - if (granule < cache.size()) { - cache[granule] = true; - } - } - return; - } - - // Execute conjuncts on a shallow copy to get the filter without modifying the block. - IColumn::Filter result_filter(read_rows, 1); - bool can_filter_all = false; - // Use execute_conjuncts to evaluate, but on the original block columns. - auto st = VExprContext::execute_conjuncts(_conjuncts, nullptr, block, &result_filter, - &can_filter_all); - if (!st.ok()) { - // If evaluation fails, conservatively mark all granules as true. - for (size_t i = 0; i < read_rows; i++) { - size_t granule = (base_row + i) / ConditionCacheContext::GRANULE_SIZE; - if (granule < cache.size()) { - cache[granule] = true; - } - } - return; - } - - if (can_filter_all) { - // All rows filtered — no granules to mark (they stay false). - return; } - auto* filter_data = result_filter.data(); - for (size_t i = 0; i < read_rows; i++) { - if (filter_data[i]) { - size_t granule = (base_row + i) / ConditionCacheContext::GRANULE_SIZE; - if (granule < cache.size()) { - cache[granule] = true; - } - } + if (!_condition_cache->empty()) { + // Create context to pass to readers (native readers use it; non-native readers ignore it) + _condition_cache_ctx = std::make_shared(); + _condition_cache_ctx->is_hit = _condition_cache_hit; + _condition_cache_ctx->filter_result = _condition_cache; + _cur_reader->set_condition_cache_context(_condition_cache_ctx); } } diff --git a/be/src/vec/exec/scan/file_scanner.h b/be/src/vec/exec/scan/file_scanner.h index c679cec8f1161b..7150753985d82c 100644 --- a/be/src/vec/exec/scan/file_scanner.h +++ b/be/src/vec/exec/scan/file_scanner.h @@ -241,13 +241,6 @@ class FileScanner : public Scanner { std::shared_ptr> _condition_cache; std::shared_ptr _condition_cache_ctx; RuntimeProfile::Counter* _condition_cache_hit_counter = nullptr; - // Tracks the cumulative number of rows read from the current file. - // Used for non-native condition cache readers (CSV, JSON, Text, etc.) - // to map batch rows to global file-level granule indices. - int64_t _file_rows_read = 0; - // True if the current reader handles condition cache natively (Parquet, ORC). - // When true, FileScanner skips its own generic condition cache logic. - bool _reader_handles_condition_cache = false; private: Status _init_expr_ctxes(); @@ -297,13 +290,6 @@ class FileScanner : public Scanner { void _init_reader_condition_cache(); void _finalize_reader_condition_cache(); - // Generic condition cache methods for non-native readers (CSV, JSON, Text, etc.) - // On HIT: filter out rows in false granules from the block after reading. - // Returns the number of rows filtered out. - size_t _condition_cache_filter_block_on_hit(Block* block, size_t read_rows); - // On MISS: evaluate conjuncts to determine surviving rows and mark cache granules. - void _condition_cache_mark_granules_on_miss(Block* block, size_t read_rows); - TPushAggOp::type _get_push_down_agg_type() { return _local_state == nullptr ? TPushAggOp::type::NONE : _local_state->get_push_down_agg_type(); From 37deff66bd9e464a6dbdf8f54d30e23a26459b14 Mon Sep 17 00:00:00 2001 From: jacktengg Date: Thu, 5 Mar 2026 00:25:25 +0800 Subject: [PATCH 10/13] fix --- be/src/olap/rowset/segment_v2/row_ranges.h | 1 + be/src/vec/exec/format/orc/vorc_reader.h | 2 +- .../format/parquet/vparquet_group_reader.cpp | 96 ++++++------------- 3 files changed, 32 insertions(+), 67 deletions(-) diff --git a/be/src/olap/rowset/segment_v2/row_ranges.h b/be/src/olap/rowset/segment_v2/row_ranges.h index d6de02f90d04b5..fd66c692a06cf1 100644 --- a/be/src/olap/rowset/segment_v2/row_ranges.h +++ b/be/src/olap/rowset/segment_v2/row_ranges.h @@ -325,6 +325,7 @@ class RowRanges { // across all ranges. For example, if ranges are [0,3000) and [8000,11000), // pos=0 returns 0, pos=2999 returns 2999, pos=3000 returns 8000. int64_t get_row_index_by_pos(int64_t pos) const { + DORIS_CHECK(pos < _count); size_t remaining = pos; for (const auto& range : _ranges) { size_t range_len = range.count(); diff --git a/be/src/vec/exec/format/orc/vorc_reader.h b/be/src/vec/exec/format/orc/vorc_reader.h index d9e0854efbb995..bf28c1277de513 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.h +++ b/be/src/vec/exec/format/orc/vorc_reader.h @@ -718,7 +718,7 @@ class OrcReader : public GenericReader { std::unique_ptr _reader = nullptr; std::unique_ptr _row_reader; - uint64_t _last_read_row_number = -1; + uint64_t _last_read_row_number = 0; std::shared_ptr _condition_cache_ctx; std::unique_ptr _orc_filter; orc::RowReaderOptions _row_reader_options; diff --git a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp index 171fcbff835205..a5ade5da430310 100644 --- a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp @@ -417,14 +417,6 @@ Status RowGroupReader::next_batch(Block* block, size_t batch_size, size_t* read_ } } -// On condition cache HIT, removes row ranges whose granules have no surviving rows from -// _read_ranges BEFORE column readers are created. This makes ParquetColumnReader skip I/O -// entirely for false-granule rows — both predicate and lazy columns — via its existing -// page/row-skipping infrastructure. -// -// After filtering, _condition_cache_ctx is set to nullptr because: -// 1. The batch-level cache checks in _do_lazy_read() / non-lazy path are now redundant -// (false-granule rows have already been excluded from _read_ranges). // Maps each batch row to its global parquet file position via _read_ranges, then marks // the corresponding condition cache granule as true if the filter indicates the row survived. // batch_seq_start is the number of rows already read sequentially before this batch @@ -449,8 +441,10 @@ void RowGroupReader::_mark_condition_cache_granules(const uint8_t* filter_data, } } -// 2. The MISS population code paths should not execute on a HIT. -// 3. FileScanner retains its own shared_ptr to the context for cache finalization. +// On condition cache HIT, removes row ranges whose granules have no surviving rows from +// _read_ranges BEFORE column readers are created. This makes ParquetColumnReader skip I/O +// entirely for false-granule rows — both predicate and lazy columns — via its existing +// page/row-skipping infrastructure. void RowGroupReader::_filter_read_ranges_by_condition_cache() { if (!_condition_cache_ctx || !_condition_cache_ctx->is_hit) { return; @@ -465,7 +459,6 @@ void RowGroupReader::_filter_read_ranges_by_condition_cache() { filter_ranges_by_cache(_read_ranges, filter_result, _current_row_group_idx.first_row); _is_row_group_filtered = _read_ranges.is_empty(); _condition_cache_filtered_rows += old_row_count - _read_ranges.count(); - _condition_cache_ctx = nullptr; } // Filters read_ranges by removing rows whose cache granule is false. @@ -617,28 +610,6 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re } pre_raw_read_rows += pre_read_rows; - // Condition cache HIT: check if all rows in this batch are in false granules - bool cache_skip_batch = false; - if (_condition_cache_ctx && _condition_cache_ctx->is_hit) { - auto& cache = *_condition_cache_ctx->filter_result; - int64_t first_rg_pos = _read_ranges.get_row_index_by_pos(batch_base_row); - int64_t last_rg_pos = - _read_ranges.get_row_index_by_pos(batch_base_row + pre_read_rows - 1); - size_t start_granule = (_current_row_group_idx.first_row + first_rg_pos) / - ConditionCacheContext::GRANULE_SIZE; - size_t end_granule = (_current_row_group_idx.first_row + last_rg_pos) / - ConditionCacheContext::GRANULE_SIZE; - bool has_surviving_granule = false; - for (size_t g = start_granule; g <= end_granule && !has_surviving_granule; g++) { - if (g < cache.size() && cache[g]) { - has_surviving_granule = true; - } - } - if (!has_surviving_granule) { - cache_skip_batch = true; - } - } - RETURN_IF_ERROR(_fill_partition_columns(block, pre_read_rows, _lazy_read_ctx.predicate_partition_columns)); RETURN_IF_ERROR(_fill_missing_columns(block, pre_read_rows, @@ -663,43 +634,36 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re { SCOPED_RAW_TIMER(&_predicate_filter_time); - // Condition cache HIT: skip predicate evaluation for false-granule batches - if (cache_skip_batch) { - can_filter_all = true; - result_filter.assign(pre_read_rows, static_cast(0)); - } else { - // generate filter vector - if (_lazy_read_ctx.resize_first_column) { - // VExprContext.execute has an optimization, the filtering is executed when block->rows() > 0 - // The following process may be tricky and time-consuming, but we have no other way. - block->get_by_position(0).column->assume_mutable()->resize(pre_read_rows); - } - result_filter.assign(pre_read_rows, static_cast(1)); - std::vector filters; - if (_position_delete_ctx.has_filter) { - filters.push_back(_pos_delete_filter_ptr.get()); - } + // generate filter vector + if (_lazy_read_ctx.resize_first_column) { + // VExprContext.execute has an optimization, the filtering is executed when block->rows() > 0 + // The following process may be tricky and time-consuming, but we have no other way. + block->get_by_position(0).column->assume_mutable()->resize(pre_read_rows); + } + result_filter.assign(pre_read_rows, static_cast(1)); + std::vector filters; + if (_position_delete_ctx.has_filter) { + filters.push_back(_pos_delete_filter_ptr.get()); + } - VExprContextSPtrs filter_contexts; - for (auto& conjunct : _filter_conjuncts) { - filter_contexts.emplace_back(conjunct); - } + VExprContextSPtrs filter_contexts; + for (auto& conjunct : _filter_conjuncts) { + filter_contexts.emplace_back(conjunct); + } - { - RETURN_IF_ERROR(VExprContext::execute_conjuncts( - filter_contexts, &filters, block, &result_filter, &can_filter_all)); - } + { + RETURN_IF_ERROR(VExprContext::execute_conjuncts(filter_contexts, &filters, block, + &result_filter, &can_filter_all)); + } - // Condition cache MISS: mark granules with surviving rows - if (!can_filter_all) { - _mark_condition_cache_granules(result_filter.data(), pre_read_rows, - batch_base_row); - } + // Condition cache MISS: mark granules with surviving rows + if (!can_filter_all) { + _mark_condition_cache_granules(result_filter.data(), pre_read_rows, batch_base_row); + } - if (_lazy_read_ctx.resize_first_column) { - // We have to clean the first column to insert right data. - block->get_by_position(0).column->assume_mutable()->clear(); - } + if (_lazy_read_ctx.resize_first_column) { + // We have to clean the first column to insert right data. + block->get_by_position(0).column->assume_mutable()->clear(); } } From 69163f5fe41b8cdd1cc7703d2a3fc14c04b1182a Mon Sep 17 00:00:00 2001 From: jacktengg Date: Thu, 5 Mar 2026 15:41:36 +0800 Subject: [PATCH 11/13] fix --- be/src/runtime/memory/cache_policy.h | 2 +- be/src/vec/exec/scan/file_scanner.cpp | 10 +++++++--- be/src/vec/exec/scan/file_scanner.h | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/be/src/runtime/memory/cache_policy.h b/be/src/runtime/memory/cache_policy.h index 3a072de82f14d3..ba5768c76e1bd7 100644 --- a/be/src/runtime/memory/cache_policy.h +++ b/be/src/runtime/memory/cache_policy.h @@ -136,7 +136,7 @@ class CachePolicy { {"ForUTCacheNumber", CacheType::FOR_UT_CACHE_NUMBER}, {"QueryCache", CacheType::QUERY_CACHE}, {"TabletColumnObjectPool", CacheType::TABLET_COLUMN_OBJECT_POOL}, - }; + {"ConditionCache", CacheType::CONDITION_CACHE}}; static CacheType string_to_type(std::string type) { if (StringToType.contains(type)) { diff --git a/be/src/vec/exec/scan/file_scanner.cpp b/be/src/vec/exec/scan/file_scanner.cpp index 62d6a67e64ab4a..259829cc4ef160 100644 --- a/be/src/vec/exec/scan/file_scanner.cpp +++ b/be/src/vec/exec/scan/file_scanner.cpp @@ -1765,12 +1765,17 @@ Status FileScanner::_init_expr_ctxes() { return Status::OK(); } +bool FileScanner::_should_enable_condition_cache() { + return _condition_cache_digest != 0 && !_is_load && + (!_conjuncts.empty() || !_push_down_conjuncts.empty()); +} + void FileScanner::_init_reader_condition_cache() { _condition_cache_hit = false; _condition_cache = nullptr; _condition_cache_ctx = nullptr; - if (_condition_cache_digest == 0 || _is_load || _conjuncts.empty() || !_cur_reader) { + if (!_should_enable_condition_cache() || !_cur_reader) { return; } @@ -1814,8 +1819,7 @@ void FileScanner::_init_reader_condition_cache() { } void FileScanner::_finalize_reader_condition_cache() { - if (_condition_cache == nullptr || _condition_cache_hit || _condition_cache_digest == 0 || - _is_load) { + if (!_should_enable_condition_cache() || _condition_cache == nullptr || _condition_cache_hit) { _condition_cache = nullptr; _condition_cache_hit = false; _condition_cache_ctx = nullptr; diff --git a/be/src/vec/exec/scan/file_scanner.h b/be/src/vec/exec/scan/file_scanner.h index 7150753985d82c..1a5df1e289470e 100644 --- a/be/src/vec/exec/scan/file_scanner.h +++ b/be/src/vec/exec/scan/file_scanner.h @@ -287,6 +287,7 @@ class FileScanner : public Scanner { _counter.num_rows_filtered = 0; } + bool _should_enable_condition_cache(); void _init_reader_condition_cache(); void _finalize_reader_condition_cache(); From 6f37206ac8e0e03d27247b4506385685948e31f8 Mon Sep 17 00:00:00 2001 From: jacktengg Date: Fri, 6 Mar 2026 00:51:23 +0800 Subject: [PATCH 12/13] fix --- be/src/vec/exec/format/orc/vorc_reader.cpp | 58 ++++++++++++++-------- be/src/vec/exec/format/orc/vorc_reader.h | 5 ++ 2 files changed, 43 insertions(+), 20 deletions(-) diff --git a/be/src/vec/exec/format/orc/vorc_reader.cpp b/be/src/vec/exec/format/orc/vorc_reader.cpp index 031f6f325152bf..3c9ce9f5c8b93b 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.cpp +++ b/be/src/vec/exec/format/orc/vorc_reader.cpp @@ -2229,10 +2229,13 @@ Status OrcReader::get_next_block(Block* block, size_t* read_rows, bool* eof) { } void OrcReader::_filter_rows_by_condition_cache(size_t* read_rows, bool* eof) { - // Condition cache HIT: skip consecutive false granules before reading + // Condition cache HIT: skip consecutive false granules before reading. + // Uses _current_read_position which tracks where the *next* batch will + // start, as opposed to _last_read_row_number which is the start of the + // most recently read batch (set after nextBatch returns). if (_condition_cache_ctx && _condition_cache_ctx->is_hit) { auto& cache = *_condition_cache_ctx->filter_result; - uint64_t granule = _last_read_row_number / ConditionCacheContext::GRANULE_SIZE; + uint64_t granule = _current_read_position / ConditionCacheContext::GRANULE_SIZE; auto max_granule = cache.size(); while (granule < max_granule && !cache[granule]) { granule++; @@ -2242,13 +2245,14 @@ void OrcReader::_filter_rows_by_condition_cache(size_t* read_rows, bool* eof) { // granules, so no more surviving rows exist in this file. *eof = true; *read_rows = 0; - _statistics.condition_cache_filtered_rows += get_total_rows() - _last_read_row_number; + _statistics.condition_cache_filtered_rows += get_total_rows() - _current_read_position; return; } uint64_t target_row = granule * ConditionCacheContext::GRANULE_SIZE; - if (target_row > _last_read_row_number) { + if (target_row > _current_read_position) { _row_reader->seekToRow(target_row); - _statistics.condition_cache_filtered_rows += target_row - _last_read_row_number; + _statistics.condition_cache_filtered_rows += target_row - _current_read_position; + _current_read_position = target_row; } } } @@ -2280,9 +2284,6 @@ Status OrcReader::_get_next_block_impl(Block* block, size_t* read_rows, bool* eo return Status::OK(); } - _last_read_row_number = _row_reader->getRowNumber() == std::numeric_limits::max() - ? 0 - : _row_reader->getRowNumber(); if (_lazy_read_ctx.can_lazy_read) { std::vector columns_to_filter; int column_to_keep = block->columns(); @@ -2307,6 +2308,9 @@ Status OrcReader::_get_next_block_impl(Block* block, size_t* read_rows, bool* eo *read_rows = 0; return Status::OK(); } + // After nextBatch(), getRowNumber() returns the start of the batch just read. + _last_read_row_number = _row_reader->getRowNumber(); + _current_read_position = _last_read_row_number + rr; } catch (std::exception& e) { std::string _err_msg = e.what(); if (_io_ctx && _io_ctx->should_stop && _err_msg == "stop") { @@ -2320,6 +2324,24 @@ Status OrcReader::_get_next_block_impl(Block* block, size_t* read_rows, bool* eo } } + // Condition cache MISS: mark granules with surviving rows (lazy-read path). + // This is done here (after nextBatch) instead of in the filter() callback because + // getRowNumber() only returns the correct batch-start row after nextBatch() returns. + if (_condition_cache_ctx && !_condition_cache_ctx->is_hit && _filter) { + auto& cache = *_condition_cache_ctx->filter_result; + auto* filter_data = _filter->data(); + size_t filter_size = _filter->size(); + for (size_t i = 0; i < filter_size; i++) { + if (filter_data[i]) { + size_t granule = + (_last_read_row_number + i) / ConditionCacheContext::GRANULE_SIZE; + if (granule < cache.size()) { + cache[granule] = true; + } + } + } + } + std::vector batch_vec; _fill_batch_vec(batch_vec, _batch.get(), 0); @@ -2410,6 +2432,9 @@ Status OrcReader::_get_next_block_impl(Block* block, size_t* read_rows, bool* eo *read_rows = 0; return Status::OK(); } + // After nextBatch(), getRowNumber() returns the start of the batch just read. + _last_read_row_number = _row_reader->getRowNumber(); + _current_read_position = _last_read_row_number + rr; } catch (std::exception& e) { std::string _err_msg = e.what(); if (_io_ctx && _io_ctx->should_stop && _err_msg == "stop") { @@ -2756,18 +2781,11 @@ Status OrcReader::filter(orc::ColumnVectorBatch& data, uint16_t* sel, uint16_t s new_size += result_filter_data[i] ? 1 : 0; } - // Condition cache MISS: mark granules with surviving rows - if (_condition_cache_ctx && !_condition_cache_ctx->is_hit && new_size > 0) { - auto& cache = *_condition_cache_ctx->filter_result; - for (uint16_t i = 0; i < size; i++) { - if (result_filter_data[i]) { - size_t granule = (_last_read_row_number + i) / ConditionCacheContext::GRANULE_SIZE; - if (granule < cache.size()) { - cache[granule] = true; - } - } - } - } + // NOTE: Condition cache MISS marking for the lazy-read path is done + // in _get_next_block_impl after nextBatch() returns, where + // _last_read_row_number has been correctly set via getRowNumber(). + // We cannot do it here because this callback fires *during* nextBatch() + // when getRowNumber() still returns the previous batch's start row. _statistics.lazy_read_filtered_rows += static_cast(size - new_size); data.numElements = new_size; diff --git a/be/src/vec/exec/format/orc/vorc_reader.h b/be/src/vec/exec/format/orc/vorc_reader.h index bf28c1277de513..67add475d6b1e9 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.h +++ b/be/src/vec/exec/format/orc/vorc_reader.h @@ -718,7 +718,12 @@ class OrcReader : public GenericReader { std::unique_ptr _reader = nullptr; std::unique_ptr _row_reader; + // The absolute row number where the most recent batch started (set after nextBatch). + // Used by the condition-cache code to map in-batch indices to granules. uint64_t _last_read_row_number = 0; + // The absolute row number where the *next* nextBatch call will start reading. + // Used by _filter_rows_by_condition_cache to decide which granule to seek to. + uint64_t _current_read_position = 0; std::shared_ptr _condition_cache_ctx; std::unique_ptr _orc_filter; orc::RowReaderOptions _row_reader_options; From a3005ad25b058c6e5242b5eebab1037fa454f3dd Mon Sep 17 00:00:00 2001 From: jacktengg Date: Fri, 6 Mar 2026 01:07:45 +0800 Subject: [PATCH 13/13] fix --- be/src/olap/rowset/segment_v2/condition_cache.h | 14 ++++++++++---- be/src/vec/exec/scan/file_scanner.cpp | 8 ++++++-- be/test/vec/exec/format/condition_cache_test.cpp | 4 ++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/be/src/olap/rowset/segment_v2/condition_cache.h b/be/src/olap/rowset/segment_v2/condition_cache.h index 55ce6d0cb03868..123aac79df9bb8 100644 --- a/be/src/olap/rowset/segment_v2/condition_cache.h +++ b/be/src/olap/rowset/segment_v2/condition_cache.h @@ -72,23 +72,29 @@ class ConditionCache : public LRUCachePolicy { // Cache key for external tables (Hive ORC/Parquet) struct ExternalCacheKey { ExternalCacheKey(const std::string& path_, int64_t modification_time_, int64_t file_size_, - uint64_t digest_) + uint64_t digest_, int64_t start_offset_, int64_t size_) : path(path_), modification_time(modification_time_), file_size(file_size_), - digest(digest_) {} + digest(digest_), + start_offset(start_offset_), + size(size_) {} std::string path; int64_t modification_time; int64_t file_size; uint64_t digest; + int64_t start_offset; + int64_t size; [[nodiscard]] std::string encode() const { std::string key = path; - char buf[24]; + char buf[40]; memcpy(buf, &modification_time, 8); memcpy(buf + 8, &file_size, 8); memcpy(buf + 16, &digest, 8); - key.append(buf, 24); + memcpy(buf + 24, &start_offset, 8); + memcpy(buf + 32, &size, 8); + key.append(buf, 40); return key; } }; diff --git a/be/src/vec/exec/scan/file_scanner.cpp b/be/src/vec/exec/scan/file_scanner.cpp index 259829cc4ef160..4e81c22bf07f35 100644 --- a/be/src/vec/exec/scan/file_scanner.cpp +++ b/be/src/vec/exec/scan/file_scanner.cpp @@ -1791,7 +1791,9 @@ void FileScanner::_init_reader_condition_cache() { _current_range.path, _current_range.__isset.modification_time ? _current_range.modification_time : 0, _current_range.__isset.file_size ? _current_range.file_size : -1, - _condition_cache_digest); + _condition_cache_digest, + _current_range.__isset.start_offset ? _current_range.start_offset : 0, + _current_range.__isset.size ? _current_range.size : -1); segment_v2::ConditionCacheHandle handle; _condition_cache_hit = cache->lookup(cache_key, &handle); @@ -1840,7 +1842,9 @@ void FileScanner::_finalize_reader_condition_cache() { _current_range.path, _current_range.__isset.modification_time ? _current_range.modification_time : 0, _current_range.__isset.file_size ? _current_range.file_size : -1, - _condition_cache_digest); + _condition_cache_digest, + _current_range.__isset.start_offset ? _current_range.start_offset : 0, + _current_range.__isset.size ? _current_range.size : -1); cache->insert(cache_key, std::move(_condition_cache)); _condition_cache = nullptr; diff --git a/be/test/vec/exec/format/condition_cache_test.cpp b/be/test/vec/exec/format/condition_cache_test.cpp index 9259c8899a5dc6..cb697f62b2b84f 100644 --- a/be/test/vec/exec/format/condition_cache_test.cpp +++ b/be/test/vec/exec/format/condition_cache_test.cpp @@ -317,7 +317,7 @@ class ConditionCacheDeleteOpsTest : public testing::Test { return; } - segment_v2::ConditionCache::ExternalCacheKey key(path, -1, 0, digest); + segment_v2::ConditionCache::ExternalCacheKey key(path, -1, 0, digest, 0, -1); segment_v2::ConditionCacheHandle handle; cache_hit = cc->lookup(key, &handle); @@ -334,7 +334,7 @@ class ConditionCacheDeleteOpsTest : public testing::Test { // Inserts a pre-populated entry into the cache for the given path/digest. void prepopulate_cache(const std::string& path, uint64_t digest) { - segment_v2::ConditionCache::ExternalCacheKey key(path, -1, 0, digest); + segment_v2::ConditionCache::ExternalCacheKey key(path, -1, 0, digest, 0, -1); auto filter = std::make_shared>(std::vector {true, false, true}); _cache->insert(key, filter); }