2024/08/20-01:58:37.752433 140500154140224 DEBG dcompact_worker.cpp:2211: /storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00: fork to child time = 0.031005 sec 2024/08/20-01:58:37.753799 140500154140224 DEBG dcompact_worker.cpp:1011: Beg SerDeRead: /storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00 2024/08/20-01:58:37.759559 140500154140224 DEBG dcompact_worker.cpp:1031: End SerDeRead: /storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00 2024/08/20-01:58:37.761396 140500154140224 TRAC dcompact_worker.cpp:1081: INFO_LOG_LEVEL: rpc = INFO_LEVEL, env_var = undefined 2024/08/20-01:58:37.761864 140500154140224 [WARN] [column_family.cc:386] multiple cf_paths/db_paths and level_compaction_dynamic_level_bytes can't be used together 2024/08/20-01:58:37.801328 140500154140224 [version_set.cc:6139] Recovering from manifest file: /worker/dcompact-log/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/2024-08-19T23.41.30/.rocksdb/job-06193/att-00/MANIFEST-14619535 2024/08/20-01:58:37.817146 140500154140224 [version_set.cc:6182] Recovered from manifest file:/worker/dcompact-log/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/2024-08-19T23.41.30/.rocksdb/job-06193/att-00/MANIFEST-14619535 succeeded,manifest_file_number is 14619535, next_file_number is 14627026, last_sequence is 189743357661, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 14626946 2024/08/20-01:58:37.817157 140500154140224 [version_set.cc:6197] Column family [default] (ID 0), log number is 0 2024/08/20-01:58:37.817248 140500154140224 [version_set.cc:5652] Creating manifest 14627026 2024/08/20-01:58:37.843510 140500154140224 DEBG dcompact_worker.cpp:1215: /storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00: bottommost_level: fake = 1, rpc = 0 2024/08/20-01:58:37.857959 140500154140224 [compaction_job.cc:2433] [default] [JOB 6193] Compacting 1@2 + 2@3 files to L3, score 0.90, subcompactions 1 : 1 2024/08/20-01:58:37.857974 140500154140224 [compaction_job.cc:2441] [default]: Compaction start summary: Base version 3085 Base level 2, inputs: [14626982(23MB)], [14626931(97MB) 14627004(78MB)] 2024/08/20-01:58:38.053163 140500154140224 [top_zip_table.cc:59] core git_version_hash_info_is:commit 7517bad5c1a147474c3830831b9a22c996321ae8 Author: leipeng Date: 2024-01-08 19:18:17 +0800 vfork_cmd: call close before wait_finish g++ (GCC) 12.1.0 Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. INCS = -Isrc -I3rdparty/re2 -I3rdparty/zstd -Iboost-include CXXFLAGS = -D TOPLING_IO_WITH_URING=1 -fPIC -time -Wno-class-memaccess -fdiagnostics-color -Wformat=2 -Wcomment -Wall -Wextra -Wno-unused-parameter -Wno-alloc-size-larger-than -mcx16 -Wno-deprecated-declarations -Wstrict-aliasing=3 -DCLIENT_LICENSE_ID="public" -DNO_THREADS -ftls-model=initial-exec -DDIVSUFSORT_API= -fno-stack-protector RLS_FLAGS = -O3 -DNDEBUG -g3 WITH_BMI2 = 1 compile_cpu_flag: -march=haswell -mbmi -mbmi2 2024/08/20-01:58:38.053206 140500154140224 [top_zip_table.cc:60] fsa git_version_hash_info_is:commit 7517bad5c1a147474c3830831b9a22c996321ae8 Author: leipeng Date: 2024-01-08 19:18:17 +0800 vfork_cmd: call close before wait_finish g++ (GCC) 12.1.0 Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. INCS = -Isrc -I3rdparty/re2 -I3rdparty/zstd -Iboost-include CXXFLAGS = -D TOPLING_IO_WITH_URING=1 -fPIC -time -Wno-class-memaccess -fdiagnostics-color -Wformat=2 -Wcomment -Wall -Wextra -Wno-unused-parameter -Wno-alloc-size-larger-than -mcx16 -Wno-deprecated-declarations -Wstrict-aliasing=3 -DCLIENT_LICENSE_ID="public" -DNO_THREADS -ftls-model=initial-exec -DDIVSUFSORT_API= -fno-stack-protector RLS_FLAGS = -O3 -DNDEBUG -g3 WITH_BMI2 = 1 compile_cpu_flag: -march=haswell -mbmi -mbmi2 2024/08/20-01:58:38.053233 140500154140224 [top_zip_table.cc:61] zbs git_version_hash_info_is:commit 7517bad5c1a147474c3830831b9a22c996321ae8 Author: leipeng Date: 2024-01-08 19:18:17 +0800 vfork_cmd: call close before wait_finish g++ (GCC) 12.1.0 Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. INCS = -Isrc -I3rdparty/re2 -I3rdparty/zstd -Iboost-include CXXFLAGS = -D TOPLING_IO_WITH_URING=1 -fPIC -time -Wno-class-memaccess -fdiagnostics-color -Wformat=2 -Wcomment -Wall -Wextra -Wno-unused-parameter -Wno-alloc-size-larger-than -mcx16 -Wno-deprecated-declarations -Wstrict-aliasing=3 -DCLIENT_LICENSE_ID="public" -DNO_THREADS -ftls-model=initial-exec -DDIVSUFSORT_API= -fno-stack-protector RLS_FLAGS = -O3 -DNDEBUG -g3 WITH_BMI2 = 1 compile_cpu_flag: -march=haswell -mbmi -mbmi2 2024/08/20-01:58:38.053252 140500154140224 [top_zip_table.cc:62] topling-zip_table_reader: git_version_hash_info_is: commit 7f80399bfbd2071b6e0f5683e8ab7225b8e6e394 Author: leipeng Date: 2024-01-19 14:52:30 +0800 Change ToplingZipTableOptions::sampleRatio to vector g++ (GCC) 12.1.0 Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. cpu_flag: -march=native -mbmi -mbmi2 2024/08/20-01:58:38.053268 140500154140224 [top_zip_table.cc:64] topling-rocks git_version_hash_info_is: commit 1240987ca13d0fe562c9b9c037155079f0877840 Author: leipeng Date: 2024-01-19 15:07:04 +0800 Change ToplingZipTableOptions::sampleRatio to vector g++ (GCC) 12.1.0 Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. cpu_flag: -march=native -mbmi -mbmi2 2024/08/20-01:58:38.781079 140500154140224 [top_zip_table_builder.cc:934] ToplingZipTableBuilder(/storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00/14627027.sst) /dev/shm/ToplingTemp/Topling-104859-r2xXN7 2024/08/20-01:58:39.345513 140500154140224 [top_zip_table_builder.cc:1344] ToplingZipTableBuilder::Finish(/storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00/14627027.sst): first pass time = 0.56's, 237.815'MB/sec 2024/08/20-01:58:42.385283 140500154140224 [top_zip_table_builder.cc:2764] ToplingZipTableBuilder::Finish(/storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00/14627027.sst): old prealloc_size = 147639500, real_size = 100296064 2024/08/20-01:58:42.385491 140500154140224 [top_zip_table_builder.cc:1765] BuildReorderMap(/storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00/14627027.sst): index type = NestLoudsTrieDAWG_Mixed_XL_256_32_FL, store type = DictZipBlobStore usrkeys = 197644 prefix = 4 raw-key = 0.0024 GB zip-key = 0.0004 GB avg-key = 12.00 avg-zkey = 1.86 raw-val = 0.1295 GB zip-val = 0.0999 GB avg-val = 655.09 avg-zval = 505.35 2024/08/20-01:58:42.385735 140500154140224 [top_zip_table_builder.cc:1295] /storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00/14627027.sst: sumWaitingMem = 0.000 GB, sumWorkingMem = 0.020 GB, reorder workingMem = 0.0004 GB, waited 0.000 sec, Key+Value = 0.134 GB 2024/08/20-01:58:42.899443 140500154140224 [top_zip_table_builder.cc:3092] ToplingZipTableBuilder::Finish(/storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00/14627027.sst): second pass time = 3.04's, 42.630'MB/sec, value only(96.5% of KV) wait indexing time = 0.00's, remap KeyValue time = 0.51's, 198.898'MB/sec (all stages of remap) Get OrderMap time = 0.00's, 2016.922'MB/sec (index lex order gen) rebuild zvType time = 0.41's, 0.119'MB/sec write SST data time = 0.10's, 1027.348'MB/sec dict compress time = 0.00's, 1348574.000'MB/sec z-dict build time = 0.00's, sample length = 1.349'MB, throughput = 26183.869'MB/sec zip my value time = 3.04's, unzip length = 0.129'GB zip my value throughput = 42.630'MB/sec zip pipeline throughput = 78.154'MB/sec entries = 197644 avg-key = 24.00 avg-zkey = 1.86 avg-val = 655.09 avg-zval = 505.35 usrkeys = 197644 avg-key = 16.00 avg-zkey = 1.86 avg-val = 662.09 avg-zval = 505.35 TagRS{ kinds = RS_Key0_Tag1 bytes = 0 } TagArray{ size = 197644 bytes = 667056 } seq expand size = 1383508 multi value expand size = 0 cnt WriteAppend = 13 UnZipSize{ index = 0.0032 GB value = 0.1295 GB dict = 1.35 MB all = 0.1342 GB } __ZipSize{ index = 0.0004 GB value = 0.0999 GB dict = 1.35 MB all = 0.1023 GB } UnZip/Zip{ index = 8.5977 value = 1.2963 dict = 1.00 all = 1.3125 } Zip/UnZip{ index = 0.1163 value = 0.7714 dict = 1.00 all = 0.7619 } ---------------------------- total value len = 62.427608 GB avg = 0.180 KB (by entry num) total key len = 6.793501 GB avg = 0.020 KB total ukey len = 3.192670 GB avg = 0.008 KB total ukey num = 0.389531205 Billion total entry num = 0.346409213 Billion write speed all = 2.285905870 MB/sec (with seq num) write speed all = 2.194389410 MB/sec (without seq num) 2024/08/20-01:58:43.037061 140500154140224 [compaction_job.cc:1944] [default] [JOB 6193] Generated table #14627027: 197644 keys, 102264998 bytes, temperature: kWarm 2024/08/20-01:58:43.037157 140500154140224 EVENT_LOG_v1 {"time_micros": 1724090323037099, "cf_name": "default", "job": 6193, "event": "table_file_creation", "file_number": 14627027, "file_size": 102264998, "file_checksum": "", "file_checksum_func_name": "Unknown", "smallest_seqno": 189646995914, "largest_seqno": 189742917087, "table_properties": {"data_size": 99878640, "index_size": 367808, "index_partitions": 0, "top_level_index_size": 0, "index_key_is_user_key": 0, "index_value_is_delta_encoded": 0, "filter_size": 0, "raw_key_size": 4743456, "raw_average_key_size": 24, "raw_value_size": 129474409, "raw_average_value_size": 655, "num_data_blocks": 1, "num_entries": 197644, "num_filter_entries": 0, "num_deletions": 0, "num_merge_operands": 0, "num_range_deletions": 0, "format_version": 0, "fixed_key_len": 24, "fixed_value_len": 18446744073709551615, "filter_policy": "", "column_family_name": "default", "column_family_id": 0, "comparator": "leveldb.BytewiseComparator", "merge_operator": "nullptr", "prefix_extractor_name": "nullptr", "property_collectors": "[Rdb_tbl_prop_coll_factory]", "compression": "FlatZip", "compression_options": "RS_Key0_Tag1-NestLoudsTrieDAWG_Mixed_XL_256_32_FL-DictZipBlobStore", "creation_time": 1724090318, "oldest_key_time": 0, "file_creation_time": 1724090318, "slow_compression_estimated_data_size": 0, "fast_compression_estimated_data_size": 0, "db_id": "a007a635-5c0a-4b4a-be96-b9c695cb016b", "db_session_id": "9474K4QZ2QA6TIYF9LEW", "orig_file_number": 14627027, "seqno_to_time_mapping": "N/A", "__indexstats__": "[...1 records...]"}} 2024/08/20-01:58:43.147724 140500154140224 [top_zip_table_builder.cc:934] ToplingZipTableBuilder(/storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00/14627028.sst) /dev/shm/ToplingTemp/Topling-104859-fZMUp7 2024/08/20-01:58:44.510239 140500154140224 [top_zip_table_builder.cc:1344] ToplingZipTableBuilder::Finish(/storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00/14627028.sst): first pass time = 1.36's, 81.130'MB/sec 2024/08/20-01:58:46.670188 140500154140224 [top_zip_table_builder.cc:2764] ToplingZipTableBuilder::Finish(/storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00/14627028.sst): old prealloc_size = 147639500, real_size = 82808528 2024/08/20-01:58:46.670342 140500154140224 [top_zip_table_builder.cc:1765] BuildReorderMap(/storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00/14627028.sst): index type = NestLoudsTrieDAWG_Mixed_XL_256_32_FL, store type = DictZipBlobStore usrkeys = 162833 prefix = 4 raw-key = 0.0020 GB zip-key = 0.0003 GB avg-key = 12.00 avg-zkey = 1.92 raw-val = 0.1066 GB zip-val = 0.0825 GB avg-val = 654.82 avg-zval = 506.38 2024/08/20-01:58:46.670503 140500154140224 [top_zip_table_builder.cc:1295] /storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00/14627028.sst: sumWaitingMem = 0.000 GB, sumWorkingMem = 0.020 GB, reorder workingMem = 0.0004 GB, waited 0.000 sec, Key+Value = 0.111 GB 2024/08/20-01:58:46.903656 140500154140224 [top_zip_table_builder.cc:3092] ToplingZipTableBuilder::Finish(/storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00/14627028.sst): second pass time = 2.16's, 49.404'MB/sec, value only(96.5% of KV) wait indexing time = 0.00's, remap KeyValue time = 0.23's, 361.697'MB/sec (all stages of remap) Get OrderMap time = 0.00's, 2460.568'MB/sec (index lex order gen) rebuild zvType time = 0.17's, 0.236'MB/sec write SST data time = 0.06's, 1393.036'MB/sec dict compress time = 0.00's, 1118483.000'MB/sec z-dict build time = 0.00's, sample length = 1.118'MB, throughput = 29047.734'MB/sec zip my value time = 2.16's, unzip length = 0.107'GB zip my value throughput = 49.404'MB/sec zip pipeline throughput = 124.369'MB/sec entries = 162833 avg-key = 24.00 avg-zkey = 1.92 avg-val = 654.82 avg-zval = 506.38 usrkeys = 162833 avg-key = 16.00 avg-zkey = 1.92 avg-val = 661.82 avg-zval = 506.38 TagRS{ kinds = RS_Key0_Tag1 bytes = 0 } TagArray{ size = 162833 bytes = 549584 } seq expand size = 1139831 multi value expand size = 0 cnt WriteAppend = 13 UnZipSize{ index = 0.0026 GB value = 0.1066 GB dict = 1.12 MB all = 0.1105 GB } __ZipSize{ index = 0.0003 GB value = 0.0825 GB dict = 1.12 MB all = 0.0844 GB } UnZip/Zip{ index = 8.3504 value = 1.2931 dict = 1.00 all = 1.3091 } Zip/UnZip{ index = 0.1198 value = 0.7733 dict = 1.00 all = 0.7639 } ---------------------------- total value len = 62.535374 GB avg = 0.180 KB (by entry num) total key len = 6.797409 GB avg = 0.020 KB total ukey len = 3.195275 GB avg = 0.008 KB total ukey num = 0.389694038 Billion total entry num = 0.346572046 Billion write speed all = 2.289291010 MB/sec (with seq num) write speed all = 2.197743638 MB/sec (without seq num) 2024/08/20-01:58:47.114252 140500154140224 [compaction_job.cc:1944] [default] [JOB 6193] Generated table #14627028: 162833 keys, 84438555 bytes, temperature: kWarm 2024/08/20-01:58:47.114309 140500154140224 EVENT_LOG_v1 {"time_micros": 1724090327114276, "cf_name": "default", "job": 6193, "event": "table_file_creation", "file_number": 14627028, "file_size": 84438555, "file_checksum": "", "file_checksum_func_name": "Unknown", "smallest_seqno": 189647005312, "largest_seqno": 189742917050, "table_properties": {"data_size": 82455616, "index_size": 312000, "index_partitions": 0, "top_level_index_size": 0, "index_key_is_user_key": 0, "index_value_is_delta_encoded": 0, "filter_size": 0, "raw_key_size": 3907992, "raw_average_key_size": 24, "raw_value_size": 106626817, "raw_average_value_size": 654, "num_data_blocks": 1, "num_entries": 162833, "num_filter_entries": 0, "num_deletions": 0, "num_merge_operands": 0, "num_range_deletions": 0, "format_version": 0, "fixed_key_len": 24, "fixed_value_len": 18446744073709551615, "filter_policy": "", "column_family_name": "default", "column_family_id": 0, "comparator": "leveldb.BytewiseComparator", "merge_operator": "nullptr", "prefix_extractor_name": "nullptr", "property_collectors": "[Rdb_tbl_prop_coll_factory]", "compression": "FlatZip", "compression_options": "RS_Key0_Tag1-NestLoudsTrieDAWG_Mixed_XL_256_32_FL-DictZipBlobStore", "creation_time": 1724090323, "oldest_key_time": 0, "file_creation_time": 1724090323, "slow_compression_estimated_data_size": 0, "fast_compression_estimated_data_size": 0, "db_id": "a007a635-5c0a-4b4a-be96-b9c695cb016b", "db_session_id": "9474K4QZ2QA6TIYF9LEW", "orig_file_number": 14627028, "seqno_to_time_mapping": "N/A", "__indexstats__": "[...1 records...]"}} 2024/08/20-01:58:47.142566 140500154140224 [compaction_job.cc:699] job-06193: subcompact[0], size: 0.186704 G, files: /storage/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/mytopling/.rocksdb/job-06193/att-00 [14627027,14627028] 2024/08/20-01:58:47.177415 140500154140224 (Original Log Time 2024/08/20-01:58:37.858045) EVENT_LOG_v1 {"time_micros": 1724090317857986, "job": 6193, "event": "compaction_started", "compaction_reason": "FilesMarkedForCompaction", "files_L2": [14626982], "files_L3": [14626931, 14627004], "score": 0.901893, "input_data_size": 209125072, "oldest_snapshot_seqno": 189743356012} 2024/08/20-01:58:47.177418 140500154140224 (Original Log Time 2024/08/20-01:58:47.176977) [compaction_job.cc:2018] [default] [JOB 6193] Compacted 1@2 + 2@3 files to L3 => 186703553 bytes 2024/08/20-01:58:47.177420 140500154140224 (Original Log Time 2024/08/20-01:58:47.177344) [compaction_job.cc:1220] [default] compacted to: files[0 0 0 2 0 0 0] max score 0.01, MB/sec: 22.5 rd, 20.1 wr, level 3, files in(1, 2) out(2 +0 blob) MB in(23.7, 175.7 +0.0 blob) out(178.1 +0.0 blob), read-write-amplify(15.9) write-amplify(7.5) OK, records in: 391969, records dropped: 31492 output_compression: Snappy 2024/08/20-01:58:47.177429 140500154140224 (Original Log Time 2024/08/20-01:58:47.177391) EVENT_LOG_v1 {"time_micros": 1724090327177371, "cf": "default", "job": 6193, "event": "compaction_finished", "compaction_time_micros": 9284531, "compaction_time_cpu_micros": 1439431, "output_level": 3, "num_output_files": 2, "total_output_size": 186703553, "num_input_records": 391969, "num_output_records": 360477, "num_subcompactions": 1, "output_compression": "Snappy", "num_single_delete_mismatches": 0, "num_single_delete_fallthrough": 0, "file_write_nanos": 132224197, "file_range_sync_nanos": 0, "file_fsync_nanos": 1894, "file_prepare_write_nanos": 5421, "lsm_state": [0, 0, 0, 2, 0, 0, 0]} 2024/08/20-01:58:47.319406 140500154140224 DEBG dcompact_worker.cpp:240: HttpPost: 200 OK: url = http://nlb-7zny4kaa1poal01o64.cn-shenzhen.nlb.aliyuncs.com:8443, body = {"instanceId":"nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137","labourId":"","dbId":"a007a635-5c0a-4b4a-be96-b9c695cb016b","dbStarts":1724082090,"starts":1724090317,"executesMs":9417,"compactionJobId":6193,"attempt":0,"compactionInputRawBytes":266152797,"compactionInputZipBytes":209125072,"compactionOutputRawBytes":0,"compactionOutputZipBytes":186703553,"headers":{"Accept":"*/*","Connection":"close","Host":"aliyun-topling-saas.topling.cn:18443","RemoteIp":"120.24.192.169","X-Forwarded-For":"120.24.192.169","region":"cn-shenzhen","token":"e6474c481bd4415abc537135cc03626b","instance-token":"e6474c481bd4415abc537135cc03626b","provider":"aliyun","CloudMarketInstanceId":"si-59c0ae5c955845588903","MeteringAssit":"","Transfer-Encoding":"chunked","traceparent":"00-b9123a47231aba805790028de3b7f792-c1cac5432e1bde69-00"}}, response = 2024/08/20-01:58:47.319496 140500154140224 INFO dcompact_worker.cpp:1456: finish /worker/dcompact-log/nfs/i-wz9deglxdazgiryp6ltb_10.57.5.137/2024-08-19T23.41.30/.rocksdb/job-06193/att-00: olev 3, work 9.418 s, result 6.257 ms, install 0.480 ms, input{raw 253.823 MiB zip 199.437 MiB}